CodeZine(コードジン)

特集ページ一覧

これなら分かる!マイクロサービス(活用編)~そのアーキテクチャを実現するデザインパターンを一気に学習

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

(3)拡張性を高めるデザインパターン

サービスは1環境に1つとして独立させる: Service Instance per Host / VM / Container(1環境1サービス)

 1つの環境(まずは物理的なマシン1台にそのままサービスを配置している状態をイメージしてください)に複数のサービスを載せることは、マイクロサービスの持つ多くのメリットを犠牲にします。それぞれのサービスが全体の実行環境に影響を及ぼすため、CPU使用状況の監視が難しくなったり、あるサービスのデプロイ(配置作業)が他のサービスに影響してしまいかねない、といった点がそれです。中でも課題となるのは、サービスごとのスケーリングができなくなるということでしょう。個々のサービスごとに適切なハードウェア構成をとることができず、システム全体に合わせた構成をとらざるを得なくなります。

補足

 この1つの環境に複数サービスを載せるサービス配置はMultiple Service Instances per Host(=1つのマシンに複数のサービス)と呼ばれるパターンの1つであり、必ずしも取りえない構成というわけではありませんが、上記のような課題があるということをここでは理解してください

 Service Instance per Host(=1つの環境に1つのサービスのみ配置)パターンを適用することで、サービス間の独立性が保たれ、上記の問題を解決できます。監視対象やデプロイは干渉しなくなり、スケーリングもそのサービスに特化した対応ができるようになるため、拡張性が向上します。

 さらに、仮想マシン[11]技術を用いれば、リソースをより無駄なく活用できます(Service Instance per VM)。そして、仮想化をより小さい単位で実現するコンテナ型仮想化[12]技術なら、より一層リソース効率を高めることができるでしょう(Service Instance per Container)。

[11] 仮想マシン:1台の物理マシンに複数のOSを配置し、仮想的に複数のマシンとして扱えるようにする技術

[12] コンテナ型仮想化:仮想マシンと異なりOSは1つで、その上にコンテナと呼ばれるアプリケーションごとの個別領域を作る技術。仮想マシンに比べ処理負荷が少なく可搬性に優れるなどのメリットがある。Docker社が開発する同名のプラットフォームが代表格

図6:Service Instance per Host / VM / Container(1環境1サービス)
図6:Service Instance per Host / VM / Container(1環境1サービス)

各サービスへの接続に振り分けを挟むことで、自由な拡張を実現する:Service Registry(サービスレジストリ)とService Discovery(サービス検出)

 各サービスはその接続先を特定できるIPアドレスなどの情報を持っており、呼び出し元はその値によって対象のサービスにアクセスします。しかし、その値を呼び出し元が直接保持してしまうと、接続先が変わるたびに呼び出し元の修正が必要になってしまいます。また、負荷分散のために同一のサービスを複数コピー配置して使用する場合や、さらには仮想化技術によりアクセス量にあわせて動的にその数を増減するケースもあるため、接続先の特定には柔軟性を持たせる必要があります。

 そこで、各サービスの接続先の台帳(=Registry)を管理する機能を配置し、呼び出し元はそれを経由して相手先のサービスを検出(=Discovery)する手法がとられます。これにより、接続先情報が変わっても呼び出し元に影響することはなく、また各サービスの配置状況にあわせて適切な接続先が使用されることとなります。

図7:Service Registry / Service Discovery(サービスレジストリ / サービス検出)
図7:Service Registry / Service Discovery(サービスレジストリ / サービス検出)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:これなら分かる! エンジニアが知っておきたいIT業界用語

著者プロフィール

  • 西野 大介(SOMPOホールディングス株式会社)(ニシノ ダイスケ)

     SOMPOホールディングス株式会社デジタル戦略部(SOMPO Digital Lab)勤務。損保ジャパン日本興亜グループにおける先進技術の研究開発を担当。過去には基幹システムの開発にも従事し、SoR/SoE双方の開発において幅広い経験を持つ。本業以外では、CodeZineの連載をはじめ、国内/海外...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5