マイクロサービスとは
マイクロサービスとは、独立したサービスの集合が軽量 API を通じて通信するアプリケーション・アーキテクチャのスタイルです。
オンラインのショッピングサイトに最近アクセスしたときの状況を思い出してみてください。サイトの検索バーを使用して商品をブラウズしたのではないでしょうか。この検索がサービスです。関連商品のお勧めを見たことや、オンライン・ショッピングカートに品物を追加したこともあるでしょう。これも両方ともサービスです。このようなマイクロサービスをすべてまとめると、完全に機能するアプリケーションになります。
アプリケーション開発へのより効率的なアプローチ
マイクロサービス・アーキテクチャはソフトウェア構築のクラウドネイティブ・アプローチで、アプリケーション内のコア機能のそれぞれが独立して存在できるようにするものです。
この方法でアプリケーションの要素が分離されると、開発チームと運用チームは互いに邪魔にならずに並行して作業できるようになります。つまり、同じアプリケーションを同時に開発する開発者の数を増やすことができ、開発期間が短縮されます。
モノリシック・アーキテクチャとマイクロサービス・アーキテクチャ
モノリシック・アーキテクチャとマイクロサービス・アーキテクチャ
アプリケーション構築に対する従来のアプローチは、モノリスに注目していました。モノリシック・アーキテクチャでは、アプリケーション内のすべての機能とサービスは相互にロックされ、単体として動作します。何らかの方法でアプリケーションが追加されたり改良されたりすると、アーキテクチャはさらに複雑になります。すると、アプリケーション内の 1 つの機能を最適化するにも、アプリケーション全体を分解しないと困難になります。つまり、アプリケーション内の 1 つのプロセスのスケーリングが必要な場合、アプリケーション全体もスケーリングする必要があることになります。
マイクロサービス・アーキテクチャでは、アプリケーション内の各コア機能が独立して実行するようにアプリケーションが構築されます。これにより、アプリケーション全体を分解しなくても、変化するビジネスニーズに対応して開発チームは新しいコンポーネントを構築し、更新できます。
サービス指向アーキテクチャとマイクロサービス・アーキテクチャ
マイクロサービス・アーキテクチャはサービス指向アーキテクチャ (SOA) の進化形です。大規模で複雑なアプリケーションを連携が容易な小型のコンポーネントに分割するという点で、2 つのアプローチは似ています。SOA とマイクロサービス・アーキテクチャは類似しているため、よく混同されます。その違いを示す主な特徴はそれらが及ぶ範囲です。すなわち、SOA は組織規模のアーキテクチャの手法であり、マイクロサービスはアプリケーション開発チーム内の実装戦略です。
マイクロサービス・アーキテクチャのメリット
マイクロサービスは、分散開発によりチームの作業やルーチン化を後押しします。複数のマイクロサービスを同時に開発することもできます。つまり、同じアプリケーションを同時に開発する開発者の数を増やすことができ、開発期間が短縮されます。
市場投入時間の短縮
マイクロサービス・アーキテクチャでは開発サイクルが短縮されるため、より俊敏なデプロイメントと更新が可能になります。
優れたスケーラビリティ
ニーズの高い特定のサービスは、複数のサーバーやインフラストラクチャにわたってデプロイできるため、ニーズに対応することができます。
耐障害性
これらの独立したサービスは、適切に構築されていれば、相互に影響しません。つまり、モノリシックなアプリケーション・モデルとは異なり、ある部分に障害が生じてもアプリケーション全体がダウンすることはありません。
容易なデプロイ
マイクロサービスベースのアプリケーションは、従来のモノリシックなアプリケーションと異なり小型でモジュール化されるため、デプロイメントに伴う心配がありません。これにはいくらかの調整が必要ですが、サービスメッシュ層がその役に立ち、大きなメリットにつながります。
アクセス可能
大規模なアプリケーションを小さなパーツに分割できるため、開発者は各部をより簡単に理解、更新、強化することができ、特に DevOps などのアジャイル開発手法と組み合わせることによって、開発サイクルが短縮されます。
オープン性の向上
多言語 API を使用するため、開発者は、必要な機能に最適な言語とテクノロジーを自由に選択することができます。
マイクロサービスの潜在的な課題
マイクロサービスによってもたらされる柔軟性により、新しい変化をデプロイしようという動きが急増し、ここから新しいパターンが生み出されます。ソフトウェア工学では、「パターン」とは動作することが知られているアルゴリズム上のソリューションを指します。「アンチパターン」は、問題を解決する目的で作成されたが、長期的にはさらに問題を発生させることになる、よくある過ちを指します。
マイクロサービス・ベースのアーキテクチャにおいて、文化やプロセスよりもさらに大きな課題となるのは、複雑さと効率性です。マイクロサービス・アーキテクチャを取り扱う場合、このようなよくあるアンチパターンに注意することが重要です。
- スケーリング:ソフトウェア・ライフサイクル・プロセス内のいずれかの機能をスケーリングすると、特に初期段階では問題が生じます。初期セットアップ中に、サービス間の依存関係の特定に時間をかけ、下位互換性を失わせる可能性があるトリガーに注意することが重要です。デプロイ時間については、マイクロサービスの複雑性が増大して手作業でのデプロイでは手に負えなくなるので、自動化への投資が重要です。
- ロギング:分散システムでは、すべてのログを一元化する必要があります。これがなければ、スケーリングを管理することができません。
- 監視:問題の原因を突き止めるために、システムを一元的に把握することが重要です。
- デバッグ:ローカルの統合開発環境 (IDE) を通じてリモートデバッグを行うことはできず、数十、数百のサービスに対しては機能しません。残念ながら、現時点ではデバッグ方法に関する決定的な解決策はありません。
- 接続性:一元型または統合型を問わず、サービスディスカバリーを検討する必要があります。
マイクロサービスを実現するツールとテクノロジー
コンテナと Kubernetes
コンテナは、アプリケーションコードが実行するために必要なすべてのファイルとともにパッケージされた、ソフトウェアのユニットです。これにより、コンテナ内のアプリケーションを、すべての機能を維持したまま複数の環境間で容易に移行することができます。
Kubernetes はコンテナ・オーケストレーション・プラットフォームで、これを使うとアプリケーション内のコンポーネントの 1 つを他のテクノロジースタックに影響を及ぼすことなく更新できるので、マイクロサービス・アプリケーションの管理、スケーリング、デプロイメントの自動化に最適です。
API
アプリケーション・プログラミング・インタフェース (API) は、他のアプリケーションとの通信を担当するアプリケーションの部分です。マイクロサービス・アーキテクチャのインフラストラクチャ内で、API はマイクロサービス内の他のサービスが情報と機能を単体として共有できるようにするという重要な役割を担います。
イベントストリーミング
イベントは、マイクロサービス・サービス内で発生するあらゆる物事と定義できます。たとえば、オンライン・ショッピングカートに何かを追加したり、削除したりしたら、それがイベントとなります。
イベントはイベントストリームを形成し、システムの変化する動作を反映します。イベントを監視すると、データおよびユーザーの挙動に関する有意義な結論を導けます。イベントストリーム処理により、即座にアクションをとることができ、リアルタイムで運用ワークロードに直接使用できます。企業はイベントストリーミングを不正行為分析から機械保守まで、あらゆることに適用しています。
サーバーレス・コンピューティング
サーバーレス・コンピューティングはクラウドネイティブ開発モデルで、開発者がアプリケーションの構築と実行を行い、クラウドプロバイダーがサーバー・インフラストラクチャのプロビジョニング、メンテナンス、スケーリングを担当します。開発者は、コードをコンテナにパッケージ化するだけでデプロイできます。サーバーレスを導入すると、アプリケーションが基盤のインフラストラクチャから抽象化されるので、イノベーションの速度が向上します。
Red Hat の強み
Red Hat のオープンソース・ソリューションは、モノリシックなアプリケーションのマイクロサービスへの分割、マイクロサービスの管理とオーケストレーション、およびマイクロサービスが作成するデータの処理をサポートします。
Red Hat OpenShift
Red Hat® OpenShift® は Kubernetes ベースのプラットフォームで、マイクロサービスベースのアプリケーションを接続、管理、監視する方法を統一することでマイクロサービスを実現します。コンテナ化されたアプリケーション、レガシー・アプリケーション、クラウドネイティブのアプリケーションをサポートし、マイクロサービスにリファクタリングされたアプリケーションもサポートします。OpenShift を Red Hat Application Services と統合して、Git や Jenkins などの既存の自動化ツールと一緒に使用できます。エンタープライズ・グレード Linux オペレーティングシステムとも統合すると、クラスタ全体のセキュリティが向上します。
レガシー・アプリケーションの最適化、クラウドへの移行、まったく新しいマイクロサービスベースのソリューションの構築のいずれであっても、Red Hat OpenShift は、これらのアプリケーションに対してセキュリティと安定性に優れたインフラストラクチャ上のプラットフォームになります。
Red Hat Runtimes
Red Hat Runtimes はマイクロサービス向けの構成済みでコンテナ化されたランタイム基盤のセットです。Quarkus、Spring Boot、MicroProfile、Node.js など、マイクロサービス・アーキテクチャの設計時に使用するさまざまな言語とフレームワークをサポートします。さらに、Red Hat Runtimes には Red Hat Data Grid による高速データアクセスをサポートするサービスや、Red Hat シングルサインオンによるマイクロサービス API をセキュリティ保護するサービスが含まれています。
Red Hat Integration
Red Hat Integration は、ハイブリッド・インフラストラクチャ全体でアプリケーションとデータを接続するための統合およびメッセージング・テクノロジーの包括的なツールです。アジャイルで分散型のコンテナ化された API 中心のソリューションで、サービス構成とオーケストレーション、アプリケーションの接続性とデータ変換、リアルタイムのメッセージストリーミング、そして API 管理を提供します。これらはすべてクラウドネイティブのプラットフォームおよびツールチェーンと結合して、最新のアプリケーション開発の全領域をサポートします。
開発者はドラッグアンドドロップ・サービスなどのツールや組み込み統合パターンを使用してマイクロサービスを構築し、ビジネスユーザーが Web ベースのツールを使用して API を開発して別のマイクロサービスに統合できます。