タイトル通り、モノリシックとかマイクロサービスが何なのかわからない僕が自分なりに調べてみた二つの意味を発表します。まずは、なぜこれらについて調べたかというところから。
- モノリシック?マイクロサービス?サービス指向アーキテクチャ?
- サービス指向アーキテクチャ「やぁ」
- マイクロサービス「SOAがやられたらしいな」
- マイクロサービス登場
- SOAとマイクロサービスアーキテクチャの違い
- マイクロサービスアーキテクチャをよろしく
モノリシック?マイクロサービス?サービス指向アーキテクチャ?
発端は、サーバレスアーキテクチャについて調べていたときのことでした。「AWS Lambdaっていう名前かっこいいなぁ」くらいな感覚でサーバレスアーキテクチャについて調べていたところ、やたら「モノリシック」とか「マイクロサービス」という単語を見かけた。響き的になんとなく、「モノリシックは。なんかこう、一枚岩的な?感じの何かでしょ。マイクロサービスはちっちゃいサービスだよきっと」と想定していたんですが、それじゃサーバレスアーキテクチャについての記事への理解が深まらなかったので調べました。
サービス指向アーキテクチャ「やぁ」
いきなりだが、話は2000年初頭に遡る。この頃、サービス指向アーキテクチャ(SOA)というのが登場した。このサービス指向アーキテクチャとは。。。
下の画像がサービス指向アーキテクチャの解説図。超噛み砕いて言うと、自分のところのサービスと他の企業のサービスを組み合わせながら一つのアプリケーションを作ろう!っていう発想らしい。複数のサービスを組み合わせて一つのサービスを構成すると。Djangoと似てるね。このサービス指向アーキテクチャのメリットは再利用可、変更が容易。プログラマにはすっと理解できるであろう、よくあるやつ。
さぁ、鳴り物入りで登場したSOAですが、実際は運用していくうえで問題もあったようです。サービス間のインターフェイスの構築がめっちゃ大変で、しかもサービスを再利用可能にするため(汎用性を持たせるため)、何種類ものインターフェイスを実装せざるを得ない状況が多発したそうな。それは困りますね。また、SOAの難しさの一つにはサービスの粒度の決定もあったそうな。
さて、ここにきてやっとマイクロサービスの登場です。
マイクロサービス「SOAがやられたらしいな」
さっそく、モノリシックアプリケーションとマイクロサービスによるアプリケーションを比較した画像がこちらです。
先にモノリシックについて。モノリシックは、UI,ビジネスロジックが単一のプロセスで実行され、全体で共有されているDBにデータを保存します。忙しくなってきたら、複数のインスタンスを稼働させてスケールアウトできる。モノリシックで十分よく動くやないかい!と思ったけど。これだと、どこか一部の機能を追加・変更したときにその影響範囲がアプリケーション全体に及ぶというデメリットが生まれる。そんなのいやだ。つまり、モノリシックは全部一つに「えいっ!」ってまとめちゃえる代わりに、どこかを変更したらその変更に合わせてほかも変更しなきゃいけないと。
アプリケーションを構成するサービス群が30人31脚のように繋がれており、誰か一人がコケたらみんな転んでTHE ENDになりかけないリスクがあるのさ!
マイクロサービス登場
前章で書いたモノリシックやSOA意思を継ぎ、人類に素晴らしいアーキテクチャを与えにきてくれたマイクロサービス。実際、どんなもんか見てみよう。
マイクロサービスアーキテクチャはそれぞれ単一の機能をマイクロサービスとして制作する。マイクロサービスはでデータも含めて完全に独立している。各マイクロサービスの変更は他のマイクロサービスに影響を及ぼさない。
加えて、サービスごとに独立してデプロイ・スケール・チーム作成できる。それぞれのプログラミング言語を使える。らしい。
なるほど!!!SOAとの違いがわからん!!!!!!
SOAとマイクロサービスアーキテクチャの違い
SOAと比較して、マイクロサービスは、サービスがどれくらいの粒度であるべきか、サービス同士がどのように通信すべきか(HTTP Resource APIを使う)についての回答を持っている。なるほど。これは確かにSOAで問題になっていたインターフェイス作りまくり問題とか、小さなサービスが足引っ張る問題を解決できそうだ。そこらへんの詳しい取り決めについてはマイクロサービスの提唱者であるMartin Fowler氏のウェブサイトが参考になりそうなので貼っておく。Microservices
どうやら、追加で調べているとマイクロサービスは配備を完全に自動化する。という決まりもあるらしい。つまり、DevOps的なソリューションが加わったアーキテクチャなんだね。
でも、実際に「SOAの焼き直しじゃね?」っていう声が上がっているのも事実。うん。まぁ、そうっぽいよね。そんなもんだよね。でも、SOAが登場した2000年代初頭に比べて、ソフトウェア変更のスピードと柔軟性に対応するニーズの高まり、Docker等のコンテナ仮想化技術やContinuous Intergration等のインフラ自動化技術の台頭によってSOAに対する必要性が増して実現されていったという感じらしい。
ありていに言えばSOAは早すぎる考えだったんだ。実際にSOAを使ってうまくいった企業もあったらしいけど、取り巻く環境がまだSOAのメリットが最大限に発揮される状況になかった。と言えるんじゃないでしょうか。なのでマイクロサービスはSOA 2.0とでもいうべきか。
マイクロサービスアーキテクチャをよろしく
さて、普段はあまり意識しないアーキテクチャについてのお勉強をしました。フレームワークとか使ってると意識しないところだけど、無意識のうちに似たようなアーキテクチャを使っていたんだねと思った。こうやってアーキテクチャを学ぶことによってより良い構成のアプリケーションが作れるようになりたいものです。
最後にお勉強してるときに見つけたマイクロサービス構築のためのフレームワーク、ライブラリを紹介して〆にします。
ライブラリ:Netflix Open Source Software Center
大変参考にしたウェブサイト:
SOA(サービス指向アーキテクチャ)とは: SOA | NEC
マイクロサービス(Microservices) | NTTデータ