要約

  • Mary Shawは手続き呼び出しをソフトウェア相互接続の「アセンブリ言語」と呼び、豊かな関係を低水準の仕組みで手作業実装する問題を示した。
  • その枠組みは、コンポーネント、コネクター、参加点、役割、プロトコル、構成、アーキテクチャ様式、モジュール・インターフェース、システム特性を区別する。
  • 第一級のコネクターは明示されたアーキテクチャ上の関係であり、マイクロサービス、サービスメッシュ、APIゲートウェイ、形式検証そのものではない。

二つの箱と一本の線を描く。箱にはパーサー、ストア、コントローラーと名前が付く。だが線は何を意味するのか。ストリームを運ぶのか、操作を呼び出すのか。メッセージは並べ替え、再送、停止、配信されるのか。誰が開始し、障害後にどの保証が残るのか。線だけでは分からない。

Mary ShawがSoftware Engineering Instituteで1994年1月に発表した報告書 Procedure Calls Are the Assembly Language of Software Interconnection: Connectors Deserve First-Class Status は、この非対称性から始まる。ソフトウェア工学は単位内部の計算とデータを表現する方法を発達させた。一方、単位間の関係はコードや慣習に分散し、匿名の矢印で済まされがちだった。

アセンブリ言語という比喩は手続き呼び出しの否定ではない。抽象度の違いを示している。パイプライン、イベント配信、クライアントとサーバーの会話、共有表現へのアクセスには別々の責務がある。すべてを「AがBを呼ぶ」に縮めれば、順序、配送、同期、結合、全体動作を判断する情報が消える。

線が語らないもの

モジュール・インターフェースは公開する手続き、型、変数を列挙する。コード単位の説明として不可欠だが、多段階のやり取り全体、各参加者の責任、組み上げたシステムの特性まで示すとは限らない。

例えばフィルターは一定の規律でストリームを消費し、生成する。手続きとして包んでも、バッファリング、スケジューリング、終了処理の責務は残る。それらが接着コードにしか存在しないなら、最重要の契約に名前がない。

イベント、共有リポジトリ、ネットワーク・プロトコルも同じである。実装機構は接続を実現するが、その意味すべてではない。Shawのいう「第一級」とは、関係をアーキテクチャの実体として命名、仕様化、実体化、検査できることだ。

階層を混同しないための語彙

コンポーネントは計算と状態の所在である。外部から見える参加点を player と呼び、手続き、ポート、ストリーム端点などが該当する。

コネクターはコンポーネント間の関係の所在である。プロトコルが許される相互作用と保証を定め、役割がクライアントとサーバー、生成側と消費側、発行側と購読側などの責任を示す。

構成はコンポーネントの参加点をコネクターの役割へ結び付けた設計である。この結び付きで、参加点が役割を満たすか、プロトコルが両立するか、トポロジーが意図した挙動を支えるかを問える。

アーキテクチャ様式はさらに一般的で、コンポーネントとコネクターの型、その配置を制約する再利用可能な族である。パイプ・アンド・フィルター、クライアント・サーバー、階層、ブラックボードは様式であって個別構成ではない。

モジュール・インターフェースが一単位の公開面を記すのに対し、容量、スループット、整合性、信頼性、互換性といったシステム特性は組み合わせから生じる。型が合うエンドポイント同士でも会話は停止し得る。二つの正しいAPIが再試行の安全性で食い違うこともある。問題は箱ではなく、コネクターのプロトコルや役割への接続にある。

共同研究としての展開

Shawの報告はCarnegie Mellonで進んだ共同研究の一部だった。David GarlanとMary Shawは、ソフトウェア・アーキテクチャを大規模な組織、相互作用、反復する様式を扱う設計階層として示した。高水準アーキテクチャ言語に関する二人の研究は、モジュール機構と非形式的な図だけではプロトコルや設計代替案を捉えにくいと論じた。

Robert AllenとDavid Garlanは、1994年のICSE論文 Formalizing Architectural Connection でコネクターに形式意味論を与えた。コネクターを役割ごとのプロトコル集合として扱い、型検査に似た互換性分析を試みた。これはAllenとGarlanの貢献であり、すべてをShaw一人の発明にまとめるべきではない。

UniConは考えを具体化した。著者はMary Shaw、Robert DeLine、Daniel V. Klein、Theodore L. Ross、David M. Young、Gregory Zelesnikである。コンポーネントとコネクターを対称的な構成要素として扱い、参加点と役割を接続し、データフローやスケジューリングを手続き呼び出しと同じ設計面に載せた。

限界も明記されていた。コネクター型は組み込みの基本型に限られ、当時は複合コネクターや自由な定義を扱えなかった。一般化された逃げ道は検査能力を弱め、一部分析は外部ツールに依存した。仕様を明示することは分析の入口であり、自動証明そのものではない。

現代製品の別名ではない

マイクロサービスは計算、配備、所有権の境界であり、どちらかといえばコンポーネントに近い。サービスメッシュは輸送、ID、観測、再試行を実装できる。APIゲートウェイは入口、経路、方針を仲介できる。いずれもコネクターの一部を実現し得るが、業務上の順序、冪等性、状態遷移、サービス横断の不変条件まで自動的に定義しない。

第一級であることは形式検証の保証でもない。精密な仕様は互換性検査、契約テスト、外部分析を可能にするかもしれない。結論の強さは意味論、対象特性、ツールに依存する。

Shawの長く残る提案は、注意の配分を変えることだった。箱だけに名詞を与え、線を句読点にしてはならない。関係、プロトコル、役割に名前を付け、参加点との接続と、そこに依存するシステム特性を記す。多くの障害は計算できない一つの部品からではなく、局所的には妥当な二つの部品が、順序や回復を明示しない関係で出会うところから生まれる。

出典