У меня есть несколько серверных серверов, расположенных в двух разных центрах обработки данных (в США и Европе). Эти серверы просто доставляют объявления на основе CPM
.Уменьшение денежного баланса, хранящегося на главном сервере из многочисленных бэкэндов? (распределенный счетчик, а?)
У меня есть большой & хозяин жира MySQL
сервер, обслуживающий денежные балансы рекламной кампании рекламодателя. Опять же, все рекламные кампании доставляются на основе CPM
.
При каждом показе, полученном от любого из бэкэндов, я должен уменьшить денежный баланс рекламной кампании в соответствии с ценой показа.
Например, цена за одно впечатление - 1 цент. Бэкэнд A поставил 50 показов и уменьшит денежный баланс на 50 центов. Bed B предоставил 30 показов и уменьшит денежный баланс на 30 центов.
Таким образом, основные проблемы, как я вижу, являются:
Backends отбывает около 2-3K впечатлений каждых секунд. Таким образом, уменьшение денежного баланса на лету в MySQL - это не очень хорошая идея imho.
Основания расположены в центрах обработки данных США и ЕС. Главный сервер MySQL находится в США. Сетевая задержка может быть проблемой [бэкенд EU] < -> [мастер США]
В качестве возможных решений, которые я вижу:
Cassandra
Использование в качестве распределенного хранения счетчика. Я постараюсь осознать это решение как можно дольше.Резервирование части на деньги по бэкэнд. Например, бэкэнд A подключается к мастеру и пытается зарезервировать $ 1. Поскольку 1 доллар зарезервирован и хранится локально на бэкэнд (например, в локальном
Redis
), нет никакой проблемы, чтобы уменьшить его со скоростью света. Основная проблема, которую я вижу, заключается в возврате денег с сервера на главный сервер, если бэкэнд отключен от схемы доставки («отключен» от балансира). Во всяком случае, это, кажется, очень приятное решение и позволит оставаться в текущем стеке технологий.Любые предложения?
UPD: одно важное дополнение. Не так важно доставлять показы объявлений с высокой точностью. Мы можем доставлять больше впечатлений, чем требовалось, но не меньше.
Вы можете разделить клиентские кредиты на 2? так что у вас будет региональный кредит с половиной суммы кредитов, которые делают клиент, когда у одного из них заканчиваются кредиты, они снова делятся, пока оба не отправятся 0, ps извините, плохой английский – BrenoZan