【全桟の道】マイクロサービスレッスン8_Ribbon初対面
概要 nginx:サーバ側負荷分散 ribbon:クライアント負荷分散 RibbonはNetflixが発表した負荷イコライザで、HTTPとTCPクライアントの動作を制御するのに役立ちます.Ribbonにサービスプロバイダのアドレスリストを構成するだけで、Ribbonは負荷等化アルゴリズムに基づいて要求するターゲットサービスアドレスを計算することができる. Ribbonのデフォルトでは、ポーリング、ランダム、応答時間の重み付けなど、多くの負荷等化アルゴリズムが提供されています.もちろん、Ribbonのカスタム負荷等化アルゴリズムも簡単です.Iruleインタフェースを実現するだけでいいです.
図解
RibbonがEurekaと連携して使用される場合、Ribbonは、自動的にEurekaサーバからサービスプロバイダのアドレスリストを取得し、負荷等化アルゴリズムに基づいてサービスプロバイダのインスタンスの1つを選択します.次の図は、RibbonとEurekaを組み合わせて使用する場合の概略アーキテクチャを示しています.
カスタマーサービス側の配置修正MovieApplication.java 呼び出し方式 を変更する.
ターゲットサービスが変更されましたhttp://shop-provider-user/users/Ribbonは、http://ターゲット・サービス名/{ターゲット・サービス・エンド・ポイント}の形式で、実際に呼び出されたときに、ターゲット・サービス名をそのサービスのIPとポートに自動的に置き換えます.
サービス側マルチポート起動
アクセスhttp://localhost:8010/movies/users/1 複数回、2つのuserサービスインスタンスがログを印刷していることがわかります.
図解
RibbonがEurekaと連携して使用される場合、Ribbonは、自動的にEurekaサーバからサービスプロバイダのアドレスリストを取得し、負荷等化アルゴリズムに基づいてサービスプロバイダのインスタンスの1つを選択します.次の図は、RibbonとEurekaを組み合わせて使用する場合の概略アーキテクチャを示しています.
カスタマーサービス側の配置
shop-consumer-movie
ターゲットサービスが変更されました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サービスインスタンスがログを印刷していることがわかります.