【全桟の道】マイクロサービスレッスン8_Ribbon初対面


概要
  • nginx:サーバ側負荷分散
  • ribbon:クライアント負荷分散
  • RibbonはNetflixが発表した負荷イコライザで、HTTPとTCPクライアントの動作を制御するのに役立ちます.Ribbonにサービスプロバイダのアドレスリストを構成するだけで、Ribbonは負荷等化アルゴリズムに基づいて要求するターゲットサービスアドレスを計算することができる.
  • Ribbonのデフォルトでは、ポーリング、ランダム、応答時間の重み付けなど、多くの負荷等化アルゴリズムが提供されています.もちろん、Ribbonのカスタム負荷等化アルゴリズムも簡単です.Iruleインタフェースを実現するだけでいいです.

  • 図解
    RibbonがEurekaと連携して使用される場合、Ribbonは、自動的にEurekaサーバからサービスプロバイダのアドレスリストを取得し、負荷等化アルゴリズムに基づいてサービスプロバイダのインスタンスの1つを選択します.次の図は、RibbonとEurekaを組み合わせて使用する場合の概略アーキテクチャを示しています.
    カスタマーサービス側の配置
        shop-consumer-movie    
  • 修正MovieApplication.java
  • 呼び出し方式
  • を変更する.
    ターゲットサービスが変更されましたhttp://shop-provider-user/users/Ribbonは、http://ターゲット・サービス名/{ターゲット・サービス・エンド・ポイント}の形式で、実際に呼び出されたときに、ターゲット・サービス名をそのサービスのIPとポートに自動的に置き換えます.
    @RequestMapping("/movies")
    @RestController
    public class MovieController {
      @Autowired
      private RestTemplate restTemplate;
    
      @GetMapping("/users/{id}")
      public User findById(@PathVariable Long id) {
        //      RestTemplate      
    //    User user = this.restTemplate.getForObject("http://localhost:8000/users/{id}", User.class, id);
        User user = this.restTemplate.getForObject("http://shop-provider-user/users/{id}", User.class, id);
        // ...        ...
        return user;
      }
    }

    サービス側マルチポート起動
    アクセスhttp://localhost:8010/movies/users/1 複数回、2つのuserサービスインスタンスがログを印刷していることがわかります.