Допустим, я хочу систему, в которой состояние службы B
должно обновляться в соответствии с изменениями в состоянии службы A
.Когда состояние A
изменяется, он может публиковать
- все свое состояние
- только свои изменения в состоянии
Так, скажем, например, чтоСостояние A
в моменты времени выглядит следующим образом:
t0 | [ ]
------------------
t1 | [X, Y]
------------------
t2 | [X', Y]
------------------
t3 | [X', Y, Z]
------------------
t4 | [X', Z]
Он может публиковать каждый из этих снимков своего текущего состояния (правый столбец) или может публиковать только такие изменения, как
-----------------------
delta(t0, t1)| +X, +Y
-----------------------
delta(t1, t2)| X->X'
-----------------------
delta(t2, t3)| +Z
-----------------------
delta(t3, t4)| -Y
который теоретически может создать оптимизацию.Но некоторые вещи, которые, как я вижу, должны быть гарантированы:
- Опубликованные события потребляются в правильном порядке
- Опубликованные события, которые "пропущены" службой, должны быть распознаны икаким-то образом компенсированы за
- В алгоритме дельты нет ошибки
, тогда как если опубликовано все состояние, то
- Если 2 опубликованных события используются внеправильный порядок, затем публикация 3-го события исправляет все
- Если опубликованное событие не может быть использовано, тогда публикация 3-го исправляет все
- Нет дельта-алгоритма, поэтому меньше сложностей и вычислительных ресурсов в службе публикации
Несколько решений, которые я могу придумать, чтобы сделать дельта-подход немного более надежным, добавить много сложности:
- Опубликовать оба изменения и все состояние и указатель на предыдущее событие.Службы, использующие событие, могут выяснить, обрабатывать ли дельту или весь набор данных.
- «Цикл» между публикацией дельт и полным состоянием.Может быть, публиковать изменения 9/10 раз, а затем все состояние в 1/10 раз, чтобы помочь исправить вещи.
Оба они чувствуют себя странно.Меня интересует, существует ли надежное решение для уведомления о «добавлениях, удалениях и модификациях» при обеспечении возможной согласованности в системе.