アプリケーションをモジュラーモノリスとして記述し、容易にマイクロサービスとしてデプロイできるフレームワーク「Service Weaver」
マイクロサービスとモノリスのメリットを兼ね備えたアーキテクチャとして「モジュラーモノリス」が注目されている。2024年6月15日に開催された「CloudNative Days Summer 2024」では、グーグル・クラウド・ジャパン合同会社のアプリケーション モダナイゼーション スペシャリスト 頼兼 孝幸氏が登壇。「Service Weaverで始めるモジュラーモノリス、そしてマイクロサービスへ」と題したセッションで、Googleが開発した分散アプリケーションを作るためのオープンソースのフレームワーク「Service Weaver」を活用し、モジュラーモノリスのアプリケーションをマイクロサービスとしてデプロイする方法を解説した。
モダンなアプリケーション開発の特徴と
開発者を悩ませる課題
モダンなアプリケーション開発アーキテクチャの特徴の1つとして挙げられるのが、モジュール性の高さだ。従来のモノリシックアプリケーションでは、ビジネスロジックが密結合されており、変更が難しいという問題があった。しかし現在ではコンポーネントごとに独立したモジュールとして開発し、それらを柔軟に組み合わせることが求められている。これにより、アジリティと製品の品質向上が期待できる。「モジュール性は高い方がいい」とグーグル・クラウド・ジャパンの頼兼孝幸氏(写真)は言う。
次に求められるのが「弾力性」だ。オンプレミス環境ではサーバーのスケーリングが難しいが、クラウド環境では必要に応じてスケールイン/スケールアウトが可能だ。これによりビジネスのスケールに合わせたインフラの柔軟な対応が可能となる。
さらに「ポータビリティ」も重要なポイントだ。コンテナ技術の進化により、ローカル環境から本番環境まで一貫したデプロイが可能となった。これにより依存関係の管理が簡素化し、どこでも同じ環境でアプリケーションを動かすことができる。
そして「アジリティ」である。開発サイクルの速さを維持するためには、モジュール化されたアーキテクチャが不可欠だ。これにより、各チームが独立してアップデートを展開でき、開発のスピードを維持することができる。
しかし現実の開発はこうした理想通りには進まない。計画の長期化やテスト責務の肥大化、複雑化、開発オーバーヘッドの増大などといった課題が開発者を悩ませることとなる(図1)。
Service Weaverは
「分散アプリケーションを作るための強力なツール」
Service Weaverは、モジュラーモノリスとして書いたアプリケーションをマイクロサービスとしてデプロイすることができるフレームワークだ。これにより単一のデプロイメントユニット内でドメイン分割されたモジュール群を管理することが可能となる。「Service Weaverは、分散アプリケーションを作るための強力なツールです」と頼兼氏は強調した。
モジュラーモノリスとは、単一のデプロイメントユニットの中でドメイン分割されたモジュール群が存在するアーキテクチャである。これにより開発者は1つのコードベースで異なる機能をモジュールとして独立させ、管理しやすくなる。
Service Weaverの機能は大きく2つに分類される。アプリケーションを書く際に利用する「コアライブラリ」と、アプリケーションのランタイムトポロジを構成し、それを一連のマイクロサービスとしてデプロイする「デプロイヤー」だ(図2)。
Service Weaverでは、Go言語のインターフェースと構造体を使用してコンポーネントを定義する。各コンポーネントをGo言語で定義し、実装することで、モジュール化されたビジネスロジックを効果的に管理できる。
具体的な実装法として頼兼氏は以下の4つのプロセスを紹介した(図3)。
- コンポーネントをGo interfaceとして定義
- Goの構造体を定義してコンポーネントを実装
- インスタンス化、実行
- コンポーネントの呼び出し
Service Weaverのデプロイ方法としては、ローカル環境、GKE、Kubernetes、SSHなどさまざまなオプションが提供されている。ローカル環境ではシングルプロセスとマルチプロセスの両方をサポートしており、実際の動作を確認できる。GKEやKubernetes環境では、複数のマシンやクラスターに分散してデプロイすることが可能で、大規模なシステムにも対応できる。「デプロイ方法が多様なため、開発者は自身の環境に合わせた最適な方法を選択できます」と頼兼氏は実装例を示しながら紹介した(図4)。
可観測性を向上するService Weaverの機能
続いて頼兼氏は「Telemetry and Testing」と題して、可観測性を向上するService Weaverの機能を紹介した。その主な機能には、ロギング、メトリクス、トレーシング、プロファイリング、そしてテストサポートが含まれる。これらの機能はアプリケーションの開発と運用を包括的にサポートし、開発者の負担を軽減する。
- ロギング機能:Service Weaverのロギング機能は、各コンポーネントに関連付けてログを記録し、操作できる。特定のログのみを抽出して閲覧するフィルタリング機能により、デバッグや問題の特定が迅速に行える。
- メトリクス機能:カウンターやゲージ、ヒストグラムなどのメトリクスを提供し、自動的に各アプリケーションに対するメトリクスを生成する。これにより、スループットやレイテンシーなどの重要なパフォーマンス指標を簡単に監視でき、アプリケーションのパフォーマンスを詳細に把握し、最適化のためのデータを提供する。
- トレーシング機能:オープンソースのオープンテレメトリーに依存しており、HTTPリクエストやコンポーネントメソッドの呼び出しを自動的にトレースできる。これによりモジュール間やマイクロサービス間の通信を追跡し、パフォーマンスボトルネックの特定が可能だ。「トレーシング機能を活用することで、モジュール間やマイクロサービス間の追跡が容易になります」(頼兼氏)。
- プロファイリング機能:GKEデプロイヤーを使用することで、CPUやヒープの情報をプロファイルし、アプリケーション全体のパフォーマンスを把握する。リソースの使用状況を詳細に分析し、パフォーマンスの最適化を実現できる。
- テストサポート機能:Service Weaverは強力なテストサポート機能を提供しており、weavertestパッケージを使用することで、ローカル、マルチプロセス、分散環境でのテストが可能だ(図5)。
モジュラーモノリスからマイクロサービスへの移行
モジュラーモノリスのアーキテクチャを採用することで、開発のアジリティを高めることができる。モジュール化されたビジネスロジックを記述し、コンポーネントごとに単体テストを作成することで、迅速な開発と高品質な製品の提供が可能となる。またモジュラーモノリスは、マイクロサービスへの移行を容易にするステップとしても有効である。
「モジュラーモノリスからマイクロサービスへの移行は、ビジネスロジックを柔軟に管理し、アジリティを維持しながら品質を向上させるための効果的なアプローチです」(頼兼氏)
セッションでは、Service Weaverを活用したモジュラーモノリスからマイクロサービスへの移行がいかに効果的であるかが強調された。モジュラーモノリスのアーキテクチャを採用することで、ビジネスロジックを柔軟に管理し、アジリティを維持しつつ、製品の品質を向上させることができる。
最後に頼兼氏は、「Service Weaverは、現代のアプリケーション開発において重要なツールです。ぜひ活用してみてください」と訴え、セッションを締めくくった。
※本イベントセッションで使用したスライドは、こちらからダウンロードできます。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- JBoss Enterprise Application Platformのアーキテクチャを理解する
- Oracle Cloud Hangout Cafe Season6 #1「Service Mesh がっつり入門!」(2022年9月7日開催)
- Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)
- Kubernetesアプリケーションのトレーシング
- CNDT2020シリーズ:メルペイのマイクロサービスの現状をSREが解説
- マイクロサービスとサービス・メッシュ(Istioが求められる背景)
- コンテナをさらに活用しよう! 「マイクロサービス」と「サーバーレス」
- JBossのアーキテクチャ
- 「Odigos」でノーコードの分散トレーシングを実現する
- Istioがマイクロサービスからモノリシックなアプリに変化。その背景とは