着信ファイルのラウンドロビン


8

一意のファイル名と新しいファイルの束は、定期的に「見える」1を 1台のサーバー上で。(毎日数百GBの新しいデータと同様に、ソリューションはテラバイトまで拡張可能である必要があります。各ファイルのサイズは数メガバイトで、最大で数十メガバイトです。)

これらのファイルを処理するマシンがいくつかあります。(数十、ソリューションは数百まで拡張可能でなければなりません。)新しいマシンを簡単に追加および削除できるようする必要があります。

各着信ファイルをアーカイブストレージにコピーする必要があるバックアップファイルストレージサーバーがあります。データは失われてはならず、すべての受信ファイルは最終的にバックアップストレージサーバーに配信される必要があります。

各受信ファイルは、処理のために単一のマシンに配信さミスト、およびバックアップストレージサーバにコピーされるべきです。

受信サーバーは、途中で送信したファイルを保存する必要はありません。

上記の方法でファイルを配布するための堅牢なソリューションをアドバイスしてください。ソリューション Javaに基づくものであってなりません。Unix方式のソリューションが推奨されます。

サーバーはUbuntuベースで、同じデータセンターに配置されています。他のすべてのものは、ソリューション要件に適合させることができます。


1 ファイルシステムへのファイルの転送方法に関する情報を意図的に省略していることに注意してください。その理由は、今日、ファイルがいくつかの異なるレガシー手段によってサードパーティから送信されているためです(奇妙なことに、scp経由、およびØMQ経由)。ファイルシステムレベルでクラスター間インターフェイスを切断する方が簡単に思えますが、実際に特定のトランスポートが必要なソリューションがある場合は、レガシートランスポートをそのトランスポートにアップグレードできます。


5
この質問が好きです。これは、選挙前のマニフェストでSFに呼び戻すことについて話したことのようなものです。
トムO'Connor

この質問を閉じるために投票した人々がコメントで彼らの動機について詳しく述べていただければ幸いです。特にオフトピックの投票。ありがとうございました。
Alexander Gladysh 2013年

@AlexanderGladysh歴史的に、私たちは「システムを設計する」スタイルの質問にあまり熱心ではありませんでした。たまたまここの問題は実際には十分に狭い範囲で解決できるので、私はそれに答えました。誰もが私とトムに同意するわけではありません。
sysadmin1138

うーん。さて、この質問をするのにもっと良い場所はありますか?
Alexander Gladysh 2013年

@AlexanderGladysh ServerFault Chatは、これらのような自由回答の質問が終わる場所のようです。
sysadmin1138

回答:


5

ここにあなたが探しているものに対する一つの解決策があります。このシステムの作成にはJavaは関係なく、ただすぐに利用できるオープンソースのビットだけです。ここで紹介するモデルは、例として使用しているテクノロジー以外のテクノロジーでも機能します。

スケーラブルなアップロード

  1. ファイルは、特定のラウンドロビンDNSアドレスにHTTP POSTされます。
  2. 次に、ファイルをPOSTするシステムは、ロードバランサーの別のペアを経由して、ジョブをAMQPシステム(ここではRabbit MQ)にドロップして、処理ワークフローを開始します。
  3. HTTP POSTを受信するロードバランサーは、それぞれOpenStack Swiftオブジェクトストアサーバーのグループの前にあります。
    • ロードバランサーはそれぞれ、背後に2つ以上のOpenStack Swiftオブジェクトストアサーバーを備えています。
    • 「Round Robin is not HA」は、ターゲットがHA自体の場合に発生します。YMMV。
    • 耐久性を高めるために、RRDNSのIPは個別のホットスタンバイLBクラスターにすることができます。
  4. 実際にPOSTを取得するObject Storeサーバーは、ファイルをGlusterベースのファイルシステムに配信します。
    • Glusterシステムは分散(別名シャード)と複製の両方である必要があります。これにより、愚かな密度にスケーリングできます。
  5. AMQPシステムは、使用可能な処理ノードに最初のジョブをディスパッチして、バックアップを作成します。
  6. 処理ノードは、ファイルを主ストレージからバックアップストレージにコピーし、必要に応じて成功/失敗を報告します。
    • 失敗モードの処理はここでは図示されていません。基本的に、機能するまで試してください。そして、それが機能しない場合は、例外プロセスを実行します。
  7. バックアップが完了すると、AMQPは処理ジョブを使用可能な処理ノードにディスパッチします。
  8. 処理ノードは、ファイルをローカルファイルシステムにプルするか、Glusterから直接処理します。
  9. 処理ノードは処理製品をどこにでも預け、AMQPに成功を報告します。

この設定では、十分なサーバーがあれば、非常に高速でファイルを取り込むことができます。10GbEの総取り込み速度の取得は、十分にアップサイズすれば実行できるはずです。もちろん、それほど多くのデータを高速で処理するには、Processingマシンクラスにさらに多くのサーバーが必要になります。このセットアップは、1,000ノードまで、そしておそらくはそれ以上にスケールアップする必要があります(どれだけ遠いかは、これのすべてで何をしているかによって異なります)。

深いエンジニアリングの課題は、AMQPプロセスの中に隠されたワークフロー管理プロセスにあります。それはすべてのソフトウェアであり、おそらくシステムの要求に合わせてカスタムビルドされます。しかし、それはデータでうまく供給されるべきです!


3

ファイルがscp経由で到着することを明確にしたので、トランスポートメカニズムはレイヤー3でリダイレクトできるため、フロントエンドサーバーが存在する理由はまったくわかりません。

LVSディレクター(ペア)を前に置き、処理サーバープールを後ろに置き、ラウンドロビンリダイレクトポリシーを設定します。これにより、プールへのサーバーの追加とプールからのサーバーの削除が非常に簡単になり、フォールバックするフロントエンドサーバーがないため信頼性が向上し、ファイルの取得に関するプル/プッシュの質問に対処する必要がないことを意味しますフロントエンドがないため、処理サーバーへのフロントエンド。

各プールサーバーは、ファイルを受信するときに2つの処理を実行する必要があります。まず、ファイルをアーカイブストレージにコピーし、次にファイルを処理して送信します。


2
尋ねられたことを考えると、何が足りないと感じますか?質問で示されていない詳細に対処することに失敗した場合、質問が質問ではない場合、それは確かに答えではありませんか?そして、あなたは問題が現状では良いものであるとあなたが考えることを非常にはっきりさせました。
MadHatter 2013年

1
質問に対するコメントとして、質問について質問する傾向がありますが、それで終わりです。
トムO'Connor

私はむしろあなたに同意します。しかし、あなたは質問を標準化したので、あなたは少なくともそれに基づいてすべての回答を完全に
ビートにした

2
それはエキュメニカルな問題でしょう。
Tom O'Connor 2013年

@MadHatter、ご意見ありがとうございます。質問にいくつかの情報を追加しました。
Alexander Gladysh 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.