我有一些后端服务器位于两个不同的数据中心(在美国和欧洲)。这些服务器只是在CPM
基础上投放广告。
除此之外,我还有大而肥的主MySQL
服务器为广告商的广告活动的资金余额提供服务。同样,所有广告活动都是在基础上投放的CPM
。
在从任何后端提供的每一次展示中,我都必须根据展示价格减少广告活动的资金余额。
例如,每次展示的价格是 1 美分。后端 A 已投放 50 次展示,并将减少资金余额 50 美分。支持的 B 已投放 30 次展示,它将减少资金余额 30 美分。
所以,我看到的主要问题是:
后端每秒提供大约 2-3K 的展示次数。因此,恕我直言,在 MySQL 中减少资金余额并不是一个好主意。
后端位于美国和欧盟的数据中心。MySQL 主服务器位于美国。网络延迟可能是个问题 [EU backend] <-> [US master]
作为可能的解决方案,我看到:
用作
Cassandra
分布式计数器存储。我会尽可能长时间地了解这个解决方案。通过后端保留部分资金。例如,后端 A 正在连接到 master 并试图保留 $1。由于 $1 保留并存储在本地后端(
Redis
例如本地),因此以光速递减它没有问题。我看到的主要问题是,如果后端从交付方案中被禁用(从平衡器“断开”),则将资金从后端返回到主服务器。无论如何,这似乎是一个非常好的解决方案,并且可以保留在当前的技术堆栈中。有什么建议么?
UPD:一个重要的补充。以高精度投放广告印象并不那么重要。我们可以提供比请求更多的展示次数,但绝不会更少。