網(wǎng)站只有一個(gè)首頁(yè)單頁(yè)面怎么做排名域名官網(wǎng)
1. 微服務(wù)的注冊(cè)中?
注冊(cè)中?可以說(shuō)是微服務(wù)架構(gòu)中的”通訊錄“ ,它記錄了服務(wù)和服務(wù)地址的映射關(guān)系。在分布式架構(gòu)中, 服務(wù)會(huì)注冊(cè)到這?,當(dāng)服務(wù)需要調(diào)?其它服務(wù)時(shí),就這?找到服務(wù)的地址,進(jìn)?調(diào)?。
1.1 注冊(cè)中?的主要作?
服務(wù)注冊(cè)中?(下稱(chēng)注冊(cè)中?)是微服務(wù)架構(gòu)?常重要的?個(gè)組件,在微服務(wù)架構(gòu)?主要起到了協(xié)調(diào)者 的?個(gè)作?。注冊(cè)中??般包含如下?個(gè)功能:
1. 服務(wù)發(fā)現(xiàn):
- 服務(wù)注冊(cè)/反注冊(cè):保存服務(wù)提供者和服務(wù)調(diào)?者的信息
- 服務(wù)訂閱/取消訂閱:服務(wù)調(diào)?者訂閱服務(wù)提供者的信息,最好有實(shí)時(shí)推送的功能
- 服務(wù)路由(可選):具有篩選整合服務(wù)提供者的能?。
2. 服務(wù)配置:
- 配置訂閱:服務(wù)提供者和服務(wù)調(diào)?者訂閱微服務(wù)相關(guān)的配置
- 配置下發(fā):主動(dòng)將配置推送給服務(wù)提供者和服務(wù)調(diào)?者
3. 服務(wù)健康檢測(cè)
- 檢測(cè)服務(wù)提供者的健康情況
1.2 常?的注冊(cè)中?
Zookeeper
zookeeper它是?個(gè)分布式服務(wù)框架,是Apache Hadoop 的?個(gè)?項(xiàng)?,它主要是?來(lái)解決分布式應(yīng) ?中經(jīng)常遇到的?些數(shù)據(jù)管理問(wèn)題,如:統(tǒng)?命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)?配置項(xiàng) 的管理等。簡(jiǎn)單來(lái)說(shuō)zookeeper=?件系統(tǒng)+監(jiān)聽(tīng)通知機(jī)制。
Eureka
Eureka是在Java語(yǔ)?上,基于Restful Api開(kāi)發(fā)的服務(wù)注冊(cè)與發(fā)現(xiàn)組件,Springcloud Net?ix中的重要組 件
Consul
Consul是由HashiCorp基于Go語(yǔ)?開(kāi)發(fā)的?持多數(shù)據(jù)中?分布式?可?的服務(wù)發(fā)布和注冊(cè)服務(wù)軟件, 采?Raft算法保證服務(wù)的?致性,且?持健康檢查。
Nacos
Nacos是?個(gè)更易于構(gòu)建云原?應(yīng)?的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。簡(jiǎn)單來(lái)說(shuō) Nacos 就是 注冊(cè)中? + 配置中?的組合,提供簡(jiǎn)單易?的特性集,幫助我們解決微服務(wù)開(kāi)發(fā)必會(huì)涉及到的服務(wù)注冊(cè) 與發(fā)現(xiàn),服務(wù)配置,服務(wù)管理等問(wèn)題。 Nacos 還是 Spring Cloud Alibaba 組件之?,負(fù)責(zé)服務(wù)注冊(cè)與發(fā)現(xiàn)。
組件名 | 語(yǔ)? | CAP | |||
Eureka | Java | AP | |||
Consul | Go | CP | |||
Zookeeper | Java | CP | |||
Nacos | Java | AP |
Eureka閉源影響
在Euraka的GitHub上,宣布Eureka 2.x閉源。近這意味著如果開(kāi)發(fā)者繼續(xù)使?作為 2.x 分?上現(xiàn)有?作
repo ?部分發(fā)布的代碼庫(kù)和?件,則將?負(fù)?險(xiǎn)。Nacos替換?案
2. nacos簡(jiǎn)介
Nacos 致?于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了?組簡(jiǎn)單易?的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。 nacos的作?就是?個(gè)注冊(cè)中?,?來(lái)管理注冊(cè)上來(lái)的各個(gè)微服務(wù)
2.1 nacos實(shí)戰(zhàn)??
我們就在現(xiàn)有的環(huán)境中加?nacos,并將我們的兩個(gè)微服務(wù)注冊(cè)上去。
2.2.1 搭建nacos環(huán)境
第1步: 安裝nacos
下載地址: https://github.com/alibaba/nac
os/releases
下載zip格式的安裝包,然后進(jìn)?解壓縮操作
第2步: 啟動(dòng)nacos
#切換?錄
cd nacos/bin
#命令啟動(dòng)
startup.cmd -m standalone
或者直接雙擊startup.cmd運(yùn)?
第3步: 訪問(wèn)nacos
打開(kāi)瀏覽器輸?http://localhost:8848/nacos,即可訪問(wèn)服務(wù), 默認(rèn)密碼是nacos/nacos
2.2.2 將商品微服務(wù)注冊(cè)到nacos
開(kāi)始修改 shop-product 模塊的代碼, 將其注冊(cè)到nacos服務(wù)上
1 在pom.xml中添加nacos的依賴(lài)
2 在主類(lèi)上添加@EnableDiscoveryClient注解
3 在application.yml中添加nacos服務(wù)的地址
4 啟動(dòng)服務(wù), 觀察nacos的控制?板中是否有注冊(cè)上來(lái)的商品微服務(wù)
2.2.3 將訂單微服務(wù)注冊(cè)到nacos
開(kāi)始修改 shop_order 模塊的代碼, 將其注冊(cè)到nacos服務(wù)上
1 在pom.xml中添加nacos的依賴(lài)
2 在主類(lèi)上添加@EnableDiscoveryClient注解
3 在application.yml中添加nacos服務(wù)的地址
4 啟動(dòng)服務(wù), 觀察nacos的控制?板中是否有注冊(cè)上來(lái)的訂單微服務(wù)
5 修改OrderController, 借助DiscoveryClient實(shí)現(xiàn)微服務(wù)調(diào)?
3.服務(wù)調(diào)?Ribbon??
經(jīng)過(guò)以上的學(xué)習(xí),已經(jīng)實(shí)現(xiàn)了服務(wù)的注冊(cè)和服務(wù)發(fā)現(xiàn)。當(dāng)啟動(dòng)某個(gè)服務(wù)的時(shí)候,可以通過(guò)HTTP的形式 將信息注冊(cè)到注冊(cè)中?,并且可以通過(guò)SpringCloud提供的?具獲取注冊(cè)中?的服務(wù)列表。但是服務(wù)之間
的調(diào)?還存在很多的問(wèn)題,如何更加?便的調(diào)?微服務(wù),多個(gè)微服務(wù)的提供者如何選擇,如何負(fù)載均衡等。
3.1 Ribbon概述3.1.1 什么是Ribbon
是 Net?ixfa 發(fā)布的?個(gè)負(fù)載均衡器,有助于控制 HTTP 和 TCP客戶(hù)端?為。在 SpringCloud 中,
Nacos?般配合Ribbon進(jìn)?使?,Ribbon提供了客戶(hù)端負(fù)載均衡的功能,Ribbon利?從Nacos中讀取到的服務(wù)信息,在調(diào)?服務(wù)節(jié)點(diǎn)提供的服務(wù)時(shí),會(huì)合理的進(jìn)?負(fù)載。
在SpringCloud中可以將注冊(cè)中?和Ribbon配合使?,Ribbon?動(dòng)的從注冊(cè)中?中獲取服務(wù)提供者的列表信息,并基于內(nèi)置的負(fù)載均衡算法,請(qǐng)求服務(wù)
3.1.2 Ribbon的主要作?
( 1)服務(wù)調(diào)?
基于Ribbon實(shí)現(xiàn)服務(wù)調(diào)?, 是通過(guò)拉取到的所有服務(wù)列表組成(服務(wù)名-請(qǐng)求路徑的)映射關(guān)系。借助RestTemplate 最終進(jìn)?調(diào)?
( 2)負(fù)載均衡
當(dāng)有多個(gè)服務(wù)提供者時(shí),Ribbon可以根據(jù)負(fù)載均衡的算法?動(dòng)的選擇需要調(diào)?的服務(wù)地址
3.2 基于Ribbon實(shí)現(xiàn)訂單調(diào)?商品服務(wù)3.2.1 坐標(biāo)依賴(lài)
在springcloud提供的服務(wù)發(fā)現(xiàn)的jar中以及包含了Ribbon的依賴(lài)。所以這?不需要導(dǎo)?任何額外的坐標(biāo)
3.2.2 ?程改造
( 1 )服務(wù)提供者
控制臺(tái)打印查詢(xún)商品的信息
( 2 )服務(wù)消費(fèi)者
在創(chuàng)建RestTemplate?法 上添加 @LoadBalanced 注解
通過(guò)服務(wù)名稱(chēng)消費(fèi)使?
restTemplate .getForObject("http://商品服務(wù)名稱(chēng)/product/1" , Product.class);
4.服務(wù)調(diào)?Ribbon?級(jí)
4.1 負(fù)載均衡概述
4.1.1 什么是負(fù)載均衡
在搭建?站時(shí),如果單節(jié)點(diǎn)的 web服務(wù)性能和可靠性都?法達(dá)到要求;或者是在使?外?服務(wù)時(shí),經(jīng)常擔(dān)?被?攻破,?不??就會(huì)有打開(kāi)外?端?的情況,通常這個(gè)時(shí)候加?負(fù)載均衡就能有效解決服務(wù)問(wèn)題。
負(fù)載均衡是?種基礎(chǔ)的?絡(luò)服務(wù),其原理是通過(guò)運(yùn)?在前?的負(fù)載均衡服務(wù),按照指定的負(fù)載均衡算法,將流量分配到后端服務(wù)集群上,從?為系統(tǒng)提供并?擴(kuò)展的能?。
負(fù)載均衡的應(yīng)?場(chǎng)景包括流量包、轉(zhuǎn)發(fā)規(guī)則以及后端服務(wù),由于該服務(wù)有內(nèi)外?個(gè)例、健康檢查等功能,能夠有效提供系統(tǒng)的安全性和可?性。
4.1.2 客戶(hù)端負(fù)載均衡與服務(wù)端負(fù)載均衡
服務(wù)端負(fù)載均衡
先發(fā)送請(qǐng)求到負(fù)載均衡服務(wù)器或者軟件,然后通過(guò)負(fù)載均衡算法,在多個(gè)服務(wù)器之間選擇?個(gè)進(jìn)?訪問(wèn);即在服務(wù)器端再進(jìn)?負(fù)載均衡算法分配
客戶(hù)端負(fù)載均衡
客戶(hù)端會(huì)有?個(gè)服務(wù)器地址列表,在發(fā)送請(qǐng)求前通過(guò)負(fù)載均衡算法選擇?個(gè)服務(wù)器,然后進(jìn)?訪問(wèn),這是客戶(hù)端負(fù)載均衡;即在客戶(hù)端就進(jìn)?負(fù)載均衡算法分配
4.2 基于Ribbon實(shí)現(xiàn)負(fù)載均衡
4.2.1 搭建多服務(wù)實(shí)例
通過(guò)idea再啟動(dòng)?個(gè) shop-product 微服務(wù),設(shè)置其端?為8082
分別啟動(dòng)兩次服務(wù)器驗(yàn)證效果,并查看兩個(gè)控制臺(tái)發(fā)現(xiàn)已輪詢(xún)的?式調(diào)?了商品服務(wù)
4.2.2 負(fù)載均衡策略
Ribbon內(nèi)置了多種負(fù)載均衡策略,內(nèi)部負(fù)責(zé)復(fù)雜均衡的頂級(jí)接?為 com.netflix.loadbalancer.IRule ,實(shí)現(xiàn)?式如下
- com.netflix.loadbalancer.RoundRobinRule :以輪詢(xún)的?式進(jìn)?負(fù)載均衡
- com.netflix.loadbalancer.RandomRule :隨機(jī)策略
- com.netflix.loadbalancer.RetryRule :重試策略
- com.netflix.loadbalancer.WeightedResponseTimeRule :權(quán)重策略。會(huì)計(jì)算每個(gè)服務(wù)的權(quán)重,越?的被調(diào)?的可能性越?
- com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍歷所有的服務(wù)實(shí)例,過(guò)濾掉故障實(shí)
- 例,并返回請(qǐng)求數(shù)最?的實(shí)例返回
- com.netflix.loadbalancer.AvailabilityFilteringRule :可?過(guò)濾策略。過(guò)濾掉故障和請(qǐng) 求數(shù)超過(guò)閾值的服務(wù)實(shí)例,再?gòu)氖O碌膶?shí)?中輪詢(xún)調(diào)?
- ZoneAvoidanceRule:以區(qū)域可?的服務(wù)器為基礎(chǔ)進(jìn)?服務(wù)器的選擇。使?Zone對(duì)服務(wù)器進(jìn)?分類(lèi),這個(gè)Zone可以理解為?個(gè)機(jī)房、?個(gè)機(jī)架等。?后再對(duì)Zone內(nèi)的多個(gè)服務(wù)做輪詢(xún)
?定義負(fù)載均衡策略
?式1:定義?個(gè)新的IRule:(全局設(shè)置)
?式2:在yml配置?件中配置:(局部設(shè)置)
@Bean
public IRule randomRule(){return new RandomRule();
}