“私は4年前,マイクロサービス(µServices)という新語を考え出して,それについて書きました。SOA(Service Oriented Architectures / サービス指向アーキテクチャ)の出現で一般的にイメージされていた,大規模で複雑で費用のかかるサービスから,軽量サービスを区別するためです。” 最近になってこのような主張をしたのはPeter Kriens氏だ。
かつてOSGi Allianceに所属していた氏は,常に同一のプロセス内で通信し,オーバーヘッドを伴わないサービスとして,OSGiマイクロサービスを定義した。サービスの呼び出しがオブジェクトのメソッドコールとほぼ同じ速度で動作することで,サービスが軽量オブジェクトに近いものになる。オーバーヘッドの少なさを表すためにマイクロ(µ)という,異論のありそうなシンボルを使用してこれらのサービスを命名した氏は,さらにマイクロサービス指向のVMアーキテクチャを示す"µsoa"という新語も生み出した。
WebサービスとOSGiマイクロサービスは,機能分割に使用する基本アーキテクチャとしては同じものだ,と氏は主張する。しかしながら,Webサービスが常にプロセス外の世界とコミュニケーションしている点を考慮すれば,実行方法や目的,オーバーヘッドについては大きな違いがあると言わざるを得ない。
James Lewis氏やMartin Fowler氏が今年初めに説明したマイクロサービスでは,通信はプロセス間で行われることを条件としている。
“すなわち,アーキテクチャスタイルとしてのマイクロサービスとは,ひとつのアプリケーションを小さなサービスの集合体として開発するアプローチなのです。個々のサービスは自分自身のプロセスで動作し,軽量な通信機構,多くの場合はHTTPリソースAPIを使って通信します。”
Russ Miles氏は,近く発刊予定の"Antifragile Software"という書籍の中で,一般的に認められているマイクロサービスの特性を列挙している。
“目的がひとつでシンプル(もつれのない)な,自律的かつ個別にデプロイ可能なサービス。システムの変更ストレス要因に従って構成され,一切の,特に状態に関して共有性を持たないこと。”
サービスがオブジェクトであるか関数であるか,起動方法が同期的か非同期的か,HTTPを使用するか他のプロトコルを使用するかは問わない,と具体的に記している。
定義を区別する手段についてPeter Kriens氏は,優れたモジュール分割設計を実現する凝縮性(Cohesion)が最も大きな問題であって,サイズの問題ではないと述べている。凝縮性とは,明確に定義された単一の責任に対して凝縮されたサービスの持つメソッド間の,概念的な近さを表す尺度である。そこから氏は,マイクロサービスの別の呼び方として凝縮的Webサービス(cohensive web-service)という名称も提案している。