AmazonもLINEもメルカリも採用。マイクロサービスアーキテクチャって何?
どうも、ITコンサルタントのShoheiです。
こたつの季節がやってきましたね。今日はこたつからの更新です。
さて今日は、マイクロサービスアーキテクチャについて簡単に説明をしていきたいと思います。
マイクロサービスアーキテクチャとは
早速ですが、マイクロサービスアーキテクチャって聞いたことありますか?
僕は勉強するまで知らなかったのですが、多数の大手Webサービス提供会社が採用している有名なアーキテクチャです。タイトルに書いた企業の他にも、Netflix、クックパッド、Gunosy、ウォールマート、Twitterなども採用を公表しています。
これが何かを超絶端的に言ってしまうと、「多数機能を実現する大規模なサービスからシステムを作るのではなく、多数の独立したサービスの集合体からシステムを構成させるアーキテクチャ」のことです。イメージは下の絵です。
もう少し説明するよ
もう少しだけ、ざっくりですが説明しましょう。
サービスを分離する指針は?
基本的なサービス指針としては、以下のようなものが挙げられます。
- サービスの境界をビジネスの境界に合わせる。 (独立・重複なし、1サービス1ビジネス機能)
- 一つのサービスを複数の組織で開発しない
- 他のサービスの変更をせずに、単独でサービスの変更やデプロイが行えるようにする
- 各サービスのコード数の規模感は「2週間で書き直せるもの」程度にとどめる
サービス同士はどうやり取りする?
いくつかやり方があるのですが、例えばREST APIなどを利用することで、他サービスから情報を得たり、他情報に情報を与えたりしています。
重要なことは、下の図のようにあるサービスが他サービスの内部事情を知る必要がない仕組みにしておくことです。
主なメリット
では、このアーキテクチャを導入するメリットを説明しましょう。
実装技術が異なっても良い
例えば、サービスAは実装にjavaを使うが、サービスBにはrubyを使うだとか。
サービスごとに独立をしているので、技術も異なって問題ありません。
また、何か新しい技術が出た時、全体を置き換えるにはリスクがある、といった場合にも、あるサービスに閉じて導入ができるので、迅速に最新技術の導入が進められるというのもメリットです。
独立してスケーリングできる
以下のようなケースの場合にスケールアップ考える場合、モノシリックシステムでは、ボトルネックとなっているサービス以外も一緒にスケールさせていく必要があります。
- サービスAの利用数がかなり増えてきた
- 土日だけサービスBの利用者量が増える
一方でマイクロサービスアーキテクチャでは、リソースが逼迫しているサービスだけインスタンスを拡張するなどといった局所的スケーリングが可能となります。
機能追加にかかるタスクを小さくできる
モノシリックシステムでは、特定の部分に小さな変更を加えたとしても、他の様々な部分に影響を与えてしまう可能性があります。そのためテストを入念に実施する必要が出てきたり、それがゆえに各機能でまとめてリリース作業をしたりします。しかしそれではスピード感が損なわれる上、まとめてのリリースは変更差分が大きくなるのでリスキーです。
その点マイクロサービスアーキテクチャでは、他サービスとのやり取りに使うAPI仕様などを変更しない限りはあるサービスに閉じた変更が可能なので、スピーディーな変更に対応ができます。
再利用可能
例えば、上の図はInstagramのような写真投稿のシステムのイメージでサービスA/B/Cを書いてみましたが、その会社で新たに動画投稿のサービスを作ろうと思った場合。
モノシリックシステムでは全て作り直しになりますが、マイクロサービスアーキテクチャではサービスごとに独立しているので、例えばサービスBの部分は新システムでも使いまわそうといった、個別での再利用が可能となります。
書籍紹介
マイクロサービスアーキテクチャといえば、この本です。
ただ、THE・和訳本て感じで、すごく辛いです。内容もかなりタフです。
まとめ
今日は簡単ですがマイクロサービスアーキテクチャについて説明をしました。
次回は少しだけ突っ込んで、実際にあるサービスの構造を見ていきましょう。