web-dev-qa-db-ja.com

クラウドサービスとIMプロトコルのアドバイス、バックエンドからグループチャットまでのモバイルアプリ

概要
私はAndroidおよびiOSでアプリを開発します。これにより、ユーザーはグループ「チャットルーム」をセットアップし、他のユーザーがセットアップしたチャットルームで話すことができます。サービスは非常にスケーラブルである必要があり、夜間のユーザーの大幅な増加に対応できるようにする必要があります(夢しか見ることができません)。


背景情報
以前は主にJavaとPythonを使用していましたが、このタスクに最も適した言語を使用する必要があります。新しいスキルをたくさん学んでもかまいません。

チャットの要件
チャットプロトコルは柔軟である必要があります。特定の「チャットルーム」の最初の投稿者/作成者が決定した要素に基づいて、「チャットルーム」を表示/投稿できるユーザーを決定できるようにする必要があります。また、ユーザーが単純なニックネーム(後で変更される可能性があります)を指定した後、アプリをインストールしてサービスの使用を開始できるようにする必要もあります。


チャットプロトコルプラン
周りを見回してみると、XMPPプロトコルが最適な候補だと思います。特に マルチユーザーチャット 拡張機能は私が必要とするもののように見えます。これは私の要件に最も適していますか、それとも別の潜在的な解決策を知っていますか?

更新:それ以来、 同期会議のプロトコル を調査しましたが、私のニーズに完全に適合しているようです。しかし、それがどれほど十分に文書化されているか、または実際にどのように実装するかはわかりません。


クラウドサービス
Amazon Web Services、Google App Engine、WindowsAzureのいずれかを決定しています。 AWSよりも管理が容易であるため、Azureが最適であるという結論に達しています(スケーラビリティの容易さがデザインの重要な要素になります)。GAEよりも制限が少ない可能性があり、さらにAzureにもまもなくAndroidとiOS電話の両方と簡単にインターフェースできるようにするツールキット。

更新:さらに詳しく調べると、AWSの方が安いようで、 Elastic Load Balancing(Elastic Load Balancing などのプロビジョニングがあります。 Auto Scaling)==、これにより、スケーラビリティを維持するために必要な余分な作業はごくわずかになります。

これはあなたが下した決定ですか、それとも他のクラウドサービスを推奨/検討しますか?


一般要件
すべてのコンポーネントは、十分に文書化され、信頼性が証明され、できれば高レベルであることが望まれます。たとえば、私はチャットプロトコルを実装するために自分で作成するのではなくプラグインを使用することを好みます-したがって、より経験豊富な人々にそれを残します。


ありがとう
お読みいただきありがとうございます。あらゆる側面についてアドバイスをいただければ幸いです:-)

8
Jon Cox

プロトコル

はい、これは警官隊のように聞こえますが、それはあなた次第です。正直なところ、あなたが説明したことはIRCに非常によく似ていますが、XMPPは非常に拡張性があり、広く使用されているため、IRC以外で動作し、サポートを受けるのがおそらく最も簡単です。その方向に進みたい場合は、両方のプラットフォームの多くの例を見つけることができ、おそらくすでに準備されたライブラリーさえも見つけることができます。推奨するつもりはありませんが、ここではクイック検索が非常に便利なツールになるはずです。正しい答えは1つではありませんが、XMPPは確かに悪い選択ではありません。

クラウドサービス

AzureとAWSはどちらも非常に優れたサービスです。多くの注目を集める、または重要なアプリケーションがそれぞれで実行されます。しかし、私がAWSよりもAzureを好む傾向がある理由の1つは、Microsoftが本当に簡単に入手できるようにしようとしていることです。まだ行っていない場合は、 Bizspark を調べます。承認された場合、とりわけ、Azureの無料の小さなインスタンスが提供されます。公平を期すために、 Amazonは同じようなことをします 、しかし彼らはあなたに少し少なく、そして1年だけを与えるようです(Bizsparkは3年間です)。一方、Bizsparkでは実際に承認を受ける必要がありますが、Amazonはそれを簡単に提供します。

全体として、どちらも非常に優れたサービスであり、MicrosoftとAmazonはどちらも、開発者が物事を成し遂げるのを支援することに熱心に取り組んでいる傾向があるため、どちらの方法でも間違いはありません。決定する最良の方法は、必要なものと比較して提供される機能と、最小および理想的なレベルの価格を確認することです。たとえば、Windows Phoneをサポートしたい場合、Azureが適切に機能するため、Azureの方が適している可能性がありますが、フルフィルメントサービスを利用してTシャツやコーヒーマグなどを発送したい場合、Amazonが最適です。より良い選択(注:これらのどちらにも目を通さないでください。サービスの独自の機能の例を示すためだけに言及しなかった2つのシナリオを意図的に選択しました。)

Elastic Load BalancingとAuto Scalingに関しては、それはクラウドサーバーが一般的に何をしているのかをAWSブランド化するだけです。すべてのまともなクラウドサービスは、少なくとも彼らの側からは、システムのスケーリングを技術的に無視できるものにします(スケーリングがうまくいかない悪いコードがある場合、それを実際に非難することはできません...)。ええ、それは良いことですが、誰もが持っているので、意思決定者であってはなりません。

2
Greg Jackson

チャットプロトコルについては何も知らないので、クラウドビットにスキップします。

プレゼンス全体をクラウドでホストするという考えは好きではありません。

フェイルオーバーモードの2つの小さな仮想サーバーのセットアップから始めませんか?月額40ドルで地理的に2つの小さな仮想インスタンスのバランスを取るのに十分な設備を提供するプロバイダーがあります。

成長に合わせて、クラウドをバーストに使用しながら、必要に応じて仮想インスタンスのサイズ/量を増やしたり減らしたりします。 VPSは、フルタイムで使用される1時間ごとのインスタンスよりも安価です。

あなたのシステムはチャットルームに基づいて簡単に分割できるように思えます。さまざまなリソースさまざまなチャットルームをホストし、同時ユーザーの数に基づいて移動し、ほぼ最適な分散に近づきます。

これには2つの技術的な課題があります。1:フローの途中で部屋を新しいサーバーに移行するにはどうすればよいですか。 2:単一のコンピューティングユニット/ vpsユニットよりも多くのリソースを必要とする部屋にどのように対処しますか?

0
Jonno