プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

SOAとMicroserviceアーキテクチャ

SOAとMicroserviceの違いについて調べると様々な答えが出てくる。

「ESBとSOAPWSDLを使うのがSOAだ」

「サービスの粒度が大きいがSOAで小さいのがMicroserviceだ」

「MicroserviceはSOAだ」

これは話し手の視点が異なることが原因だ。人によって「SOA」の意味が異なるからだ。

ここではSOAの歴史とMicroserviceアーキテクチャとの比較について述べる。


Service Oriented Architecture

90年代

SOAは特定の製品、規格、技術を前提としないアーキテクチャだ。

SOAの概念は90年代に提唱された。システムをサービスという単位に分割して開発し、各サービスが公開するAPIを組み合わせて1つのシステムとして動作させるシステム・アーキテクチャだ。

しかしこの頃、SOAはほとんど注目されなかった。

2000年代前半

SOAは2000年代に一転して脚光を浴び、様々なプロジェクトで採用されるようになった。その背景には開発済みの既存システムを相互接続して新しい高付加価値なシステムを開発したり異システムを統合したいという要望があった。

2000年代中盤〜後半

2000年代中盤〜後半になるとSOA向けに様々な技術、製品が開発される。

  • SOAPXMLベースのRPCプロトコル
  • WSDL:インタフェース定義言語
  • UDDI:サービスのAuto Discovery
  • BPEL:サービスの連携を記述する言語
  • BPMN:BPELを図として表現するための表記法
  • ESB:サービス間のバス

一方、SOAの実装技術が複雑化、肥大化していった反動でシンプルなREST APIが次第に注目を集めるようになっていったわけだがそれはまた別の機会に語るとしよう。


Microserviceアーキテクチャ

Microserviceアーキテクチャは小さなサービスを組み合わせてシステムを構築するアーキテクチャだ。

この説明だけだとSOAと区別がつかないだろう。Microserviceアーキテクチャの特徴を見てみよう。

Microserviceアーキテクチャは現代の大規模サービスに求められる性能、可用性、拡張性を実現することを目標としている。このため一つ一つのサービスが独立して開発、デプロイ、増減設可能な単位となっている点が特に重要視され、サービスは小さく、かつStatelessでDisposableに設計される。


各コメントの分析

「MicroserviceはSOAだ」

SOAの当初の概念を念頭に両者を比較するとMicroserviceアーキテクチャSOAの一種とみなすことができる。SOAはサービスを組み合わせてシステムを作ろう、という広く抽象的な概念で、MicroserviceアーキテクチャSOAの中でも性能、可用性、拡張を追い求めた具体例だと言える。

「MicroserviceはSOAだ」、という意見はこの観点から語られている。

「サービスの粒度が大きいのがSOAで小さいのがMicroserviceだ」

SOAの概念自体はサービスを独立して開発、デプロイ、増減設することを求めていない。よって一般的なSOAのサービスの単位はMicroserviceより大きくなる。StatelessnessやDisposabilityは考慮されない。

「サービスの粒度が大きいのがSOAで小さいのがMicroserviceだ」、といった意見はこの差に着目したコメントである。

「ESBとSOAPWSDLを使うのがSOAだ」

SOA」と言った場合、当初の概念ではなく2000年代中盤〜後半のSOAの実装例を指していることがある。個人的な印象ではこの視点で話している人の方が多数派だ。このとき「SOA」という言葉の中にはSOAPWSDL、ESBといった技術、製品群が含まれている

この視点から語ると「ESBとSOAPWSDLを使うのがSOAだ」となる。