Pipe and filter

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Pipe and filter (труби та фільтри) (іноді також називають одностороння мережа потоків даних, англ. one-way data flow network) — це архітектурний стиль, в якому кожен компонент (фільтр) читає потоки даних на вході і створює потоки на виході. Обробка відбувається інкрементно, так що вивід даних може початись ще до того як ввід буде здійснено повністю.

Цей архітектурний стиль має важливе обмеження — кожен фільтер цілком незалежний від інших фільтрів, тобто архітектурі притаманна нульова зв'язність. Фільтри не мають спільного стану.

Переваги[ред.ред. код]

  • Простота. В системі з такою архітектурою кожен фільтр можна зрозуміти окремо від всієї іншої системи.
  • Повторна використовність. Фільтри можна приєднувати до фільтрів за умови що вони мають сумісні інтерфейси.
  • Розширюваність. Нові фільтри можна додавати в систему без ризику змінити поведінку інших частин.
  • Підтримуваність. Старі фільтри можна просто замінити новими.
  • Верифіковність. Систему з такою архітектурою просто аналізувати на вузькі місця в мережі та наявність взаємних блокувань.
  • Простота розпаралелювання. Відсутність спільного стану дозволяє без додаткових модифікацій запускати фільтри паралельно.

Недоліки[ред.ред. код]

  • Довгі ланцюжки фільтрів можуть створювати затримки в обробці даних
  • Якщо фільтр працює в пакетному а не потоковому режимі, тобто йому потрібно отримати всі дані перед тим як почати вивід (наприклад для сортування), це створюватиме затримки для всіх інших фільтрів.
  • Потрібна додаткова архітектура, для фази початкової конфігурації системи. Всі фільтри потрібно запустити і правильно з'єднати трубами.

Uniform pipe and filter[ред.ред. код]

Uniform pipe and filter — архітектурний стиль pipe and filter доповнений обмеженням яке вимагає щоб всі фільтри мали спільний інтерфейс. Найвідоміший приклад реалізації цього стилю — Unix, де кожен процес що може бути фільтром має інтерфейс що складається з стандартних потоків: одного вхідного потоку символів (stdin), та двох вихідних потоків символів (stdout та stderr).

Спільність інтерфейсу дозволяє з'єднувати фільтри незалежно написані різними розробниками, але з іншого боку, якщо дані надходять в іншому форматі, вимагає додавання адаптерів, що може зменшити продуктивність.

Див. також[ред.ред. код]

Джерела[ред.ред. код]