Кратко
- Mary Shaw назвала вызов процедуры языком ассемблера для программного взаимодействия: низкоуровневый механизм использовался для ручного кодирования гораздо более богатых отношений.
- Её понятийная схема различает компонент, коннектор, точку участия, роль, протокол, конфигурацию, архитектурный стиль, интерфейс модуля и системное свойство.
- Коннектор первого класса — это заданное архитектурное отношение, а не синоним микросервиса, service mesh, API-шлюза или автоматической формальной верификации.
Нарисуйте два блока и линию между ними. Блоки быстро получат имена: парсер, хранилище, контроллер. Линия останется без объяснения. Она передаёт поток или вызывает операцию? Может ли она менять порядок, повторять, блокировать или рассылать сообщения? Кто начинает обмен и какое обещание действует после сбоя? Сам штрих ничего не говорит.
С этой асимметрии начинается отчёт Mary Shaw, опубликованный Software Engineering Institute в январе 1994 года: Procedure Calls Are the Assembly Language of Software Interconnection: Connectors Deserve First-Class Status. Программная инженерия уже умела описывать вычисления и данные внутри единицы. Отношения между единицами по-прежнему были разбросаны по коду, спрятаны в соглашениях или сведены к безымянным стрелкам.
Сравнение с ассемблером не отвергает вызовы процедур. Оно обозначает уровень абстракции. Конвейер, система событий, диалог клиента и сервера и доступ к общему представлению налагают разные обязательства. Сведение всего к формуле «A вызывает B» удаляет сведения о порядке, доставке, синхронизации, связывании и поведении системы.
О чём молчит линия
Интерфейс модуля перечисляет экспортируемые процедуры, типы или переменные. Он описывает единицу кода, но не обязательно полный протокол многоэтапного взаимодействия, ответственность каждой стороны или свойство, которое должна обеспечить сборка.
Фильтр может потреблять и производить поток по определённым правилам. Упаковка фильтра в процедуру не снимает вопросы буферизации, планирования и завершения потока. Если эти обязанности существуют лишь в связующем коде, у важнейшего архитектурного контракта нет имени.
То же относится к событиям, общим репозиториям и сетевым протоколам. Механизм реализует связь, но не исчерпывает её смысла. «Первый класс» у Shaw означает возможность назвать, специфицировать, создать и непосредственно проверить отношение как архитектурную сущность.
Словарь для разных уровней
Компонент — место вычисления и состояния. Его видимые точки участия называются players: это может быть процедура, порт или конец потока.
Коннектор — место отношений между компонентами. Его протокол задаёт допустимое взаимодействие и гарантии, а роли описывают обязанности клиента и сервера, производителя и потребителя, издателя и подписчика.
Конфигурация собирает проект, связывая точки участия компонентов с ролями коннекторов. Здесь можно спросить, соответствует ли участник роли, совместимы ли протоколы и поддерживает ли топология нужное поведение.
Архитектурный стиль задаёт повторно используемое семейство с ограничениями на типы компонентов и коннекторов и на их расположение. Конвейер и фильтры, клиент и сервер, слои и классная доска — стили, а не отдельные конфигурации.
Интерфейс модуля сообщает, что предлагает одна единица. Системное свойство — пропускная способность, согласованность, надёжность или совместимость — возникает из сборки. Типы конечных точек могут совпасть, а диалог зависнуть. Два корректных API могут по-разному понимать безопасность повторной попытки. Ошибка тогда находится в протоколе коннектора или в привязке участника к роли.
От тезиса к языку
Отчёт Shaw был частью коллективной программы Carnegie Mellon. David Garlan и Mary Shaw описывали архитектуру программного обеспечения как уровень проектирования крупномасштабной организации, взаимодействия и повторяющихся стилей. Их работа о языках архитектуры более высокого уровня объясняла, почему модульных механизмов и неформальных рисунков недостаточно для протоколов и вариантов решения.
Robert Allen и David Garlan придали коннекторам формальную семантику. В их статье ICSE 1994 года коннектор — это набор протоколов, организованных вокруг ролей, а совместимость исследуется подобно проверке типов. Это вклад Allen и Garlan; приписывать всю программу одному человеку значило бы стереть её коллективную природу.
UniCon сделал подход конкретным. Авторами указаны Mary Shaw, Robert DeLine, Daniel V. Klein, Theodore L. Ross, David M. Young и Gregory Zelesnik. Компоненты и коннекторы стали параллельными конструкциями; конфигурации связывали players с ролями; потоки данных и планирование описывались на том же уровне, что и вызовы процедур.
Ограничения также были явными. UniCon предлагал встроенный набор примитивных типов коннекторов, не позволял свободно определять или составлять их, а универсальные обходы уменьшали возможности автоматической проверки. Спецификация открывает путь к анализу, но сама по себе не становится доказательством.
Не другое название современной инфраструктуры
Микросервис — граница вычисления, развёртывания и ответственности, поэтому он ближе к компоненту. Service mesh может реализовать транспорт, идентификацию, телеметрию и повторные попытки. API-шлюз может посредничать во входящем трафике, маршрутизации и политике. Оба способны воплотить часть коннектора, но не определяют автоматически деловой порядок, идемпотентность, переходы состояния и межсервисные инварианты.
Статус первого класса также не гарантирует формальную верификацию. Точная спецификация может позволить анализ совместимости, контрактные тесты или строгую экспертизу. Сила вывода зависит от семантики, заявленного свойства и инструмента.
Долговечный ход Shaw — перераспределить внимание. Нельзя отдавать все существительные блокам, оставляя линию знаком препинания. Отношению нужны имя, протокол и роли; необходимо показать привязку участников и зависимое системное свойство. Системы часто ломаются не потому, что один компонент не умеет вычислять, а потому, что два локально разумных компонента встречаются через неявный контракт порядка, времени, состояния или восстановления.
Источники
- Mary Shaw, «Procedure Calls Are the Assembly Language of Software Interconnection»
- Отчёт SEI 1994 года (PDF)
- David Garlan и Mary Shaw, «An Introduction to Software Architecture»
- Robert Allen и David Garlan, «Formalizing Architectural Connection»
- Статья UniCon: Shaw, DeLine, Klein, Ross, Young и Zelesnik
- История программной архитектуры в Carnegie Mellon
- Официальная страница Mary Shaw
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
