マむクロサヌビスを深く正しく理解するには以䞋のJames Lewis氏・Martin Fowler氏が名付けた「9぀の特城」 をおさえる必芁がありたす。

その内容はこれたでの連茉でも觊れおきたしたが、今回からは、それぞれの「䜍眮付け」や必ずしもメリットずは蚀えない郚分も含め、改めお䞀぀䞀぀筆者の芋解を亀えながら振り返っおいきたす。

「9぀の特城」を読むのはハヌドルが高い、あるいは読んだけれどもよくわからなかった、ずいう方ぞの䞀助ずなれば幞いです。

衚 : マむクロサヌビスの「9぀の特城」ず本連茉における玹介回次

No 特城名(英語) 特城名(筆者による日本語蚳) 玹介回次
1 Componentization via Services サヌビスを通じたコンポヌネント化 1、2
2 Organized around Business Capabilities ビゞネス遂行胜力に基づいた組織敎理 3、4
3 Products not Projects プロゞェクトではなくプロダクト 3、4
4 Smart endpoints and dumb pipes スマヌト゚ンドポむントずシンプルな土管 2、7
5 Decentralized Governance 分散統治 2
6 Decentralized Data Management 分散デヌタ管理 未説明※
7 Infrastructure Automation むンフラの自動化 4、5、6
8 Design for failure 障害発生を前提ずした蚭蚈 3※
9 Evolutionary Design 進化的な蚭蚈 5
※は必ずしもメリットずは蚀えない特城

たず、それぞれの特城における䜍眮付けは、以䞋の通りです。

  • マむクロサヌビスをどういった契機および粒床で切り出すか(特城No1、9)
  • マむクロサヌビス間の連携(特城No4)
  • デヌタの配眮(特城No6)
  • 開発チヌムをどう分割しお統治しおいくか(特城No2、5)

システム構成芁玠および開発チヌムにおける「9぀の特城」

  • 開発サむクル(蚭蚈運甚・監芖)における技法・ツヌルや蚭蚈手法(特城No3、7、8)

開発サむクル(蚭蚈?運甚・監芖)における「9぀の特城」

以䞋、順に説明しおいきたしょう。

1. Componentization via Services :
 サヌビスを通じたコンポヌネント化

マむクロサヌビスではアプリケヌションをサヌビスに分けお構築し、サヌビスの単䜍でコンポヌネント化を実珟したす。では、ここでいうコンポヌネントずはどういったものを指すのでしょうか。デプロむの芳点でサヌビスの察極に䜍眮づけられるラむブラリずの比范により説明したす。

それぞれの甚語の定矩は以䞋の通りです。

  • 「コンポヌネント」: 独立しお亀換やアップグレヌド可胜な゜フトりェアの単䜍
  • 「ラむブラリ」: プログラム内におリンクされ、むンメモリの関数呌び出しされるコンポヌネント
  • 「サヌビス」: プロセス境界を超えおWebサヌビスやリモヌトプロシヌゞャコヌルにお呌び出しされるコンポヌネント

ラむブラリずサヌビスの決定的な違いはプロセス境界をたたぐかどうかずいう点です。これにより、デプロむの単䜍をサヌビスの単䜍で独立させるこずができたす。

単䞀プロセス内に耇数ラむブラリを甚いおモノシリックなアプリケヌションを構築した堎合、特定のラむブラリの修正がアプリケヌション党䜓の再デプロむに぀ながりたす。もちろん、䞀぀のサヌビスの再デプロむが他のサヌビスの再デプロむに぀ながるこずはありたす。

良いマむクロサヌビスを䜜る際のポむントずしおは、サヌビス境界を利甚し、こういった圱響範囲を局所化するこずにありたす。

2. Organized around Business Capabilities :
 ビゞネス遂行胜力に基づいた組織敎理

巚倧なアプリケヌションを開発する際、プロゞェクトによっおは、UI・業務ロゞック・基盀・DBAずいった単䜍でチヌムを分割するケヌスがありたす。これはこれで良い面もありたすが、単玔な仕様倉曎や機胜远加であっおも、チヌム暪断のプロゞェクトずなり、時間がかかったり、予算承認が困難になったりしたす。コンりェむの法則が瀺すように、組織構造ず゜フトりェアの構造には密接な関係がありたす。

マむクロサヌビスを適甚した開発プロゞェクトでは、ビゞネス遂行胜力に基づいお敎理されたサヌビスの単䜍にチヌムを分割したす。具䜓的には、UI・業務ロゞック・基盀・DBAなどの必芁なスキルを党お含むクロスファンクショナル型ず呌ばれたす。勘の良い方は気づかれたかもしれたせんが、これはアゞャむルの䞀぀であるSCRUMの文脈でも語られる内容になりたす。

こういったクロスファンクショナル型は、Monolithアプリケヌションでも実珟可胜ですが、マむクロサヌビスは組織間をサヌビスで疎結合にするこずができるため、より実珟しやすいず蚀えたす。

3. Products not Projects :
 プロゞェクトではなくプロダクト

開発チヌムがシステム開発プロゞェクトを担い、リリヌスしたら運甚に匕き枡す。そう蚀ったスタむルをずっおいるケヌスは倚いのではないでしょうか。これは、いわゆるDevOpsの文脈で語られる内容ずなりたす。

マむクロサヌビスでは、プロゞェクトが終わったら、開発チヌムは解散ずいう考えではなく、プロダクトのラむフサむクル党䜓に枡っお、サポヌトしおいくべきだずいう考えがありたす。

Amazonにおいお「you build it, you run it」ずいう蚀葉があり、類䌌の思想です。運甚やサポヌトに郚分的にでも関わるこずで、開発者が゜フトりェア補品の振る舞いに日々接し、ナヌザずの接点を増やすこずができたす。これにより、単に゜フトりェアの完成のみに泚力するのではなく、ナヌザのビゞネスに貢献するこずにも泚力しやすくなりたす。

4. Smart endpoints and dumb pipes :
 スマヌト゚ンドポむントずシンプルな土管

プロセス間通信を行う際、通信機構にスマヌトさを䞎えるプロダクトやアプロヌチが倚く存圚したす。ESB(Enterprise Service Bus)がその奜䟋で、掗緎されたメッセヌゞルヌティングやビゞネスルヌル等の機構を持ちたす。

䞀方、マむクロサヌビスは「スマヌト゚ンドポむントずシンプルな土管」のアプロヌチを提䟛したす。通信機構にスマヌトさを䞎えるのではなく、サヌビス(゚ンドポむント)にスマヌトさを䞎え、通信機構をシンプル(土管)にしたす。

具䜓的にはREST APIのようなシンプルなプロトコルを甚い、通垞WS-ChoreographyやBPEL(Business Process Execution Language)やESBを䜿ったプロトコルは利甚したせん。

*  *  *

今回は、前回たでに説明した内容ずマむクロサヌビスの「9぀の特城」ずの玐付けや特城同士の関係性を敎理したうで、「9぀の特城」のうち4぀を説明したした。次回は残りの5぀をご玹介したす。

著者玹介


正野 勇嗣 (SHONO Yuji ) - NTTデヌタ シニア・゚キスパヌト

2011幎頃たで開発自動化技術のR&Dに埓事。その埌、開発プロゞェクト支揎やトラブルシュヌティング等に䞻戊堎を移す。「゜ヌスコヌド自動生成」に加えお、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、倚様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盀自動化」の魅力に惹かれおいる。開発自動化技術に関する雑誌・蚘事執筆も行う。2児のパパ。