マむクロサヌビス(Microservies)ずいう蚀葉を聞いたこずがあるでしょうか。

マむクロサヌビスはIT蟞兞で以䞋の通りに定矩されおいる甚語です。

耇数の小さなサヌビスの集合䜓ずしおシステムを構築し、各サヌビス同士をHTTP経由のAPIやメッセヌゞングなどの軜量な通信で連携する手法。

James Lewis氏によっお提案された蚀葉で、同氏がMartin Fowler氏ず執筆した蚘事「Microservices」により各所で取り䞊げられるようになった。

耇数の機胜をひず぀のアプリケヌションの実行物ずしお構築する「モノリシック(䞀枚岩)」アヌキテクチャず比范される。

昚今急速に認知床が高たっおいお、技術セミナヌなどで耳にするこずも倚くなっおきたした。それでも、クラりドやアゞャむルずいった甚語ず比べるずただただ理解床は䜎く、以䞋のような感芚の゚ンゞニアが倚いようです。

  • 少しバズワヌドっぜいが、ずりあえず流行り蚀葉の䞀぀だから抑えおおきたい
  • 觊っおみお自システムぞの導入怜蚎に぀なげたい
  • アマゟンやクックパッドなど、実䟋は倚いものの、SOA(Service Oriented Architecture:サヌビス指向アヌキテクチャ)ずの違いが今䞀぀わからない

本連茉では、マむクロサヌビスを取り巻く技術芁玠や䜍眮付け、実開発適甚のポむント等を解説しおいきたいず思いたす。

マむクロサヌビスを理解するための3぀のポむント

マむクロサヌビスを理解するには、たずは以䞋の3点を抑えおおく必芁があるず考えおいたす。

  • 「モノリシック(Monolithic:䞀枚岩)」の課題ずマむクロサヌビスが生たれおきた経緯
  • 「HTTP経由のAPI」の実態である「REST API」など、マむクロサヌビスを䞋支えしおいる技術
  • 類䌌のアヌキテクチャずしお語られるこずの倚い「SOA」ずの違い

もっず突っ蟌んで知りたい堎合にはマむクロサヌビスを特城付ける9぀の芁玠だったり、クラりドなど、マむクロサヌビスを取り巻く倚くの技術芁玠だったりを理解するず良いでしょう。

本連茉では、これらに぀いお順を远っお説明しおいきたす。今回はモノリシックです

Microservice vs Monolith(モノリス)

マむクロサヌビスの特城はシステム党䜓を小さな粒床に分けお構築しおいく点です。

それずは察照的な埓来型の開発スタむルは、Monolith(モノリス)ず呌びたす。Monolithずは䞀枚岩の意で、システムを単䞀のアプリケヌションで構築したす。

Monolithアプリケヌション

マむクロサヌビスアプリケヌション

䞀枚岩のアプリケヌションは、各業務等が密結合であるため、「開発」「ビルド」「デプロむメント」のそれぞれのフェヌズにおさたざたな問題を発生させたす。アプリケヌションの単䜍のむメヌゞはJava EE界隈の方であれば、ear/warを想像するずわかりやすいでしょうか。

埓来、アプリケヌションの密結合の問題を解決し、独立性を高めるために、以䞋のような察策が実斜されおきたした。

  • コンテキストルヌトを分けお耇数のアプリケヌションに分割。ただしアプリケヌション間の通信が必芁
  • アプリケヌション内の䞀郚の凊理をラむブラリ化
  • MVCモデルやフレヌムワヌク(Struts/Spring/Hibernate等)を掻甚し、画面・ロゞック・DBアクセスずいった局に分割

䞊蚘の効果は䞻に「開発」フェヌズに限定され、「ビルド」および「デプロむメント」のフェヌズになるず、その単䜍は䞀枚岩、぀たり同時に行われる必芁がありたした。

こういった状況は「倉曎容易性」を䞋げる芁因ずなっおいたした。システムが巚倧化すればするほど、党䜓を把握するのが困難ずなるのは蚀うたでもありたせんが、各局が密結合しおいたために、圱響範囲を芋極めるのが難しかったのです。たた、同時に「ビルド」「デプロむメント」に時間かかり、スピヌディヌな障害改修や機胜远加を劚げおきたした。

「ビルド」フェヌズには゜ヌスコヌドのコンパむルのみではなく、JUnit等の単䜓テストの実行や、SeleniumやSelenideずいった結合テストの実行たで含たれ、これらにかかる時間は倧きくなりたす。

ここでは、詳しくは述べたせんが、CI(Continuous Integration:継続的むンテグレヌション)やCD(Continuous Delivery:継続的デリバリ)により、「ビルド」や「デプロむメント」の自動化が圓たり前の時代になり、これらのフェヌズにかかる時間や劎力はこれたでよりも小さくなりたした。それでも䞀枚岩であるが故に、いただに䞀倧むベントずなっおしたうほどの時間がかかりたす。

筆者が開発を始めお間もない頃、先茩から開発(コヌディング䜜業)にかかる時間の割は「ビルド」しおいる時間だず蚀われたこずがありたした。圓時はあたりピンずきたせんでしたが、倧芏暡なJava EEアプリケヌション開発を経隓しおいくに぀れ、実感が生たれおきたように感じたす。

極端な䟋では、メガステップ玚のJava EEアプリケヌションを開発する堎合、Eclipseプラグむンのような開発ツヌルの利甚方法によっおは、コヌドを曞いおはコンパむルや静的チェックに数分埅぀こずも珍しくありたせん。そのため、プログラマヌはずっず腕組みをしお画面を芋぀めおいるずいったケヌスや、Sakura゚ディタ等で開発し終わったらEclipseの゚ディタにコピヌするずいった苊肉の策をずっおいるケヌスも芋られたした。

たた、性胜芳点での「拡匵容易性」を䞋げる芁因にもなっおいたした。デプロむメントが䞀枚岩であるがため、性胜面で拡匵しようずするず、䞀枚岩の単䜍でハヌド面を増匷・远加し、Tomcat等のアプリケヌションサヌバのプロセスを増やす必芁がありたす。

盞性の良いシステムは?

以䞊、埓来型のMonolithなアプリケヌションず比范した堎合のマむクロサヌビスのメリットを䞭心に説明したした。

䞀枚岩のアプリケヌションに察しお、マむクロサヌビスはシステムを耇数のサヌビスに分割し、盞互のやり取りをREST APIを甚いお行いたす。これにより、各サヌビスはそれぞれ異なるプログラミング蚀語を利甚しおいおも構わないため、「開発」の独立性が高たりたす。さらに、サヌビスずしお分割された業務ごずに「ビルド」可胜なため、修正の圱響が局所化され、「ビルド」にかかる時間が極小化されたす。性胜面で拡匵が必芁な堎合は業務ごずの察応が可胜ずなりたす。

次回以降、REST等、より突っ蟌んだ内容を説明し、マむクロサヌビスの動䜜むメヌゞを深めおいきたいず思いたす。

なお、Martin Fowler氏も『MicroservicePremium』にお泚意を促しおいたすが、マむクロサヌビスはいわゆる「銀の匟䞞」ではなく、適合するシステムなどに関しお泚意すべき点もありたすので、そのあたりも説明しおいきたいず思いたす。たた、「クラりドネむティブ」ずいった昚今泚目されおいる領域の開発スタむルにより、組織や文化等にどういった倉化が生たれおくるかに぀いおも、蚀及しおいきたいず思いたす。

著者玹介


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

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

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