ビジネス的に価値のあるサービスを改善しながら継続して提供していく上で,DevOpsの実践を踏まえた基本的な方針として、プロセスとしてはスクラム等のアジャイルプロセスを前提としつつ,環境的にはクラウドを活用し、可能な限りのオートメーションを実行可能としたマイクロサービスアーキテクチャの実現が,現在注目されている。
本書"Microservices on Azure"(翔泳社)は,Bob Familiar著,"Microservices, IoT,and Azure"(Apress)の邦訳である。
"マイクロサービスがどういうアプローチなのかはわかる。けれど,具体的にはどのように開発してゆけばよいのか?"
"クラウドネイティブの利点をより活かすには,どのようにアプリケーションを設計するべきか?"
"マイクロサービスの例として,ソースコードはないのか?"
本書は,上のような不満を持っている人にとって,貴重なヒントになるだろう。
本書の特徴は,以下の3点である。
1. マイクロサービスの論理アーキテクチャを解説している
マイクロサービス自体は,Martin Fawlerが以下のように記述している。
In short, the microservice architectural style [1] is an approach
to developing a single application as a suite of small services,
each running in its own process and communicating with lightweight mechanisms,
often an HTTP resource API.
[Microservices](http://martinfowler.com/articles/microservices.html)
"マイクロサービスアーキテクチャスタイルとは,一つのアプリケーションを,複数の小さなサービスとして構成する開発アプローチである。各々のサービスはプロセスとして動作しており,HTTPリソースAPIなどの軽量なメカニズムを利用して通信する。"
しかし,これはアプローチであるため,これだけでは設計を進めることができない。たとえば,"サービスの粒度はどのようにして決定していくのか?""各サービスに対し,全体構成はどのように考えていけば良いのか?"と言った疑問がある。
これに対し,本書は,"Chapter3 マイクロサービスのアーキテクチャ"にて,論理アーキテクチャの解説を行っている。特に重要なのは,各サービスがAPIを持つこと,および,APIゲートウェイを設けることだろう。これにより,サービスを"シンプルなAPI"として認識することができる。
2. Azureのサービス機能をマイクロサービスの観点から活用した,
リファレンス実装を紹介している
クラウドネイティブのアプリケーション例を紹介した書籍は,これまでにも何冊か出版されている。本書が特徴的なのは,"Chapter6 マイクロサービスのリファレンス実装"以降にて,具体的なアプリケーションを解説していることである。実装コードは[Github](https://github.com/bobfamiliar/microservices-iot-azure)にて公開されている。
他書が"AWSやAzureのサービス紹介"にとどまっているのに対し,本書では"設計したアプリケーションの解説"となっている。クラウドネイティブの利点をより活かしたアプリケーションを開発する上で,このソースコードは貴重な情報源となるだろう。
さらに本書では,Azure IoTサービスまで扱っている。デバイス管理や大量のリアルタイムイベント・メッセージのハンドリング等の技術課題に関心のある読者には "Chapter7 IoTとマイクロサービス"の章が参考になるだろう。
3. マイクロサービスの背景を簡潔に解説している
マイクロサービスアーキテクチャに基づいた開発を行う上で,重要な問題は技術だけだろうか?ビジネスのあり方,組織のあり方,チーム編成といった問題は,技術よりも大きな問題となりうる。
Sam Newmanは,"Building Microservices"(邦題「マイクロサービスアーキテクチャ」)にて,"コンウェイの法則"を紹介している。
システム(ここでは単なる情報システムよりも広く定義されたシステム)を設計するあらゆる組織は,必ずその組織のコミュニケーション構造に倣った構造を持つ設計を生み出す。
本書においても,著者は"2.3 マイクロサービスの課題"として,"チーム編成は最も難しい課題の1つ"としている。
マイクロサービスの背景となる開発アプローチとして,著者は,リーンデベロップメントを紹介している。背景情報に関しては,本書だけでなく,著者が出演しているMicrosoft Virtual Academyのビデオも視聴するとよいだろう。[Exploring Microservices in Docker and Microsoft Azure](https://mva.microsoft.com/en-US/training-courses/exploring-microservices-in-docker-and-microsoft-azure-11796)
このビデオでは,マイクロサービスアーキテクチャに基づいた開発を行う上での背景情報から,Dockerを利用したコンテナ管理の実例までが紹介されている。本書の内容をさらに理解する上で役に立つだろう。
進化的アーキテクトを目指して
ビジネスとしても,システムとしても進化していくためには,新しい文化や技術を柔軟に取り込んでいかなければならない。マイクロサービスは,そのような柔軟性を実現するアプローチの一つである。本書はそのような,"進化的アーキテクト"を目指す人のための本である。