《spring cloud 微服務實戰》 學習筆記負載均衡在系統架構中是乙個非常重要,並且不得不去實施的內容。
因為負載均衡是對系統的高可用、網路壓力的環節和處理能力擴容的重要手段之一。
我們通常說的負載均衡指的是服務端負載均衡
.其中可以分為硬體負載均衡和軟體負載均衡
無論是硬體負載均衡還是軟體負載均衡,都能用如下的架構圖來構建起來:
硬體負載均衡的裝置或者軟體負載均衡的模組都會維護乙個可用的服務端清單
,通過心跳監測來剔除故障的節點,以保證清單中都是可以正常訪問的節點。
當客戶端傳送請求到負載均衡裝置時,該裝置通過某種演算法(比如線性輪詢,按權重負載,按流量負載等)從維護的可用服務清單中選擇乙個伺服器,然後**請求至該伺服器。
客戶端負載均衡與服務端負載均衡最大的不同是,上述提到的服務清單所儲存的位置。
在客戶端負載均衡中,所有的客戶端節點都要維護乙份自己要訪問的服務端清單
,這些清單來自於服務註冊中心。同服務端負載均衡類似,客戶端負載均衡也需要心跳去維護服務清單的健康性,這個步驟需要與服務註冊中心配合完成。
在spring cloud實現的服務治理框架中,缺省會建立針對各個服務治理框架的ribbon自動化整合配置。比如
通過springcloud ribbon的封裝,在微服務啟用客戶端負載均衡只需要如下兩步:
服務提供者啟動多個例項到服務註冊中心(or服務註冊中心集群)
服務消費者通過帶有@loadbalance
註解修飾過的resttemplate
來實現對介面的呼叫.
搭建高可用註冊中心,s42,s43
註冊中心1-s42
eureka
:instance
:hostname
: s42
client
:#是否向註冊中心註冊自己
register-with-eureka
:false
#是否從註冊中心查詢服務
註冊中心2-s43
eureka
:instance
:hostname
: s43
client
:register-with-eureka
:false
fetch-registry
:false
service-url
:## 向s42註冊
部署eureka-echo-service
服務配置如下
配置
#### name 不能帶有 下劃線
name
: eureka-echo-service
echocontroller
@restcontroller
public
class
echocontroller")
private
int port;
("/hi"
)public string hi
(string msg)
}
2個服務例項部署兩個例項:
配置
配置resttemplate
@bean
//加上 @loadbalanced 註解
@loadbalanced
public resttemplate resttemplate
(resttemplatebuilder builder)
新增callremotecontroller
@restcontroller
public
class
callremotecontroller";
("/call"
)public string call
(string msg)
}
多次請求http://localhost:8080/test/call?msg=123
,後台列印日誌:
客戶端按照某種負載均衡策略
,交替的訪問服務提供者的不同例項。
resttemplate不是spring自身提供的http連線工具嗎?跟ribbon的客戶端負載均衡有和關係呢?resttemplate詳解ribbon是如何把
http://service-name/***
請求中的service-name
轉化為具體的hostname:port
的?
ribbon原始碼解析
ribbon客戶端負載均衡
ribbon會儲存註冊中心應用,然後定時去更新,而不是每次都要先訪問註冊中心,再訪問應用 依賴org.springframework.cloud spring cloud starter netflix ribbon 複製 配置resttemplate bean是乙個方法級別上的註解,主要用在 co...
客戶端負載均衡 Ribbon
1.集群user server c v 改東西 user server pom.xml user server 3001artifactid user server 3001name parent pm.xml user server 3001module eureka client service...
ribbon客戶端負載均衡
參考 ribbon是netflix發布的負載均衡器,它有助於控制http和tcp的客戶端的行為。為ribbon配置服務提供者位址後,ribbon就可基於某種負載均衡演算法,自動地幫助服務消費者去請求。ribbon預設為我們提供了很多負載均衡演算法,例如輪詢 隨機等。當然,我們也可為ribbon實現自...