分散マイクロサービス基盤 Chip-in
Chip-in は、マイクロサービスをクラウド上に自由に分散して配置できる分散マイクロサービス(Distributed Micro Services)の基盤を提供します。小さなリソースを持ち寄って大規模なシステムを構築することをイメージして Chip-in という名前をつけています。 Chip-inを使用すれば、システムに使用するリソースをフレキシブルに追加できます。極端な例では、開発者は喫茶店の Wifi に PC を接続して、PC 内で開発中のマイクロサービスを起動してアプリケーションシステムの一部として動作させることができます。
メリット
アプリケーションシステムをコンテナ技術を使用してマイクロサービスの集合として実装することで以下のメリットを得ることができます。
俊敏性の向上
各マイクロサービスは独立して開発、デプロイ、スケールできます。これにより、開発チームは他のサービスに影響を与えることなく、担当するサービスを迅速に更新・改善できます。CI/CD (継続的インテグレーション/継続的デリバリー) との相性も抜群です。
スケーラビリティの向上
システム全体をスケールさせるのではなく、負荷の高い特定のサービスだけを個別にスケールアウト(またはスケールイン)できます。これにより、リソースを効率的に利用し、コストを最適化できます。
技術選択の柔軟性
各マイクロサービスは、その機能や要件に最適なプログラミング言語、フレームワーク、データベースなどを自由に選択できます。これにより、常に最良の技術スタックを活用できます。
耐障害性の向上
あるマイクロサービスに障害が発生しても、その影響をシステム全体に波及させることなく、他 のサービスは正常に動作し続けることができます。これにより、システム全体の可用性が向上します。
保守性の向上
各マイクロサービスは比較的小さなコードベースで構成されるため、理解しやすく、修正やテストも容易になります。また、チームごとに担当サービスを分けることで、責任範囲が明確になります。 また、VS Code の中でマイクロサービスを起動してクラウド上の検証環境に接続することで、結合テストの内容をデバッガでブレークポイントをかけたり、変数の値を見たり、ステップ実行しながらデバッグできます。
デプロイの容易さと迅速性
コンテナ技術(例: Docker)を利用することで、各マイクロサービスを環境に依存しない形でパッケージ化し、迅速かつ確実にデプロイできます。開発環境から本番環境への移行もスムーズです。
リソース効率の向上
コンテナは従来の仮想マシンに比べて軽量であるため、同じハードウェア上でより多くのサービスインスタンスを実行でき、リソースの利用効率が向上します。
現状の課題
現状、クラウドの IaaS 上でマネージドサービスを使用してマイクロサービスを分散して配置しようとすると以下のような課題があります。
セキュリティ
ゼロトラストアーキテクチャにおいては、内部であってもネットワークを信用しませんので、全ての通信を暗号化し、相互認証しなければなりません。 クラウド上に分散してマイクロサービスを配置しようとする場合はサービス間の通信を暗号化し、接続時の認証を必須とする必要があります。
ネットワークトポロジィ
マイクロサービス網においてはそれぞれのサービスがサーバとしてサービスを提供したり、クライアントとしてサーバにアクセスしたりします。 しかし、クラウド上でサーバとしてサービスを提供しようとすると必ずグローバルIPとサーバ証明書が必要となり、サービスを配置するネットワークに強い制約が課されます。 また、クライアントーサーバの組み合わせの数だけのマイクロサービス間通信があり、複数のネットワークにまたがって分散されている場合すべての通信の経路をルーティングで確保する必要があります。
サービスディスカバリ
マイクロサービスがクライアントとしてサーバとなる別のマイクロサービスにアクセスする場合、そのサービスのエンドポイント(IPアドレス+ポート番号)の情報を得る必要があります。通常は抽象的なURLからDNSを使用してエンドポイントを特定しますが、以下のような場合その仕組みが複雑になります。
- グローバルなFQDN、ローカルなFQDNを混ぜて使用する
- デフォルトのポート番号以外のポート番号を使用する
- 冗長化されていて複数のエンドポイントを切り替えて使用する
- 負荷分散のために複数のエンドポイントを並行して使用する
障害検知、復旧検知
サービスを冗長化して実装する場合に障害検知、復旧検知は接続エラーに対する再試行回数やタイムアウトによって実装されますが、ネットワーク障害なのかサービスが完全んい落ちているのかの区別がつきません。このため、障害検知、復旧検知の精度が悪くエラー輻輳やスプリットブレインを起こす場合があります。