Дрейф состояния (erikbern.com)
Эрик Бернхардссон описывает проблему «дрейфа состояния». Она возникает, когда есть два компонента, между которыми должны синхронизироваться данные:
- Компонент-издатель, который отсылает компоненту-подписчику изменения.
- Сторонний сервис, который присылает уведомления нашему сервису с помощью вебхуков.
- Бэкенд, который отправляет новые данные на фронтенд через вебсокеты.
Какие-то из уведомлений обязательно потеряются. Причин этому много — TCP-соединения разрываются; сообщения приходят, когда подписчик лежит; баги в коде мешают правильно отправить или принять сообщения. Между компонентами начинает накапливаться расхождение в состояниях.
Решения два:
- Обеспечить твердые гарантии доставки сообщения. (Например, как Кафка.)
- Добавить подписчику механизм самоисправления, когда он сам полностью перезагружает состояние из источника.
В идеале нужно реализовать оба.
Поделиться ссылкой:
ВКонтакте
Твиттер
Фейсбук
11 сентября 2016 14:27