私はAWSでチャットサービスを拡張するための最適なソリューションを考え出しています。 - ユーザーは、サーバーがそのユーザーのIDに加入してサーバーへの接続を確立しAWSでのチャットのスケーリングのアイデアは?
Redisのパブ/サブ:私はカップル潜在的な解決策を作ってみました。誰かがそのユーザーにメッセージを送信すると、サーバーはユーザーのIDでチャンネルに公開します。ユーザーが接続しているサーバーはメッセージを受信し、適切なクライアントにプッシュダウンします。
SQS - 各ユーザーのキューを作成することを考えました。ユーザーが接続しているサーバーは、そのキューをポーリングします(またはSQS long-pollingを使用します)。新しいメッセージが検出されると、そのメッセージはサーバーからユーザーにプッシュされます。
SNS - 私は100のトピック制限を発見するまで、この解決策を本当に気に入っていました。 100人のユーザーしかサポートしないユーザーごとにトピックを作成する必要があります。
AWSを使用して他の方法でチャットを拡大することはできますか? SQSアプローチは実行可能ですか?キューにメッセージを追加するにはAWSがどれくらいかかりますか?
この回答をお寄せいただきありがとうございます。チャットサービスはウェブ上に構築されます。現在の考え方は、簡単なロング・ポーリング・ソリューションを使用してメッセージをブラウザにプッシュすることです。ユーザー数の観点から見れば、それは新製品であり、私たちは良い見積もりを持っていません。私たちは、登録する多くのユーザーをサポートできるようにしたいと考えています。 SQSのアイデアは興味深いですが、SQSの主な関心事はメッセージ間の待ち時間です。 1人のユーザーがキューにメッセージを追加すると、メッセージを受信するのにどれくらいの時間がかかりますか?私はプロトタイプを作るために必要なものかもしれない。 –
公正な点ですが、その設定(リレーショナルDB、ハードウェアバインドスケーリング、Java/C#コントロール)は、チャットを行う「古い学校」のようです。最近では、長期保存用のフラットファイル(おそらく最新のメッセージを1分に1回S3にダンプする)、Pub/Sub用SNS(1つのトピックにつき1つのトピック)、高性能の非Twisted(Python)やNode.js(JavaScript)のようなスレッド・イベント・サーバー、そして最後にWeb SocketsやServer Sent Eventsを使用して、サーバーへの負荷を最小限に抑えながら、メッセージ・ストリームを各クライアントに有効にします。または私は何かを逃していますか? –
@Roland。私は、バックエンドの大きなリレーショナルDBとフロントエンドサーバーの束がこれを行う古い学校の方法だとあなたに同意します。今日私はサービスを構築していましたが、おそらくRDSとDynamoDBの組み合わせを使用していました。ウェブソケットやロングポーリングを使用するフロントエンドは、ターゲットとしていたクライアントの種類によって異なります。この猫をスキンケアするには多くの方法がありますが、要件についてはほとんど知らないうちに(プライベートLAN上で実行しますか?クラウドで?スケール?コストの心配?成長率?クライアントタイプ?データライフサイクルなど) ... –