2 つの異なるデータセンター (米国とヨーロッパ) にいくつかのバックエンド サーバーがあります。これらのサーバーは、CPM
基本的に広告を配信しているだけです。
MySQL
それに加えて、広告主の広告キャンペーンの資金残高を提供する大規模でファットなマスターサーバーがあります。繰り返しになりますが、すべての広告キャンペーンはCPM
基本的に配信されています。
バックエンドからインプレッションが配信されるたびに、インプレッション価格に応じて広告キャンペーンの残高を減らさなければなりません。
たとえば、1 インプレッションあたりの価格は 1 セントです。バックエンド A は 50 インプレッションを配信し、残高を 50 セント減少させます。Backed B は 30 インプレッションを配信し、残高が 30 セント減少します。
したがって、私が見る主な問題は次のとおりです。
バックエンドは、毎秒約 2 ~ 3,000 インプレッションを配信しています。そのため、MySQL でその場でお金の残高を減らすことは、良い考えではありません。
バックエンドは、米国および EU のデータセンターにあります。MySQL マスター サーバーは米国にあります。ネットワーク遅延が問題になる可能性があります [EU バックエンド] <-> [US マスター]
私が見る可能な解決策として:
Cassandra
分散型カウンター収納として使用。私はこの解決策を可能な限り長く認識しようとします。バックエンドによるお金の一部の予約。たとえば、バックエンド A がマスターに接続し、$1 を予約しようとしています。$1 は予約されており、バックエンドでローカル (
Redis
たとえばローカル) に保存されているため、光速でデクリメントしても問題はありません。私が見る主な問題は、バックエンドが配信スキームから無効になっている場合 (バランサーから「切断」されている場合)、バックエンドからマスターサーバーにお金を返すことです。とにかく、それは非常に優れたソリューションのようであり、現在の技術スタックにとどまることを可能にします.助言がありますか?
UPD: 1 つの重要な追加事項です。広告のインプレッションを高精度で配信することはそれほど重要ではありません。リクエストされたよりも多くのインプレッションを配信できますが、それ以下になることはありません。