У нас есть партнерская система, которая подсчитывает миллионы показов / кликов баннера в день.
В настоящее время она записывает в SQL каждое число показов / кликов, которое происходит в режиме реального времени по каждому запросу.
Веб-приложение обслуживает эти запросы.
Мы сталкиваемся с двумя проблемами:
Если у нас много одновременных запросовв секунду SQL начинает работать очень усердно для вставки данных Impressons / Clicks и в результате приводит к проблеме № 2.
Если в данный момент SQL работает медленно, запросы накапливаются и ожидают в очереди на веб-сервере.В результате веб-приложение работает медленно, и запросы не обрабатываются.
Дизайн, о котором мы думали на высоком уровне:
В настоящее время мы рассматриваем возможность изменения дизайна путем удаления логики записи в SQL из веб-приложения (вместо записи в локальное хранилище) и создания автономного сервиса, который будет считывать данные из локального хранилища и в конечном итоге записывать агрегированные впечатления /Кликает данные (не в режиме реального времени) на SQL в фоновом режиме.
Наши ограничения:
- 10 веб-серверов (с балансировкой нагрузки)
- 1 SQL-сервер
Что вы думаете о предлагаемом дизайне?
Вы бы использовали NoSQL в качестве локального хранилища для каждого веб-сервера?
Предложите свой вариант.