インターネットの継続的な発展に伴い、システムの肥大化や保守不能を避けるために、ビジネスをさまざまなサブシステムに分割することを選択する企業が増えています。これにより、開発者は保守と更新が容易になると同時に、高い同時実行性と大量のデータを処理するときに高可用性とパフォーマンスを維持できるからです。そして、そのようなアーキテクチャがマイクロサービス アーキテクチャです。
マイクロサービス アーキテクチャの利点は明らかですが、アーキテクチャの過程ではさまざまな厄介な問題を克服する必要があります。たとえば、サービス間の依存関係を解決する方法、ネットワークの中断によって引き起こされるサービスの利用不能を解決する方法、各サービスが独自のライフサイクル中に独自のステータスを管理できるようにする方法などです。これには、マイクロサービス アーキテクチャを実装するツールが必要であり、Spring Cloud はそのようなツールです。
Spring は、ビジネス機能を実装するための多くのコンポーネントを提供する非常に人気のある開発フレームワークですが、マイクロサービス アーキテクチャのニーズに合わせて、Spring Cloud を導入することでマイクロサービス アーキテクチャに必要なさまざまなコンポーネントも提供します。 Spring Cloud には、Netflix Eureka、Netflix リボン、Zuul などの多くのサブプロジェクトが含まれており、マイクロサービス アプリケーションを迅速に構築してデプロイし、それらが効率的に動作できるようにするのに役立ちます。 Spring Cloud に基づいてマイクロサービス アーキテクチャを実装する方法を見てみましょう。
1. サービスの登録
マイクロサービス アーキテクチャでは、サービスの登録は、さまざまなサービスがより効率的に通信できるようにするため、非常に重要な手順です。このサービスは、他のサービスがこの API を通じて利用可能なさまざまなサービスとその場所について学習できるように、登録 API を提供する必要があります。サービス登録を実装するには、Spring Cloud の Netflix Eureka の統合を使用できます。 Eureka は、高可用性を確保するメカニズムを提供するサービス登録および検出サーバーです。以下は RocketMQ のサービス登録の例です。
@EnableDiscoveryClient @SpringBootApplication public class RocketMQApplication { public static void main(String[] args) { SpringApplication.run(RocketMQApplication.class, args); } }
アプリケーションの起動時に @EnableDiscoveryClient アノテーションを追加するだけでサービスの登録が完了することがわかります。
2. サービス ルーティング
サービス ルーティングは、注目に値するもう 1 つの領域です。マイクロサービス アーキテクチャ アプリケーションは通常、複数のサブシステムで構成されるため、サブシステム間の通信が複雑になり、サービス間の依存関係も複雑になります。サービス ゲートウェイの機能は、アプリケーション全体からのリクエストを均一に処理し、一貫したサービス インターフェイスをクライアントに提供することです。 Zuul は Spring Cloud が提供するゲートウェイ サービスで、リクエストとサービス アクセスのルーティングを担当し、リクエスト パスのマッチングに基づいてルーティングを指示できます。
3. サービス負荷分散
同時実行性とトラフィック量が多いシステムでは、サービス負荷分散はシステムの高可用性を確保するための鍵となります。リボンはこの問題を解決するツールです。これにより、マイクロサービス アーキテクチャに基づいてロード バランサーを簡単に構成できます。まず、@LoadBalanced アノテーションを使用して、RestTemplate をリボンによってプロキシできるようにします。次に、restTemplate で (URL の代わりに) サービス名を使用してサービスを呼び出し、負荷分散を実現します。
4. サービス フォールト トレランス
サービス フォールト トレランスは、もう 1 つの非常に重要な要素です。各サービスがライフサイクル中に独自の状態を管理し、他のサービスに問題が発生した場合でも回復可能で安全に終了できることを確認する必要があります。 Hystrix を使用してサービス フォールト トレランスを実装するのは非常に簡単です。
Netflix Hystrix は、フォールトトレラントな遅延シャットダウン ライブラリです。これは、サービス エラーまたは応答タイムアウトが発生した場合でも有用な応答を確実に取得できるようにするためのフォールバック メカニズムを提供します。使用法を見てみましょう:
@Service public class StockService { @Autowired private ProductService productService; @Autowired private StockFallback stockFallback; @HystrixCommand(fallbackMethod = "getStockFallback") public Integer getStock(Long productId) { Product product = productService.findProductById(productId); if (product == null) { return stockFallback.getStockFallback(productId); } else { // TODO: do something return 0; } } private Integer getStockFallback(Long productId) { return -1; } } @Component public class StockFallback implements StockService { @Override public Integer getStock(Long productId) { return -1; } }
製品サービスの呼び出し時にエラーが発生すると、在庫サービスはコールバック メソッド getStockFallback を呼び出してエラー応答を取得することがわかります。
5. サービスの追跡
マイクロサービス アーキテクチャでは、システム内の各サービスの動作とパフォーマンスを理解するのに役立つ優れた追跡ツールが必要です。 Zipkin は、この機能を簡単に実現できる分散追跡システムです。
6. サービスのデプロイメント
サービスのデプロイメントは、システム開発の最後のステップです。マイクロサービス アーキテクチャ内の各サービスは独立しているため、サービスのデプロイが非常に簡単になります。非常に人気のあるコンテナ化ツールである Docker は、サービス展開のための高速で信頼性の高いソリューションを提供します。
結論
マイクロサービス アーキテクチャは、ますます多くの企業にとって最初の選択肢となりつつあります。マイクロサービス アーキテクチャを実装するには信頼できるツールが必要ですが、Spring Cloud はそのようなツールです。サービスの登録、サービスのルーティング、サービスの負荷分散、サービスのフォールト トレランス、サービスの追跡、サービスのデプロイメントなど、マイクロサービス アーキテクチャに必要なすべての問題をワンストップで解決します。したがって、Spring Cloud を利用してアプリケーションをより効率的に実行できます。
以上がSpring Cloud 統合マイクロサービス アーキテクチャの設計と実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。