Давай вернемся к задаче с мессенджером. Мы растем и обычное вертикальное масштабирование уже не подойдет (помнишь, мы разбирали, что это не бесконечная история из-за технических лимитов).
С какого-то момента мы приходим к горизонтальному масштабированию. Теперь получается, что запросы на запись и чтение принимает много машин — то есть все данные, например, сообщения пользователей, хранятся в разных кластерах и не синхронизируются сами собой в моменте.
И на этом этапе нам нужна модель консистентности — гарантии, которые наша система дает относительно синхронизированности данных.
Их много, но мы остановимся на самой распространенной.
Eventual Consistency
Eventual consistency — модель, при которой нельзя гарантировать, что каждый запрос на чтение вернет самую свежую запись. Через какой-то промежуток времени данные во всей системе станут консистентны, то есть «доедут» из одного кластера в другой.
Круто! Уже выглядит на что-то из реального мира.
Но как ты будешь доставлять сообщения, если получатель в другом ДЦ? И как вообще делать эту самую отправку быстро?
Скажу 2 фразы: событийная архитектура и веб-сокеты. Что это? Разберем дальше.