私は、複数のユーザーがさまざまな(共有の)プロジェクトで共同作業できるコラボレーションWebアプリケーションを作成しようとしています。これまで私はJavaScriptクライアントと1つのローカルjWebSocketサーバを持っています。私は複数のjWebSocketサーバの代わりにAWS IoTを使用することができますWebSocketとAWSを使用したWebアプリケーションの構築
オプション1
:展開時、スケーラブルなままに
、私は2つの選択肢を考えました。プロジェクトの変更を簡単に公開できます。公開するだけで済みます。 /project/{project-id}
。しかし、従来の要求/応答メカニズムはどのように機能しますか?
問題:要求を処理 EC2インスタンスは、別個のトピック(例えば/server/1
)に発行することによって到達可能であろう。しかし、JSクライアントがAWS IoTに接続するとき、リクエストを送信するEC2インスタンスはわかりません。どのようにして各クライアントをインスタンス/トピックに割り当てることができますか?
オプションAWS Application Load Balancerの背後にある複数のEC2インスタンス上の2台の
実行jWebSocketサーバ。バランサは各クライアントをサーバに割り当てるだけで、従来のリクエスト - レスポンス・フローは問題にはなりません。しかし、変化を推進するのはどうですか?
問題:各サーバが接続されたクライアントの独自のセットを持っているので、それは別のサーバーに接続しているクライアントに変更をプッシュすることはできません。
は、ずさんな解決策のように思えるからイベントを受信すると、AWSのIoTへのリクエストを送信するためにjWebSocketをミキシング
- 備考。
- 特定のプロジェクトへのサブスクリプションを許可または拒否するために、プログラムごとにCognito IDごとにIoTポリシーを適合させることができます。
- ラムダによって導入されたhigh latencyのため、AWSラムダを使用してサーバーを放棄することは選択できません(異なる経験をした場合は、共有してください)。
関連記事
任意のためのおかげで、あなたがこの問題で私を与えることができると思いました。
私はElastic Beanstalk(それをサポートするために少し変更されたnginx.conf)上でwebsocketsアプリケーションを実行し、同様の問題が展開に及んだ。 WebSocketの永続的な性質のため、クラスタ化されたakkaインスタンスを使用してメッセージを公開しました。デプロイメントでは、再接続を指示するメッセージをJSクライアントに送ります。私たちが完璧ではなかったので、あなたが思いつく解決策に非常に興味があります。 –
EBSとAkkaを注目してくれてありがとう(どちらも知らなかった)。あなたはあなたが終わったアーキテクチャをスケッチすることができますか? **すべての**クライアント(別のサーバーに接続されている場合でも)に公開できる一方で、要求 - 応答方法で作業できましたか? –
サイドノート:Elastic Beanstalkは実際には「EB」です。 EBSはElastic Block Storeの頭字語です。 –