注目の的です!

Badooの使命は、世界中の新しい友達を見つけるのを支援することです。 このために、私たちのサイトには多くのツールとサービスがあり、ユーザーが他の中で際立って人気を高めることができます。 それらの1つは、ロシア語版のSpotlightサービス-「Spotlight」です。 私たちのサイトのほぼすべてのページに存在し、12枚の写真のブロックです。 このサービスのコンセプトは、ユーザーが自分に最も近い地理的な隣人の写真を見ることです。 彼は、左の最初の場所に自分の写真が表示されるようにリクエストを送信できます。 その後、他のすべては右にシフトされ、後者は削除されます。









一見したところ、これはどのように簡単なサービスが機能しますか?



現在、Badooは30を超える言語をサポートしています。これには、右から左へ書く方向の言語(RTL言語:ヘブライ語、アラビア語など)が含まれます。 このサポートは、テキスト素材の翻訳に限定されず、インターフェイス要素の最適化も含まれます。 Web技術者は、Spotlightも例外ではないことを確認しています。 RTL言語の場合、ミラーリングされ、写真は右から左に移動します。



各国ごとに、他のすべての都市が隣接し、地区を形成する中心都市が決定されます。 中央都市とは、人口が各国ごとに経験的に決定される所定のしきい値を超える都市です。 通常、地区は交差しており、ある地区のユーザーは同時に複数の他の地区に入ることができます。 アルゴリズムによれば、最初に最も近い地区が検索され、その距離が計算されます-D



一部の中央都市は、たとえば島などで手動で設定されます。 すべての集落の地区は、居住する国でのみ選択されます。 技術的には各大陸内でこれを行うことを妨げるものはありませんが、国境にある都市は外国のオクルーグに陥ることはありません。 以下にフランスの郡の視覚化を見ることができます:









技術面では、Spotlightサービスの主要な部分はCプログラムです。これは、アプリケーションを受け入れ、地区に配布し、ユーザーをローテーションするデーモンです。 複数のSpotlightデーモンがサーバー上で同時に動作し、負荷をそれらの間で分散します。 それらのそれぞれは、国の特定のセットと特定の性的指向のユーザーのグループに責任があります。 後者は、サービスのもう1つの利点です。 ユーザーには、興味のある人だけが表示され、行の全員は表示されません。 以下の表は例です。









女の子に会いたいパリの若者がサーバー番号1に送られます。 同時に、彼は写真のブロックで、同じ関心を持つ大都市圏の男性と女性を見るでしょう。



モデレーターによって承認された写真を少なくとも1枚持っている人だけがSpotlightにアクセスできますが、このプロセスをできるだけ早く、見えないようにしようとしました。 ユーザーが写真をアップロードしたばかりの場合でも、驚くほど節度が加速されます。 彼が他の写真の中で最初に自分自身を見るとき、1分も経たないでしょう。 ユーザーが写真を削除すると、その写真はすぐにサービスに反映されます。すべての写真の中から、交換に適した最初の写真が見つかります。 現在のすべてのアプリケーションでは、写真とプロファイルの関連性が常に確認されています。 たとえば、ユーザーがサイトのルールに違反してブロックされた場合、ユーザーのアプリケーションは削除されます。



当初、SpotlightはMemcacheに基づいており、MySQLデータベースは永続的なアプリケーションストアとして使用されていました。 更新用のJavaScriptのフロントエンドサービスは、nginx Webサーバー用の特別なモジュールを介してMemcacheに直接アクセスしました。 データベース内のキューを処理し、Memcache内のデータを更新したPHPスクリプトは、アプリケーションの処理を完全に担当しました。 その後、ユーザーは国と性的指向のみでグループ化されたため、国のすべての都市の人々が一度に見られました。 サービスをより速く、より柔軟にし、機能を拡張するために、Cで特別なデーモンを作成することが決定されました。



解決しなければならなかった興味深いタスクの1つは、Spotlightの男性と女性の数のバランスをとることでした。 多くの都市では、多くの理由で男性が少女よりもこのサービスを積極的に利用しています。 前者の数が少なくとも25%になるように、少女と若者の比率のバランスを取る必要がありました。 これを行うために、彼らは無料でサービスを使用するための招待状を導入しました。



Spotlightがあり、現在のユーザーが特定の要件を満たしている各ページで、不足している空きスペースの数を最大25%計算します。 適切な空き容量がある場合は、女性ユーザーに招待状を表示します。 タスクの難しさは、招待の数が制限されていることです(同時にサイト全体への招待を表示することはできません)。さらに、ユーザーはしばらく考えてからサービスを拒否できます。



最初に頭に浮かぶのは、すべてのリクエストの可用性を確認することです。 招待されている場合は、招待状を表示します。 10席あり、すべての適切なユーザー(ある時点で1000人など)を招待し始めたとします。全員が同意します。 そして、次の数分で、サイトユーザーはページ上に機関銃の写真を見るでしょう。 したがって、空き場所の記録を保持し、同時リクエストを正しく処理する必要があります。 このために、Memcacheが使用されます。









アルゴリズムは次のとおりです。

  1. Spotlightでページをリクエストするたびに、既存のアプリケーションのリストが取得されます。 ユーザー数(M \ F)の統計を取得し、それに基づいて可能な無料招待の数を決定します。
  2. ユーザーが特定の基準を満たしている場合、すぐにサービスに参加しようとします。 空きの数ではなく、占有されている場所の数を節約し、Memcacheのキーの増分をused_slots_ <area_id>にします。 使用可能な郡と同数のキーがあります。 このキーの値が空いている場所の数よりも大きい場合、値を1つ減らし、招待状を表示しません。 キーは30秒間保存され、実際、バランスの頻度に責任があります。
  3. 場所を予約できた場合は、ユーザーに招待を表示し、セッションで適切なフラグを立てます。 ユーザーの決定を待っています。
  4. ユーザーが失敗した場合、デクリメントします。
ユーザーがアクションを実行せずにページを閉じる可能性は十分にあります。 この場合、招待は発行されますが、実装されません。 Memcacheでキーの有効期限が切れるとすぐに、バランシングが頻繁に行われるため、これは問題になりません。



有料サービスとしてのSpotlightの本質は、ユーザーが自分が支払った注目を集めることです。 決済が大きいほど、サービスを利用したい人が増えます。 しかし、一方で、ユーザーの写真が注目される時間については、より高い競争があります。 このサービスでは写真がすぐに消えることはありませんが、アプリケーションが少なすぎる場合は静止しません。 したがって、費やしたお金と、お互いを見つけてお互いを知りたいと思うユーザーの数とのバランスがとられます。



Badooの開発者であるAlexander Treg Treger。



All Articles