Синхронизировать версию данных для узлов в разных конвейерах - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь выяснить, как определить протокол / решение, которое позволяет достичь согласованности данных для узлов (блоков обработки) в параллельных независимых конвейерах, выходы которых в конечном итоге объединяются в один узел (конвейер).

Я не уверен, что правильно сформулировал проблему, и у меня такое ощущение, что это более менее общая / общая проблема.

Не путайте это с непротиворечивостью данных, которая является типичной проблемой для баз данных. Здесь мы говорим о конвейерах и бесконечном потоке данных.

Вот последовательность и блок-схемы, чтобы уточнить мой вопрос diagrams

Если бы у меня был только один конвейер, я мог бы связать вывод узлов с версией данных, использованной для генерации вывода. Затем на принимающем узле я мог использовать ту же версию данных. Переключение с Snapshot V1 на V2 будет происходить сверху вниз, когда вершина готова.

Но это не работает, если узел потребляет выходные данные от узлов в параллельных независимых конвейерах. Узел может получать выходные данные, рассчитанные на 2 разных версиях Snapshot узлов предварительного просмотра, которые начали вычисление в разное время (один режим до публикации Snapshot V2, другой после).

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

...