3

こんにちは、学校のプロジェクト用に「Twitter クローン」を作成しています。

リアルタイム更新用にパブリッシュ サブスクライブ パターンを実装したいと考えています。

  • ユーザーは他のユーザーを「フォロー」できます
  • ユーザーがオンラインで、「フォロワー」が新しいメッセージを投稿すると、ユーザーはリアルタイムの通知を受け取る必要があります。

Node.js、Socket.io、Redis、MySql をデータベース プロバイダーとして使用しています。メッセージキューを使用する必要がありますか? メッセージキューを使用している人は何のためにいますか?

助けと答えをありがとう

4

2 に答える 2

7

アップデート

あなたが小さいときは問題はありません。しかし、ファンアウトが大きくなると(すべてのフォロワーにメッセージを転送するのは費用がかかるため、MQを使用してオフラインでこれを行いたいと考えています。Twitterのように、アクティブなすべてのツイートをメモリに保存します。ツイートが投稿されると、次のようになります(設定)。メモリ内のツイート@key(unique)。Twitterのスノーフレークのようなものを使用できます。

次に、ファンアウトプロセスが発生します。すべてのユーザーについて、その一意のキー(ツイートID)をリストに追加して、ユーザーがメモリからツイートを取得できるようにする必要があります。あなたのサイトが小さいときは、メッセージキューなしでこれを行うことができると思いますが、たとえば274,776人のフォロワーを持つscobleのようなユーザーからのメッセージを配信する必要がある場合、これはかなり高価になる可能性があります。

多くのユーザーがオフラインになっているため、これらのツイートをすぐにユーザーに配信する必要はありません。すべてをメモリに保持する必要があるため、このようにシステムを設計します。これを効果的に行うには、それが唯一の方法だと思います。


Twitterと同じようにMQを使用する必要があります。彼らは独自のMQであるKestrelをオープンソース化しています。High Scalabilityブログには、非常に興味深い記事があります。Twitterのスケーリング:Twitterを10000パーセント高速化。大手企業がどのようにウェブサイトを拡大するかを学ぶために、HighScalabilityブログで少なくともホットな記事を研究することをお勧めします。Twitterのスケーリング方法を説明する他のリンク:

また、あなたが読んだと思います:

また、Twitterがオープンソースにしているすべてのプロジェクトを見てみましょう。

たとえば、人気のあるMQを見てみましょう。

于 2012-07-31T06:22:05.757 に答える
0

私は最近、同様のユース ケースに取り組み、nodejs、socketio、および redis pubsub を使用しました。

コードはhttps://github.com/roshansingh/realtime-notificationsで入手できます。

質問に戻ります。

  • ユーザーは他のユーザーを「フォロー」できます
  • ユーザーがオンラインで、「フォロワー」が新しいメッセージを投稿すると、ユーザーはリアルタイムの通知を受け取る必要があります。

socketio を使用してルームを作成し、redis pubsub で同じ名前のチャネルを作成することで、両方を実現できます。

フローは次のようになります。ユーザーがログインするとすぐに、socketio ルーム (John、Dan など) に参加させることができます。これにより、サブスクライブしたすべてのルームがデータベースに保存されます。同時に、これらのチャネル名 (John など) で redis pubsub にサブスクライブします。これらの更新を受信すると、部屋、つまりすべてのオンライン ユーザーにブロードキャストできます。

John のアクティビティを同じチャネル名 (John) で redis に公開する必要があります。

上に貼り付けたリンクのコードを読んでください。助けが必要な場合はお知らせください。

于 2013-01-15T14:50:13.533 に答える