私は食糧を配達するためのWeb /モバイルアプリを持っています。ことは、私のサーバーはもっと多くを行うよりは、をデータベースに読み込みます。今はPostgreSQLを実行していますが、問題は多くのサーバリクエストが短時間(正午と夕方)に発生するため、さまざまなインスタンス(バックアップ用のS3)が必要です。 は、のスループットを書いています。これは、状況がスケーリングされ、PGのインスタンスがウサギのように見えるため、近いものではないと思います。Redis Backupサーバーの冗長性とフェイルオーバー戦略を実現する方法
マイ制約:
- はるかはで
- 約25.000 REQ /秒を読み込むよりもを書き込み、私はデータしばらくの間、強い整合性の保証を必要とする、成長
- を書き込みシステムに登録された後加工されていない(消費者注文はレストランによって確認された)データベースに書き込む
- それは障害のある1(一貫性の賛成で犠牲可用性)
私の本番サーバーでいくつかのベンチマークを行うを持っているよりも、実行中のサービスを持っていないことが好ましい、Redisのは、私の現在のピークの1.5倍取り扱うことが可能です1台のサーバーのみで、List
構造を持ち、注文キューの管理に非常に役立ちます。
私はセンチネル/ Clusterで箱のうちのRedisは、強い一貫性を提供することができないことを読んで、そう、これを達成するために、私はこれらの2つのことのいずれかを実行することを考えた:
- セットセンチネルと
Wait
とappendfsync always
ポリシーが設定された3つのインスタンス(1つのマスタと2つのスレーブ)を設定し、Wait
が2未満の場合はクライアントをチェックインします。このようにして、Sentinelはレプリケーションとフェイルオーバーを処理し、強い一貫性。 - 2つ目のオプションは、
appendfsync always
と同じ3つのインスタンスを持つことですが、これらの3つのアプリケーションサーバーにソフトウェアRAID 1を適用するだけですが、このようにして冗長性を実現するにはコントロールロジックを考えなければなりませんフェイルオーバー機能を提供します。問題は、完全な冗長性を提供するために、各Redisインスタンスで書き込みの試行を管理する必要があり、このアプリケーションがダウンした場合、もう1つのアプリケーションが停止するため、プロキシの背後でアプリケーション(node.js) 3が同期しているかどうか、同期する最新のデータは何か分からないことがあります。
私の観点から見ると、2番目のオプションは1番目のオプションよりも堅牢に見えますが、これは2番目のオプションで3番目のオプションを使用できますが、 。
私には何が欠けていますか?提案?