一些基本概念
- 服務(wù)提供方provider
- 服務(wù)調(diào)用方consumer
以下1,2,3,4都是provider出現(xiàn)問題,consumer的應(yīng)對(duì)對(duì)策
1.超時(shí)
WHY:如果provider要10s才響應(yīng),那么consumer也要等10s才響應(yīng),這種情況多的話consumer性能會(huì)降低。
HOW:對(duì)consumer設(shè)置時(shí)間閾值,超過consumer就不等待了
TO:保護(hù)服務(wù),使consumer保持原來的性能。
2.重試
WHY:有時(shí)候provid只是偶爾抖動(dòng),如果這時(shí)候超時(shí)后直接放棄,就會(huì)導(dǎo)致請(qǐng)求錯(cuò)誤,帶來業(yè)務(wù)損失
HOW:在超時(shí)后重試一下,重試如果能夠正常返回,這次請(qǐng)求就被挽救。
可以考慮切換一臺(tái)機(jī)器專門用來重試,減輕原來機(jī)器的負(fù)擔(dān)。
3.冪等
When:如果允許consumer重試,那provider就要做到冪等
WHAT:同一個(gè)請(qǐng)求被consumer多次調(diào)用,對(duì)provider產(chǎn)生的影響(寫入等)是一致的
4.熔斷
When:使用于一個(gè)不那么重要的服務(wù),不想因?yàn)樗捻憫?yīng)時(shí)間過長(zhǎng)導(dǎo)致影響consumer的核心服務(wù)的響應(yīng)時(shí)間過長(zhǎng)
HOW:如果檢查出來頻繁超時(shí),就把consumer調(diào)用provider的請(qǐng)求直接短路掉,不實(shí)際調(diào)用,而是直接返回一個(gè)值,等provider服務(wù)恢復(fù)穩(wěn)定后再恢復(fù)調(diào)用。
以下5是consumer出現(xiàn)問題,provider的應(yīng)對(duì)對(duì)策
5.限流
WHY:一個(gè)provider對(duì)多個(gè)consumer提供服務(wù),其中一個(gè)consumer流量飆升,占據(jù)了provider的大部分機(jī)器時(shí)間,導(dǎo)致其他更重要的consumer不能正常服務(wù)。
HOW:provider需要根據(jù)consumer的重要程度以及平時(shí)的QPS值,設(shè)置流量上限,超過限制等待或者直接拒絕。
5.1資源隔離
provider對(duì)consumer的流行進(jìn)行限制,防止被拖垮
consumer對(duì)調(diào)用provider的線程資源進(jìn)行隔離,確保調(diào)用某個(gè)provider服務(wù)不會(huì)耗光整個(gè)consumer資源
5.2服務(wù)降級(jí)
5.3 provider端
provider發(fā)現(xiàn)某個(gè)consumer流量激增,考慮降級(jí)服務(wù)
如:1.直接對(duì)consumer返回固定數(shù)據(jù); 2.需要實(shí)時(shí)寫入數(shù)據(jù)庫(kù)的,先寫入緩存隊(duì)列,再異步寫入數(shù)據(jù)庫(kù)
5.4 consumer端
consumer發(fā)現(xiàn)某個(gè)provider出現(xiàn)異常(如超時(shí),數(shù)據(jù)異常),可以降級(jí)provider的邏輯,如直接返回固定值
RPC學(xué)習(xí)筆記
1.RPC: Remote Procedure Call 遠(yuǎn)程過程調(diào)用
2.一個(gè)RPC架構(gòu)包含四個(gè)組件:
- 客戶端Client:服務(wù)的調(diào)用者
- 客戶端存根Client Stub:存放服務(wù)端地址信息,將客戶端的請(qǐng)求參數(shù)打包成網(wǎng)絡(luò)消息,通過網(wǎng)絡(luò)發(fā)送給服務(wù)方
- 服務(wù)端Server:服務(wù)的發(fā)布者
- 服務(wù)端存根Server Stub:接受客戶端發(fā)送過來的消息并解包,再調(diào)用本地方法
3.RPC框架需要考慮解決如下問題:
- 服務(wù)端提供的服務(wù)如何發(fā)布,客戶端如何發(fā)現(xiàn)服務(wù)
- 如何對(duì)請(qǐng)求對(duì)象和返回結(jié)果進(jìn)行序列化和反序列化
- 如何更高效進(jìn)行網(wǎng)絡(luò)通信
4.RPC的最重要任務(wù)
解耦服務(wù),將客戶端和服務(wù)端解耦,提高代碼的可移植性。
5.服務(wù)端和客戶端之間怎么調(diào)用?
通過網(wǎng)絡(luò)協(xié)議傳輸,網(wǎng)絡(luò)協(xié)議都是二進(jìn)制的,因此內(nèi)存中的參數(shù)值要序列化成二進(jìn)制的形式,通過尋址和傳輸發(fā)送到另一方
6.RPC服務(wù)和HTTP服務(wù)的區(qū)別
// 有待學(xué)習(xí)
負(fù)載均衡筆記
不患寡而患不均
1.負(fù)載均衡:Load Balance(LB)
將一個(gè)服務(wù)分布到不同的服務(wù)器(節(jié)點(diǎn))或網(wǎng)絡(luò)設(shè)備上,讓所有節(jié)點(diǎn)提供最低價(jià)格,最高服務(wù)。(既不要過載,也要最大程度發(fā)揮作用)
2.四層負(fù)載均衡
在傳輸層,主要工作是轉(zhuǎn)發(fā),通過報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
3.七層負(fù)載均衡
在應(yīng)用層,主要工作是代理,通過報(bào)文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
4.負(fù)載均衡算法
| 1、 隨機(jī)算法 | 按權(quán)重設(shè)置隨機(jī)概率,調(diào)用量越大分布越均勻 |
|---|---|
| 2、輪詢及加權(quán)輪詢 | 適用于各服務(wù)器的處理能力相同時(shí),且每筆業(yè)務(wù)處理量差異不大時(shí)。 |
| 3、最小連接及加權(quán)最小連接 | 在多個(gè)服務(wù)器中,與處理連接數(shù)最少的服務(wù)器進(jìn)行通信。 |
| 4、哈希算法 | 根據(jù)客戶端IP或請(qǐng)求key計(jì)算hash值并取模,優(yōu)點(diǎn)是同一個(gè)請(qǐng)求能分布到同一個(gè)節(jié)點(diǎn) |
| 5、IP地址散列 | 管理發(fā)送方IP和目的地IP地址的三列,將來自同一發(fā)送方的分組統(tǒng)一轉(zhuǎn)發(fā)到相同服務(wù)器。 |
| 6、URL散列 | 通過管理客戶端請(qǐng)求URL信息的散列,將發(fā)送至相同URL的請(qǐng)求轉(zhuǎn)發(fā)至同一服務(wù)器的算法。 |