SpringCloud無(wú)廢話入門(mén)02:Ribbon負(fù)載均衡

1.白話負(fù)載均衡

? ? ? ??在上一篇的介紹中司倚,我們創(chuàng)建了兩個(gè)一模一樣的服務(wù)提供者:Provider1和Provider2枫疆,然后它們提供的服務(wù)也一模一樣馍惹,都叫Hello-Service燎猛。為什么一樣的服務(wù)我們要部署兩遍曹抬?其實(shí)理由很簡(jiǎn)單:

? ? ? ??比如溉瓶,在一個(gè)電商網(wǎng)站中,一開(kāi)始的時(shí)候谤民,用戶并沒(méi)有那么多堰酿,我們只需要把網(wǎng)站部署在一臺(tái)服務(wù)器上就可以了。但是隨著用戶量越來(lái)越大张足,一臺(tái)服務(wù)器就再也滿足不了要求了触创,這樣,我們就需要把這個(gè)一模一樣的網(wǎng)站部署在多臺(tái)服務(wù)器上为牍,但是對(duì)外它們提供的服務(wù)卻都是一樣的哼绑,包括域名(或者說(shuō)IP地址)也必須是唯一的顺饮。

? ? ? ??所以,上一篇中的兩個(gè)provider凌那,在實(shí)際生產(chǎn)環(huán)境中兼雄,甚至是同一個(gè)項(xiàng)目的復(fù)制而已,僅僅只是改了配置文件帽蝶。在我們的介紹中赦肋,我們只是為了介紹方便,或者說(shuō)便于調(diào)試励稳,才創(chuàng)建了兩個(gè)項(xiàng)目佃乘。當(dāng)然,里面的服務(wù)和代碼都是一模一樣的驹尼。

? ? ? ??以上趣避,如果用白話來(lái)講就是:將相同的服務(wù)部署在多臺(tái)服務(wù)器上,對(duì)外又只暴露一個(gè)唯一的地址新翎,這種實(shí)現(xiàn)就叫做:負(fù)載均衡程帕。

? ? ? ??如果一定要畫(huà)一個(gè)圖來(lái)表示,那么它大致長(zhǎng)這樣地啰,

2.Ribbon

? ? ? ??那我們?cè)趺窗沿?fù)載均衡引入到我們的軟件架構(gòu)中呢愁拭?一種當(dāng)時(shí)是自己寫(xiě)代碼實(shí)現(xiàn)。另一種當(dāng)然是利用前人已經(jīng)寫(xiě)好的框架了亏吝。Ribbon就是這樣一個(gè)框架岭埠。

? ? ? ??Ribbon是Netflix發(fā)布的開(kāi)源項(xiàng)目,主要功能就是提供客戶端的軟件負(fù)載均衡算法蔚鸥,將其它服務(wù)提供者連接在一起惜论。Ribbon通過(guò)在配置文件中列出Load Balancer(簡(jiǎn)稱(chēng)LB)后面所有的服務(wù)提供者,然后幫助我們基于某種規(guī)則(如簡(jiǎn)單輪詢止喷,隨即連接等)去連接這些機(jī)器馆类。

3.Ribbon負(fù)載均衡實(shí)現(xiàn)

? ? ? ??要讓ribbon實(shí)現(xiàn)負(fù)載均衡,首先就需要將ribbon本身當(dāng)成一個(gè)服務(wù)引入到eureka中启盛。

? ? ? ??創(chuàng)建一個(gè)web的子模塊蹦掐,如下:

? ? ? ??它跟其它的項(xiàng)目,從類(lèi)型上來(lái)說(shuō)沒(méi)什么區(qū)別僵闯。

? ? ? ??Pom:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

? ? ? ? ?xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

? ? <parent>

? ? ? ? <artifactId>springcloud.parent</artifactId>

? ? ? ? <groupId>com.zuikc</groupId>

? ? ? ? <version>1.0-SNAPSHOT</version>

? ? </parent>

? ? <modelVersion>4.0.0</modelVersion>

? ? <packaging>war</packaging>

? ? <name>ribbon</name>

? ? <artifactId>ribbon</artifactId>

? ? <dependencyManagement>

? ? ? ? <dependencies>

? ? ? ? ? ? <dependency>

? ? ? ? ? ? ? ? <groupId>org.springframework.cloud</groupId>

? ? ? ? ? ? ? ? <artifactId>spring-cloud-dependencies</artifactId>

? ? ? ? ? ? ? ? <version>Greenwich.RELEASE</version>

? ? ? ? ? ? ? ? <type>pom</type>

? ? ? ? ? ? ? ? <scope>import</scope>

? ? ? ? ? ? </dependency>

? ? ? ? </dependencies>

? ? </dependencyManagement>

? ? <dependencies>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter</artifactId>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.cloud</groupId>

? ? ? ? ? ? <artifactId>spring-cloud-starter-eureka</artifactId>

? ? ? ? ? ? <version>1.4.6.RELEASE</version>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-test</artifactId>

? ? ? ? ? ? <scope>test</scope>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>

? ? ? ? </dependency>

? ? </dependencies>

</project>

? ? ? ??application.yml,

server:

? port: 9291

spring:

? application:

? ? name: Ribbon-Consumer

eureka:

? client:

? ? service-url:

? ? ? defaultZone: http://localhost:9091/eureka/

