私たちは、多くの変換を行うために使用される計算集約型サービスを提供しています。大部分が計算上のバウンド(CPUバインド)プロセス。本質的に何が起こるかは、スロフト経由で処理サービスにメッセージを送信するメッセージブローカーがあることです。ZookeeperとThriftを使用した負荷分散サービス
メッセージの処理を行うために異なる藻類を実行する複数の異なる処理サービスがあります。これらのメッセージは、1つ以上の処理アルゴリズムにルーティングされます。私たちのメッセージ量は可変であり、処理アルゴリズムの必要性もあります(つまり、XYZを含む多くのメッセージを取得してから、algo 1に送信し、そうでなければalgo 2に送信します)。
これは、水平方向にスケーラブルなものに展開したいと考えています。したがって、我々は処理アルゴを実行している複数のノードを持っています。メッセージングの負荷に応じて、私たちのThrift要求を別のサーバーに送信する必要があります(すべてのサービスが各処理Algo1〜3のインスタンスを実行しているとします)。たとえば、Algo 1で処理したいメッセージが大量に取得されている場合、2つのサーバがalgo 1を実行しており、3つ目のサーバが他の2つのalgos(Algo 2 & 3)の要求を処理しているとします。
だから、システムは次のようになります。
Client ----Request-------|
-----------|--------------------
| Coord & Load Balancer Service | ... like zookeeper
--------------------------------
<--|-->
| Route messages to servers...
Server1: Server2: Server 3:
Algo1 instance Algo1 instance Algo2 instance
Algo3 instance
すべてのプロセスはJavaで書かれています。
これは、Zookeeperを使用してセットアップするのが簡単なことです。私たちは、Algosを追加したり変更したりすると、Zookeeperを使用して設定の側面を簡単に処理できます(つまり、サーバーはAlgoの更新や追加を受信して構成された状態で提供します)が、負荷分散の側面をどのように管理しますか?
乾杯!
こんにちは、あなたはこの質問を解決しましたか?どうやってやったの?私は同じ質問を今すぐ研究しています(スケーラブルな自己保守可能な倹約サービス配備)、そして経験やアドバイスが得意です;-) –
@Sergey Vasilyev、私たちは独自のソリューションを同様の方法でトップのZooKeeperを実装しましたノーベルトが(多くの機能が少ない)物事を行う方法に。いくつかの自由な時間が回っている場合Norbertを実装することを検討するかもしれない、非常に見栄えの良いプロジェクト。 IMOは私たちがしたことをやりません、以下のジョナスの答えを見てください。あなたがまだ私たちのインプラントの詳細を知りたいのであれば教えてください。 – NightWolf
はい、ノルベルトに似ていますが、私はPythonとPHP(既に)を使用しており、将来Java/C/C++を使用する予定です。そのため、私はThriftをRPCソリューションとして選択しました。残っているのはロードバランシングとクラスタ管理のみです。 ZooKeeperはこれに適していますが、私は特定のアーキテクチャソリューションを探しています。ノーバートは、その絵に見られるように、私が探しているものの基本概念です。だから、それは良いですか?安定していますか?それは簡単に管理できますか?または、あなたはこれをどのように解決したのか記述できますか?私のjabberは "[email protected]"、Skypeは "nolar.info"です。ありがとう:) –