アプリケーション用のWebサービスAPIを構築中です。また、RESTとSOAPの両方を介してサービスを公開することを計画しています。
サービスを実装するためにどのプログラミング言語を選択すべきかについて、コミュニティからフィードバックを得ることに興味がありますか? (私はC#、JavaおよびRuby-サービスを作成するのに十分なRoRを知っています)。
このサービスは主にHTTP POSTサービスです。約2000の同時接続を処理する必要があり、1秒あたり約10,000のHTTP POSTを処理できる必要があります。(for SOAPクライアントが呼び出すsubmitメソッドがあります)。
サービスは、POST要求に対してクライアントに応答を返しません。
どのプログラミング言語/アーキテクチャを使用すべきかについてのアイデアはありますか?
1秒あたり10,000リクエストは、1か月あたり250億ヒットです。これは、次の2つのいずれかを意味します。
Webフロントエンドのファーム全体にその量の負荷を分散するためのスイッチングハードウェアだけでも、数千ドルのコストがかかります。
1秒あたり50件のリクエストを処理できるWebサービスを作成することから始めます(言語の選択はそれほど重要ではありません)。アプリケーションが非常に混雑していて定期的にそのしきい値を超えている場合は、スケーリングの問題にフルタイムで取り組むために誰かを雇う余裕があり、無料のQ&Aサイトで助けを求める必要はありません。
私の以前の経験に基づいて、私はあなたに以下のアドバイスを与えることができます。
毎秒10,000の投稿で、言語はあなたの心配の最も少ないです。はるかに大きな問題は、サーバーファームとネットワークの設計です。これを1つのボックスで実行する予定はないと思いますか?
高度にスケーラブルなアプリケーション、信頼性が高く、分散型で、マルチコア/マルチプロセッサシステムを使用していますか?ここで私はすぐにErlang/OTPとYawsをWebアプリケーションサーバーとして考えます。 Yawsは、非常に高い負荷の下で非常に安定して高速に動作します。そして、プラットフォームとしてのErlang/OTPは、安定したソフトウェアの開発を支援するいくつかのメカニズムとともに、並行性と配布のために設計されています。コスト:関数型プログラミング言語を使用した並行性指向はありませんOOP with JavaまたはC#、構文は奇妙に見えます(ただし、一度実行すると非常に単純で強力です) 'それを採用しました)、そしてサードパーティのライブラリの数は主流の言語ほど多くはありませんが、それだけの価値があります。
お役に立てれば
ミュー
その速度で、とにかくHTTPを壊している(応答がない)ので、独自のサーバーを開発するか、オープンソースサーバーを変更することをお勧めします。
すべてをCまたはC++で記述すれば、できるだけ早く熱狂するでしょう。
ただし、スケーラビリティは言語の選択以上の影響を受けます。
-アダム
1台のマシンから月に10億件の投稿を取得することがわかりました。現在、1日あたり約350万件の投稿を処理しているc#で記述されたWebサービスがあります。 Webサーバーは3%のCPU使用率で稼働しています。つまり、少なくとも20倍強く押すことができます...
各マシンに4つのXeonSixコア、32 GBのRAM、高速ディスクアレイ、および書き込み用に高度に最適化されたデータベースがあると仮定します。ただし、各サーバーのコストはおそらく35,000ドルから40,000ドルの範囲です。
とにかく、ボトルネックはC#やJavaではありません。それがどれだけ大きくなるかに応じて、それはデータベースサーバーになります。私の場合、1日あたり10GBが削除され、10GBが追加される約300GBです。
問題を見てみましょう:
IO:これは簡単にシステムの最大のボトルネックになります。ホストOSとの最適な統合を提供し、非ブロッキングの高度なセマンティクスを提供し、オプションで同時実行をサポートする言語を選択してください。
データ:SOAP? XML? 最小化不要なCPUサイクルを実行する必要があります。 JSonを使用するだけの何が問題になっていますか? (そして、RESTアーキテクチャベースのサーバーはプロトコルでバイナリデータを使用できない...)という神の命令はありません。
内容:データの変換(たとえば、テキストから数値へ)が含まれる場合は、どの言語が最も効率的なメカニズムを提供するかも考慮する必要があります。例として、Java(これはあなたにとって非常に有力な候補です)では、Stringクラスは深刻なCPUの占有です。
JavaとErlangは非常に良い候補です。 Cは常にオプションですが、並行プログラミングははるかに困難です。
CGI(Common Gateway Interface)を介して実際に任意の言語を使用できるため、パフォーマンスが低下します。あなたがリストする言語の中で、私はC#が最速であると期待しています。言語間の速度の良い比較は 言語シュートアウト
本当にパフォーマンスが必要な場合は、CやDなどのパフォーマンス指向の言語の方向に目を向けてリクエストを処理することをお勧めします。
それはすべて、各リクエストが実際に実行する必要のある計算の種類によって異なります。
更新:それは火事であり、Webサービスを忘れることを意味します。簡単なHTTP200/OK応答を返送すると思います
いいえ、これは単一のボックスで実行することを意図したものではありません。いくつかのボックス(たとえば3-4)で実行することを目的としています。
リクエストが受信されると、他のマシンのキューにプッシュされ、HBase/Voldemortストアに取り込まれます。
私が言ったように、それは「ファイアアンドフォーゲット」ウェブサービスであることを意味しました
C llike言語が必要であり、完全なサーバーを作成しないようにするには、CGI(phpなどはすべて実行されます)WindowsサーバーはISAPIプラグインを提供しますが、これらはサーバーのコンテキストで実行されるため、メモリリークとGPFはサーバーを停止します。それに加えて、何かを変更するたびにサーバーを停止/起動するという不便さは、CGI/FastCGIの方が見栄えがします。