Spring Cloud實戰(三)-Spring Cloud Netflix Ribbon

概要

  • 什麼是Spring Cloud Netflix Ribbon?html

  • 實戰:整合Ribbon實現負載均衡git

Spring Cloud Netflix Ribbon是什麼?

Spring Cloud Netflix Ribbon 是一個客戶端負載均衡的組件.github

什麼是負載均衡?
負載均衡就是分發請求流量到不一樣的服務器,目前的實現有軟件(ngnix,apache,HA Proxy)和硬件(F5,NSX,BigIP).算法

  • 負載均衡分爲兩種:spring

    • 服務器端負載均衡
      服務器端負載均衡示意圖apache

    如上圖所示.服務器端負載均衡是對客戶透明的,用戶請求到LB服務器,真正的Application服務器是由LB服務器分發控制的.服務器

    • 客戶端負載均衡
      圖片描述app

    如圖所示,它是客戶端軟件的一部分,客戶端獲知到可用的服務器列表按必定的均衡策略,分發請求.負載均衡

Ribbon的特色
Ribbon就是這樣一種客戶端負載均衡的實現.dom

  • 和Eureka完美整合

  • 支持多種協議-HTTP,TCP,UDP

  • caching/batching

  • built in failure resiliency

實戰:整合Ribbon實現負載均衡

目標:基於以前的例子,在sentence app中添加Ribbon負載均衡,啓動兩個noun app,使用不一樣的words數據,以驗證Ribbon的效果.具體步驟以下:

  1. sentence服務添加依賴 spring-cloud-starter-ribbon (pom.xml)

  2. 替換DiscoveryClient爲LoadBalancerClient及其使用的方法(getWord)

public String getWord(String service) {
        ServiceInstance instance = loadBalancer.choose(service);
           return (new RestTemplate()).getForObject(instance.getUri(),String.class);
    }
  1. 查看http://localhost:8020/sentence,看其是否能正常啓動

  2. 停掉量詞服務,爲了Eureka能夠區分兩個相同host的相同服務,在bootstramp.yml中添加實例號.

    # Allow Eureka to recognize two apps of the same type on the same host as separate instances:
       eureka:
         instance:
           instanceId: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${random.value}}

5.先啓動一個noun服務,再把noun服務中的words換爲英文

String words = 「picture,movie,building,aninmal」;

6.查看http://localhost:8010,看其造句是否會一次中文一次英文(默認ribbon是輪訓算法)
7.停掉其中一個noun服務,看其是否會一次成功一次失敗

特別感謝 kennyk65
Spring Cloud 中文用戶組 31777218
Spring-Cloud-Config 官方文檔-中文譯本 (本人有參與,哈哈)
Spring Cloud Netflix 官網文檔-中文譯本
本文實例github地址

相關文章
相關標籤/搜索