FXC Kempチームでございます。
このブログはKemp Technologies社のADC製品シリーズであるLoadMasterの国内普及を目的として、対応する機能や設定に関する技術情報などを主に配信します。今回はマイクロサービスを題材に、Kemp LoadMasterが提供するアプローチを紹介したいと思います。
■マイクロサービスとは
クラウドコンピューティングやインターネットサービスに於けるアプリケー ション開発では近年、マイクロサービス アーキテクチャがクローズアップされています。これはサービスの構成要素を小さなサービスに分割することで、
アプリケーション開発の効率化とDevOpsの概念で語られる開発と運用の最適化のアプローチ手法といえます。
この結果、開発速度と運用の質を高いレベルで調和しサービスの拡張性を実現することを可能にする手法であるといえます。
■現状のサービススタイル
では、マイクロサービス アーキテクチャによるソフトウェア開発は、新規にスクラッチで行う必要があるのでしょうか。従来のウォータフォール開発手法では、コンポーネント化されたモジュールでサービスが構成されているケースが多くあります。また、httpではURLで個別にコンポーネント(CGI) を呼び出す手法が一般的です。つまり、サービスの構成要素としてコンポーネントが既に存在しているわけです。
しかし、このコンポーネントは一つのサーバ機の中で構成されており、サービス提供時に発生する多くのトランザクションはサーバ内の各コンポーネントがCPUタイムを時分割して応答しています。
この状況でより多くのトラフィックを処理するためにはロードバランサーによるサーバクラスタリングが必要になります。
■マイクロサービスへのアプローチ
個別のサービスを提供するコンポーネントは、サービス内容によって処理時間やアクセスの集中が異なります。しかし、現状のスタイルでは一つのサーバ(クラスタリングを含む)がすべてのサービスを実行するようにサーバ内で構成されます。
本来、サービスの効率化のためには、コンポーネントの処理時間や利用頻度で提供するサーバを分けた方がメンテナンス性や応答性の向上が期待できます。
■マイクロサービスへのアプローチ
個別のサービスを提供するコンポーネントは、サービス内容によって処理時間やアクセスの集中が異なります。しかし、現状のスタイルでは一つのサーバ(クラスタリングを含む)がすべてのサービスを実行するようにサーバ内で構成されます。本来、サービスの効率化のためには、コンポーネントの処理時間や利用頻度で提供するサーバを分けた方がメンテナンス性や応答性の向上が期待できます。
つまり、処理時間のかかるサービスではCPU性能や多くのコアを持つサーバを割り当て、
アクセスの集中するサービスではクラスタリングでサーバ数を増やすという形でユーザエクスペリエンスを最適化できる可能性が広がります。
つまり、コンポーネント化された既存のサービスは、各コンポーネントを特性に応じたサーバで実行することで多くの効果をもたらすと考えられます。
■マイクロサービスの第一歩
マイクロサービス アーキテクチャーではコンポーネント間のインターフェース設計などで、独立性の高いコンポーネントの集合体でサービスを構成するものと考えられます。
■マイクロサービスの第一歩
マイクロサービス アーキテクチャーではコンポーネント間のインターフェース設計などで、独立性の高いコンポーネントの集合体でサービスを構成するものと考えられます。しかし、この環境にたどり着くには設計の見直しなどの多くの工数を必要とします。
既にある資源を活用して運用性と拡張性の高いシステムを構築する上では、コンポーネントの機能に応じたサーバの分割がその第一歩となるのではないでしょうか。
つまり、URLのメソッドが示すCGIで処理すべきサーバを切り分けてサービスコンポーネントを実行し、ストレスのない応答性能を実現していくことが、マイクロサービスを実現する第一歩になるのではないでしょうか。
■マイクロサービス実現の手法
LoadMasterのコンテンツルールとSubVS機能を使うと、既存のインターネット サービスをユーザエクスペリエンスの最適化と運用性の効率化を可能にするシステムに構成することが可能になります。HTTPリクエストはLoadMaster内のL7コンテンツスイッチにより各コンポーネントに配信します。
それぞれのコンポーネントは、処理の負荷状況や想定されるトランザクション数に応じてサーバを割当てて、最適な応答性能を確保します。
<例>
コンポーネントA: 負荷が大きくトランザクションも多いため、複数台の高性能サーバでクラスタリングします
コンポーネントB: 負荷が大きい処理のため、2台の高性能サーバで可用性を確保します
コンポーネントC: 標準的な処理であり、標準的な性能のサーバで可用性を確保します
httpのURLリクエストの内容をチェックし、サービスコンポーネント(CGI)に応じてリクエストを目的のサーバに振り分けます。アクセスの多いリクエストはサーバをクラスタリングしてトラフィックに対応します。リクエスト内容をチェックしてサーバに振り分ける手法はURLストリングのマッチングで行います。マッチングストリングは正規表現(PCRE)の記述で行います。特別なスクリプトを記述する必要はありません。
コンテンツルールの設定は以下のサイトを参照してください。