Частичное упорядочение - это то, что происходит, если вы отслеживаете причинность сообщений.Есть способы сделать это.Наивный способ сделать это - просто сохранить список всех узлов в распределенной сети, которые было просмотрено данным сообщением, и добавить его в этот список, когда вы перемещаете сообщение.Я говорю сообщение, но я действительно ссылаюсь на сообщения в этом разговоре.
Теперь, это может хорошо работать с простыми системами, но когда вы начинаете получать более сложные системы, вы можете захотеть, чтобы Saga отслеживала какое сообщениеозначает именно то, что.
Тем не менее, вам может потребоваться частичное упорядочение на одном узле-получателе - и тогда sagas, если вы будете использовать шаблон «хаб-и-спик» в отношении потока сообщений, вам не помогут,Тогда, возможно, вам действительно нужно добавить некоторую логику в транспорт, который вы используете.
Один алгоритм называется векторными часами , другой подобный называется векторами версий .Вот пример реализации векторных часов в Go - если вы хотите провести пару часов в паре, я работаю над крошечной векторной библиотекой часов для F # - потому что алгоритм действительно очень прост.Если вы действительно хотите прочитать что-то, что имеет смысл, я рекомендую эту книгу - Элементы распределенных систем .Хороши главы 2-3, 5.
Затем вы получаете частичное упорядочение ваших разговоров в распределенной системе.Причина, по которой вы не можете получить это с помощью очереди, состоит в том, что между вашей очередью и вашим узлом имеется пропасть сети, и если узел или процесс на том же узле, что и очередь, отключается, поскольку у него есть сообщениев пути это сообщение будет поставлено в очередь и переупорядочено.То же самое, если вы NACK сообщение.Вы можете обойти эту проблему переупорядочения, используя 2PC для очереди и потребляющего клиента, или вы можете отсортировать сообщения по их векторным часам, или вы можете отсортировать их по идентификатору последовательности, который был задан в приложении публикации / отправки, или выМожно отсортировать их по некоторым данным, так как это имеет смысл с точки зрения вашего потребителя.Выбор за вами.