Модели консистентности

Давай вернемся к задаче с мессенджером. Мы растем и обычное вертикальное масштабирование уже не подойдет (помнишь, мы разбирали, что это не бесконечная история из-за технических лимитов). 

С какого-то момента мы приходим к горизонтальному масштабированию. Теперь получается, что запросы на запись и чтение принимает много машин — то есть все данные, например, сообщения пользователей, хранятся в разных кластерах и не синхронизируются сами собой в моменте.

И на этом этапе нам нужна модель консистентности — гарантии, которые наша система дает относительно синхронизированности данных.

Их много, но мы остановимся на самой распространенной.

Eventual Consistency

Eventual consistency — модель, при которой нельзя гарантировать, что каждый запрос на чтение вернет самую свежую запись. Через какой-то промежуток времени данные во всей системе станут консистентны, то есть «доедут» из одного кластера в другой.

Круто! Уже выглядит на что-то из реального мира. 

Но как ты будешь доставлять сообщения, если получатель в другом ДЦ? И как вообще делать эту самую отправку быстро?

Скажу 2 фразы: событийная архитектура и веб-сокеты. Что это? Разберем дальше.