マイクロサービス
マイクロサービス(※1)とは、文字通り小さなサービスの組み合わせでシステムを構築する手法です。近頃、益々流行の兆しを見せていますが、いざ適用しようと思った際、クラウドやDevOps等様々な要素技術があり、局面ごとにどのように適用すれば良いかわからないという方もいらっしゃるのではないでしょうか。マイクロサービスの基本を一通り押さえたい方には以下を紹介します。
- 【連載】いまさら聞けないマイクロサービスの基本(※2)(現在連載中)
図1:マイクロサービスを取り巻く要素技術
デザインパターンとは
マイクロサービスに限った話ではありませんが、業務要件を実現するためのソフトウェアの実装方法によって、生産性やメンテンス性は大きく変動します。この課題を解決する手段の一つがデザインパターンです。Wikipediaには以下の通り紹介されています(※3)。
「ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: design pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。」
デザインパターンとは、ソフトウェア開発におけるベストプラクティスに「名前」が付いたもので、GoFの23のパターンが有名です。例えば、23の中の1つに「Template Method」パターンがあります。処理の流れを「入力チェック」「検索」「更新」といったステップとして規定しておき、各ステップを業務ごとに実装します。処理の流れはパターン化されており変えられません。これにより、「入力チェック」の実装漏れを防いだり、「検索」の前に「更新」をしてしまうことを防いだりします。
また、ソフトウェアのような形のないものは、どういった実装方法になっているのか一見してわからないという課題もあります。プロジェクトの後半で投入され、今日からコーディングやバグ改修しなければいけない場合において、設計書やソースを確認しておおよその構造を確認する必要があります。
例えば、業務ロジックは「Template Method」パターンを使っていると引き継ぎを受けるだけでおおよその構造が想像つきます。このように、「名前」が付いていることには、コミュニケーションの観点で大きな価値を持ちます。
図2:「Template Method」パターンのイメージ
マイクロサービスアーキテクチャのデザインパターン(API Gateway/Circuit Breaker)とThe Twelve-Factor App
デザインパターンはプログラミングの領域だけなのでしょうか?答えはNOです。
例えば、インフラ領域におけるWeb3層モデルのようなベストプラクティスを127のパターンとして定義した「インフラデザインパターン(※4)」があります。マイクロサービスを前提としたアーキテクチャにおいても、「API Gateway」や「Circuit Breaker」等のデザインパターン(※5)、デザインパターンを取りまとめた「The Twelve-Factor App」が出てきています。
1.「API Gateway」パターン(※6)
マイクロサービス化された複数のサービスを呼び出すためのGatewayサービスを構築します。近年のアプリケーションは「製品情報」「レコメンド」「レビュー」といったクライアントはサービスを呼び分ける必要がなく、一度の「API Gateway」呼び出しのみで複数サービスを呼び出し、結果を集約した画面を取得することもできます。これによりネットワーク帯域の圧迫を防ぐこともできます。
2.「Circuit Breaker」パターン
特定のサービスの故障が連鎖し、システム全体の故障へと波及するのを防ぐため、「Circuit Breaker」がエラー時のリトライの制御等を行います。Netflixの事例においては、主に平日日中帯のオンライン時間帯に、サービスやデータセンタ単位で「敢えて」障害を発生させます。これにより、開発・運用チームは耐障害性と監視の有効性について、絶えず検討・改善することができます。
図3:API GatewayとCircuitBreaker
3.「The Twelve-Factor App」(※7)
マイクロサービスは、クラウドをベースに語られることが多く、いわゆるクラウドネイティブを実現するためのデザインパターンとしてHerokuの「The Twelve-Factor App」があります。文字通り12項目で構成され、「V. ビルド、リリース、実行」のようにCI/CDに関わる事項や、「VII. ポートバインディング」のように、マイクロサービスの公開に関わる事項などが盛り込まれています。
まとめ
マイクロサービスの流行に伴い、多くのマイクロサービスに係るデザインパターンが登場し、より多くの技術者がマイクロサービスアーキテクチャベースの開発に携わることになることが想像されます。デザインパターンは、アーキテクチャ把握のスピードを高め、かつコミュニケーションを円滑にする手段として有効です。マイクロサービスを深く知り、活用していくための一つの観点として、ご活用ください。
- マイクロサービス(Microservices)http://www.nttdata.com/jp/ja/insights/trend_keyword/2015072301.html
- クラウドネイティブ世代のアタリマエを実現するマイクロサービスhttp://www.nttdata.com/jp/ja/insights/trend_keyword/2015073101.html
- ソフトウエア開発自動化技術の多様化とSpring Bootを利用したマイクロサービスの実現 http://www.nttdata.com/jp/ja/insights/trend_keyword/2015100801.html