Распределенный поток данных - Distributed data flow

Иллюстрация основных концепций, используемых при определении распределенного потока данных.

Распространено поток данных (также сокращенно распределенный поток) относится к набору События в распределенное приложение или же протокол.

Распределенные потоки данных служат цели, аналогичной переменные или же параметры метода в языки программирования Такие как Ява, в том смысле, что они могут представлять состояние, которое хранится или передается на уровне программного обеспечения. В отличие от переменных или параметров, которые представляют собой единицу состояния, находящуюся в одном месте, распределенные потоки являются динамическими и распределенными: они одновременно появляются в нескольких местах в сети в одно и то же время. Таким образом, распределенные потоки являются более естественным способом моделирования семантики и внутренней работы определенных классов распределенных систем. В частности, абстракция распределенного потока данных использовалась как удобный способ выражения логических отношений высокого уровня между частями распределенных протоколов.[1][2][3]

Неформальные свойства

Распределенный поток данных удовлетворяет следующим неформальным свойствам.

  • Асинхронный, неблокирующий, и в одну сторону. Каждое событие представляет собой отдельный экземпляр неблокирующий, в одну сторону, вызов асинхронного метода или другая форма явного или неявного передача сообщений между двумя уровнями или программными компонентами. Например, каждое событие может представлять собой один запрос к многоадресная передача а пакет, выпущенный прикладной уровень к основному протокол многоадресной рассылки. Требование, чтобы события были односторонними и асинхронными, важно. Вызов методов, которые могут возвращать результаты, обычно представляются двумя отдельными потоками: один поток представляет запросы, а другой поток представляет ответы.
  • Однородный, однонаправленный, и униформа. Все события в распределенном потоке служат одной и той же функциональной и логической цели и связаны друг с другом; как правило, мы требуем, чтобы они представляли вызовы методов или обмен сообщениями между экземпляры того же функционала слои, или экземпляры того же составные части, но возможно на разных узлы в пределах компьютерная сеть. Кроме того, все события должны течь в одном направлении (т.е. один тип слоя или компонента всегда производит, а другой всегда потребляет события) и нести один и тот же тип полезная нагрузка. Например, набор событий, который включает в себя все запросы многоадресной рассылки, отправленные одним и тем же прикладным уровнем одному и тому же протоколу многоадресной рассылки, является распределенным потоком. С другой стороны, набор событий, который включает в себя многоадресные запросы, сделанные разными приложениями к разным протоколам многоадресной рассылки, не будет считаться распределенным потоком, а также не будет набором событий, которые представляют запросы многоадресной рассылки, а также подтверждения и уведомления об ошибках.
  • Одновременный, непрерывный, и распределен. Поток обычно включает в себя все события, которые протекают между двумя уровнями программного обеспечения одновременно в разных местах и ​​в течение конечного или бесконечного периода времени. Таким образом, в общем случае события в распределенном потоке распределены как в пространстве (они происходят в разных узлах), так и во времени (происходят в разное время). Например, поток многоадресных запросов будет включать все такие запросы, сделанные экземплярами данного приложения на разных узлах; обычно такой поток будет включать в себя события, которые происходят на всех узлах, участвующих в данном протоколе многоадресной передачи. Поток, в котором все события происходят в одном узле, будет считаться вырожденным.

Формальное представительство

Формально мы представляем каждое событие в распределенном потоке в виде четверки вида (x, t, k, v), где Икс - это место (например, сетевой адрес физического узла), в котором происходит событие, т время, когда это происходит, k версия или порядковый номер, определяющий конкретное событие, и v - значение, представляющее полезную нагрузку события (например, все аргументы, переданные при вызове метода). Каждый распределенный поток - это (возможно, бесконечный) набор таких четверок, который удовлетворяет следующим трем формальным свойствам.

  • Для любого конечного момента времени т, в потоке может быть только конечное число событий, которые происходят во время т или раньше. Это означает, что в каком потоке всегда можно указать момент времени, когда поток возник. Сам поток может быть бесконечным; в таком случае в любой момент времени в потоке появится новое событие.
  • Для любой пары событий e_1 и e_2 которые происходят в том же месте, если e_1 происходит раньше, чем e_2, то номер версии в e_1 также должен быть меньше, чем у e_2.
  • Для любой пары событий e_1 и e_2 которые происходят в одном месте, если два события имеют одинаковые номера версий, они также должны иметь одинаковые значения.

В дополнение к вышесказанному потоки могут иметь ряд дополнительных свойств.

  • Последовательность. Распределенный поток называется последовательный если события с одной и той же версией всегда имеют одинаковое значение, даже если они происходят в разных местах. Согласованные потоки обычно представляют собой различные виды глобальных решений, принимаемых протоколом или приложением.
  • Монотонность. Распределенный поток называется слабо монотонный если для любой пары событий e_1 и e_2, которые происходят в одном и том же месте, если e_1 имеет меньшую версию, чем e_2, то e_1 должен иметь меньшее значение, чем e_2. Распределенный поток называется сильно монотонный (или просто монотонный), если это верно даже для пар событий e_1 и e_2, которые происходят в разных местах. Сильно монотонные потоки всегда согласованы. Обычно они представляют собой разного рода необратимые решения. Слабо монотонные потоки могут быть или не быть последовательными.

Рекомендации

  1. ^ Островски К., Бирман К., Долев Д. и Сакода К. (2009). «Реализация надежных потоков событий в больших системах с помощью распределенных потоков данных и рекурсивного делегирования», 3-я Международная конференция ACM по распределенным системам, основанным на событиях (DEBS 2009), Нашвилл, Теннесси, США, 6–9 июля 2009 г. http://www.cs.cornell.edu/~krzys/krzys_debs2009.pdf
  2. ^ Островский К., Бирман К., Долев Д. (2009). «Язык распределенного потока данных для многосторонних протоколов», 5-й семинар ACM SIGOPS по языкам программирования и операционным системам (PLOS 2009), Big Sky, MT, США. 11 октября 2009 г., http://www.cs.cornell.edu/~krzys/krzys_plos2009.pdf
  3. ^ Островский К., Бирман К., Долев Д. (2009). «Программирование живых распределенных объектов с распределенными потоками данных», представленный Международная конференция по объектно-ориентированному программированию, системам, языкам и приложениям (OOPSLA 2009), http://www.cs.cornell.edu/~krzys/krzys_oopsla2009.pdf