Контекст
У нас распределенная система. Мы испускаем события из одной из этих систем, которые считываются из другой системы для генерации отчета.
Логический порядок обеспечивается тем, что даже если система-эмиттер имеет N узлов, подчеркнут конечный автомат, который делает невозможным одновременную эмиссию события для одного агрегата. Эти события отмечаются временной меткой. N узлов не всегда могут синхронизироваться по времени.
Мы так заботимся о метке времени, потому что нижестоящая система, которая генерирует отчеты, почти всегда нуждается в метке времени, потому что «Люди, сообщающие о сообщениях» заботятся о таких данных, чтобы проверить, все ли идет правильно.
Проблема
Тот факт, что 2 узла могут иметь небольшое расхождение, заставляет нас задуматься. Давайте представим следующий пример.
Логический порядок событий таков:
Событие 1 => Событие 2 => Событие 3
Но в базе данных у нас может быть такая ситуация:
-------------------------------------------
| Name | TimeStamp | Logical Order |
-------------------------------------------
| Event 1 | 2 | 1 |
| Event 2 | 1 | 2 |
| Event 3 | 3 | 3 |
-------------------------------------------
Как видите, Событие 2 логически произошло после События 1, но их отметка времени не может быть синхронизирована.
Хорошо, это не будет происходить каждые 2 секунды, но это может произойти, потому что метка времени поступает из разных узлов. И с точки зрения отчетности это аномалия.
Возможные решения
- Сообщите ответственным лицам о возможной проблеме. Мы не можем иметь один глобальный источник времени (NTP не является хорошим решением по ряду веских причин), так что если есть расхождения в очень небольшое количество времени, это не проблема, и это означает, что «это событие произошло вокруг этого время".
- Обеспечьте согласованность временных меток, проверяя, что следующее событие в логическом потоке не может иметь временную метку, меньшую, чем предыдущее событие, что делает их равными. Это неправда, но поток остается согласованным даже с точки зрения не разработчика.
Есть ли у вас опыт по этой теме?