0

クリックトラフィックをキャプチャするために、拡張性の高いシステムを構築する必要があります。HTTPクリックリクエストがすぐに返されるように、データを非同期で処理したいと思います。クリックトラフィックは、レポートのためにデータストアに到達する必要がありますが、リアルタイムである必要はありません。ロードバランサー(おそらくAmazonのエラスティックロードバランサー)を前に、需要を満たすために必要な数のアプリサーバーを追加することで、このソリューションを拡張できるようにしたいと考えています。私はいくつかの可能性を考えました(ところで、プラットフォームはJavaです):

  1. クリックデータをメモリキュー(BlockingQueueなど)に書き込みます。別のスレッドがキューをドレインし、バックエンドデータストアに挿入します。このアプローチでは、キューのサイズが使用可能なメモリに制限され、ノードがクラッシュすると、キュー上のすべてのデータが失われます。キューが特定のサイズに達するとディスクにオーバーフローするBlockingQueue実装を検索しましたが、何も見つかりませんでした。

  2. クリックデータを各ノードのファイルシステムに100MB程度のファイルで書き込みます。その後、データはバックエンドプロセスによって収集され、データストアに挿入されます。このアプローチでは、単一障害点がなく、データが失われる可能性が低くなります。たとえば、ノードでエラーが発生した場合、そのノードはロードバランサーから削除されます。バックエンドデータストアが使用できなくなった場合、再び使用可能になったときにデータファイルの転送を再開できます。データをバックエンドデータストアに取り込むには時間がかかりますが、すべてのデータがそこに到達する限り、問題はありません。

  3. activemqやrabbitmqなどのメッセージングシステムを使用します。メッセージングシステムは、各ノードにインストールされていない限り、単一障害点を導入します。これはやり過ぎのようです。メッセージングシステムは、永続的なメッセージを提供し、トランザクションでメッセージが1回だけ消費されることを保証します。キューのコンシューマーは、データをデータストアにロードします。メッセージングシステムはバックエンドでクラスター化できますが、n-appサーバーをサーバー化する必要があり、システムの制限要因になり、httpリクエストのパフォーマンスに影響を与える可能性があります。

4

1 に答える 1

1

Akka.ioは、このタスクに適したフレームワークのように思えます。アクター モデルを使用し、リモート アクターをサポートします。これは、各メッセージが 1 回だけ消費されることを保証し、複数のサーバーにわたってシステムをスケーリングできることを意味します。また、ファイルベースのアクター メールボックスとアクター監視もサポートしているため、1 つのサーバーがクラッシュしてもシステムを回復でき、未処理のメッセージが失われることはありません。多くの企業がプロとして使用しているため、かなり徹底的にテストされています.

于 2012-12-11T06:18:57.090 に答える