providers:

? ribbon:

? ? listOfServers: http://localhost:9191/eureka,http://localhost:9192/eureka

? ? ? ??可以看到藤滥,在這個(gè)配置文件中鳖粟,我們干了兩件事情,

? ? ? ??1:將自己注冊(cè)都eureka中拙绊;

? ? ? ??2:在listOfServers中向图,將要負(fù)載的兩個(gè)服務(wù)地址配置出來(lái)泳秀;

? ? ? ??現(xiàn)在,讓我們創(chuàng)建ServiceRibbonApplication榄攀,

package com.zuikc;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;

import org.springframework.context.annotation.Bean;

import org.springframework.web.client.RestTemplate;

/**

?* @ClassName ServiceRibbonApplication

?* @Description 我們提供咨詢和培訓(xùn)服務(wù)嗜傅,關(guān)于本文有任何困惑,請(qǐng)關(guān)注并聯(lián)系“碼農(nóng)星球”

?* @Author 碼農(nóng)星球

?**/

@SpringBootApplication

@EnableDiscoveryClient

public class ServiceRibbonApplication {

? ? public static void main(String[] args) {

? ? ? ? SpringApplication.run(ServiceRibbonApplication.class, args);

? ? }

? ? @Bean

? ? @LoadBalanced

? ? RestTemplate restTemplate() {

? ? ? ? return new RestTemplate();

? ? }

}

? ? ? ??所有代碼都跟其它的provider一樣檩赢,唯獨(dú)多了一個(gè)bean的配置吕嘀。我們先不說(shuō)這個(gè)RestTemplate是什么,我們先看我們的HelloService贞瞒,

package com.zuikc;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;

/**

?* @ClassName HelloService

?* @Description 我們提供咨詢和培訓(xùn)服務(wù)偶房,關(guān)于本文有任何困惑,請(qǐng)關(guān)注并聯(lián)系“碼農(nóng)星球”

?* @Author 碼農(nóng)星球

?**/

@RestController

public class HelloService {

? ? @Autowired RestTemplate restTemplate;

? ? @RequestMapping(value = "/hello")

? ? public String getHelloContent() {

? ? ? ? return restTemplate.getForObject("http://hello-service/hello",String.class);

? ? }

}

? ? ? ??在這個(gè)HelloService中军浆,我們要完成一件事情棕洋,就是將http://localhost:9291/hello的請(qǐng)求,隨機(jī)分發(fā)到兩個(gè)provider乒融。而這個(gè)分發(fā)掰盘,在代碼層面就是通過(guò)RestTemplate去實(shí)現(xiàn)的。

? ? ? ??注意這個(gè)getForObject的方法中的第一個(gè)參數(shù)是個(gè)url赞季,這個(gè)url中的hello-service就是我們配置正在eureka中的服務(wù)名忘伞。

? ? ? ??現(xiàn)在,讓我們啟動(dòng)這個(gè)ribbon application钮追,首先可以看到eureka中有個(gè)這個(gè)ribbon服務(wù)痹升,

? ? ? ??其次,讓我們打開(kāi)地址:http://localhost:9291/hello典蜕,就可以看到ribbon的這個(gè)服務(wù)断盛,是在provider1和provider2中不停的切換了~~

? ? ? ??感謝關(guān)注“碼農(nóng)星球”。本文版權(quán)屬于“碼農(nóng)星球”愉舔。我們提供咨詢和培訓(xùn)服務(wù)钢猛,關(guān)于本文有任何困惑,請(qǐng)關(guān)注并聯(lián)系我們轩缤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末命迈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子火的,更是在濱河造成了極大的恐慌壶愤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馏鹤,死亡現(xiàn)場(chǎng)離奇詭異征椒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)湃累,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)勃救,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碍讨,“玉大人,你說(shuō)我怎么就攤上這事蒙秒〔颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵晕讲,是天一觀的道長(zhǎng)覆获。 經(jīng)常有香客問(wèn)我,道長(zhǎng)益兄,這世上最難降的妖魔是什么锻梳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮净捅,結(jié)果婚禮上疑枯,老公的妹妹穿的比我還像新娘。我一直安慰自己蛔六,他們只是感情好荆永,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著国章,像睡著了一般具钥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上液兽,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天骂删,我揣著相機(jī)與錄音,去河邊找鬼四啰。 笑死宁玫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柑晒。 我是一名探鬼主播欧瘪,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匙赞!你這毒婦竟也來(lái)了佛掖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涌庭,失蹤者是張志新(化名)和其女友劉穎芥被,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體脾猛,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撕彤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猛拴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羹铅。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愉昆,靈堂內(nèi)的尸體忽然破棺而出职员,到底是詐尸還是另有隱情,我是刑警寧澤跛溉,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布焊切,位于F島的核電站,受9級(jí)特大地震影響芳室,放射性物質(zhì)發(fā)生泄漏专肪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一堪侯、第九天 我趴在偏房一處隱蔽的房頂上張望嚎尤。 院中可真熱鬧,春花似錦伍宦、人聲如沸芽死。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)关贵。三九已至,卻和暖如春卖毁,著一層夾襖步出監(jiān)牢的瞬間揖曾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工亥啦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炭剪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓禁悠,卻偏偏與公主長(zhǎng)得像念祭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碍侦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容