Service Center源碼揭秘

內(nèi)容來(lái)源:2018年1月25日涤久,ServiceComb 開(kāi)發(fā)工程師崔毅華在“ServiceComb在線直播”進(jìn)行《Service Center源碼揭秘》演講分享。IT 大咖說(shuō)(WeChat_ID:itdakashuo)作為獨(dú)家視頻合作方赐劣,經(jīng)主辦方和講者審閱授權(quán)發(fā)布。

閱讀字?jǐn)?shù):2332?| 4分鐘閱讀

觀看嘉賓完整演講視頻及PPT闪幽,請(qǐng)點(diǎn)擊:http://t.cn/Eyfdkex

摘要

揭秘Service Center的架構(gòu)和設(shè)計(jì)細(xì)節(jié)击敌,在線閱讀分享Service Center代碼。

什么是服務(wù)注冊(cè)中心焕妙?

服務(wù)注冊(cè)中心具有服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)能力的可靠的分布式服務(wù)蒋伦。

為什么需要服務(wù)注冊(cè)中心?

是單體架構(gòu)向微服務(wù)服務(wù)化演進(jìn)的需要焚鹊。

以前的老式單體結(jié)構(gòu)非常臃腫痕届,部署在一個(gè)集群上,不夠靈活末患。在演進(jìn)的過(guò)程中研叫,架構(gòu)師分散地進(jìn)行了拆分,慢慢演進(jìn)成微服務(wù)的架構(gòu)阻塑。

單體架構(gòu)到微服務(wù)架構(gòu)的演進(jìn)中的確帶來(lái)了很多好處蓝撇,比如架構(gòu)業(yè)務(wù)實(shí)現(xiàn)了解耦,單一職責(zé)陈莽,而且每一個(gè)服務(wù)可以獨(dú)立運(yùn)行渤昌。在開(kāi)發(fā)運(yùn)維上成本也更低虽抄,迭代上線周期更短,解放了程序員的生產(chǎn)力独柑。

但同時(shí)也引入了新的問(wèn)題迈窟。比如業(yè)務(wù)間的通信發(fā)生了變化,需要遠(yuǎn)程通信調(diào)用忌栅。要解決通信上的問(wèn)題车酣,除了定制一個(gè)業(yè)務(wù)間通信的標(biāo)準(zhǔn)協(xié)議之外,還需要一個(gè)具有服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)能力的組件索绪,能夠保存業(yè)務(wù)進(jìn)程的一些實(shí)例信息湖员,還能提供查詢實(shí)例IP地址的標(biāo)準(zhǔn)接口給各個(gè)業(yè)務(wù)去使用。

服務(wù)注冊(cè)中心

服務(wù)端發(fā)現(xiàn)

DNS可以作為服務(wù)端發(fā)現(xiàn)的組件瑞驱,各個(gè)服務(wù)會(huì)把自己的服務(wù)名當(dāng)作域名娘摔,把自己的實(shí)例IP注冊(cè)到DNS當(dāng)中。DNS會(huì)根據(jù)每一次請(qǐng)求返回一個(gè)IP給服務(wù)消費(fèi)端唤反。

隨著業(yè)務(wù)規(guī)模變大凳寺,容器化的出現(xiàn)又使得微服務(wù)架構(gòu)重新出現(xiàn)。在這種情況下彤侍,DNS的問(wèn)題也慢慢突顯出來(lái)肠缨。首先,DNS的緩存刷新不及時(shí)盏阶。其次晒奕,為了減輕DNS的壓力,一般服務(wù)端在開(kāi)發(fā)過(guò)程中就會(huì)把域名解析的IP緩存到本地般哼,基本上沒(méi)有什么問(wèn)題的話不會(huì)訪問(wèn)DNS吴汪。DNS本身又缺少一個(gè)主動(dòng)通知的機(jī)制,無(wú)法通知消費(fèi)方刷新本地緩存蒸眠,時(shí)間一長(zhǎng)就會(huì)出現(xiàn)越來(lái)越多的實(shí)例不可用漾橙、IP找不到或者IP無(wú)法訪問(wèn)等情況,整個(gè)架構(gòu)都會(huì)非常不穩(wěn)定楞卡。另外還會(huì)有一個(gè)中心化的問(wèn)題霜运。DNS一旦出現(xiàn)故障,集中式的服務(wù)發(fā)現(xiàn)就會(huì)影響整個(gè)系統(tǒng)蒋腮。

DNS這個(gè)方案雖然可以臨時(shí)解決一些問(wèn)題淘捡,但是它最終還是不適合做服務(wù)注冊(cè)中心的。

客戶端發(fā)現(xiàn)

服務(wù)消費(fèi)端只需要關(guān)心和查詢訂閱自己依賴的一些業(yè)務(wù)服務(wù)實(shí)例表或IP列表池摧,自己在本地根據(jù)喜歡的路由策略進(jìn)行過(guò)濾和請(qǐng)求焦除。操作簡(jiǎn)單數(shù)量也很少,所以大部分開(kāi)源類似可以做服務(wù)注冊(cè)中心組件的都偏向于做客戶端發(fā)現(xiàn)作彤。

適合做服務(wù)注冊(cè)中心的開(kāi)源組件有Service Center膘魄,eureka乌逐,etcd,zookeeper和consul创葡。

為什么實(shí)現(xiàn)自己的服務(wù)注冊(cè)中心浙踢?

應(yīng)該提供標(biāo)準(zhǔn)化的接口,具有負(fù)載均衡和服務(wù)訂閱的能力灿渴。運(yùn)行時(shí)的依賴一定要夠輕洛波,可靠性也是非常重要的。

從服務(wù)注冊(cè)中心到服務(wù)管理中心

我們定義了微服務(wù)的靜態(tài)元數(shù)據(jù)結(jié)構(gòu)骚露,Service Center也提供了非常方便的接口去檢索這些信息蹬挤。

為了很好地呈現(xiàn)微服務(wù)之間的調(diào)用關(guān)系,也需要把依賴關(guān)系拉進(jìn)來(lái)作為管理荸百。

根據(jù)依賴關(guān)系的管理來(lái)可以進(jìn)行實(shí)例變化的推送闻伶。

支持多租隔離。

Service Center從設(shè)計(jì)上已經(jīng)考慮了各種故障點(diǎn)并提供了對(duì)應(yīng)的保護(hù)機(jī)制够话,也就是高可用保障的能力。

根據(jù)上面的架構(gòu)圖可見(jiàn)光绕,微服務(wù)的重要發(fā)現(xiàn)會(huì)統(tǒng)一通過(guò)Service Center進(jìn)行處理女嘲。

元數(shù)據(jù)

1、應(yīng)用App诞帐,便于微服務(wù)可在多個(gè)應(yīng)用間重用

2欣尼、微服務(wù)名稱,App內(nèi)唯一

3停蕉、微服務(wù)描述信息愕鼓,讓使用者可以快速了解到業(yè)務(wù)范疇等

4、微服務(wù)訪問(wèn)契約內(nèi)容慧起,API能力的描述文件

5菇晃、微服務(wù)擴(kuò)展屬性,添加具體業(yè)務(wù)擴(kuò)展屬性

6蚓挤、微服務(wù)黑白名單磺送,支持Provider側(cè)設(shè)置路由策略

7、微服務(wù)標(biāo)簽灿意,支持按標(biāo)簽檢索

高可用性保障

我們引用了互聯(lián)網(wǎng)分布式系統(tǒng)設(shè)計(jì)的準(zhǔn)則BASE來(lái)判斷組件是否為高可靠的估灿。BASE就是Basically Available(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)缤剧。

CAP理論

Consistency(一致性)馅袁,在分布式系統(tǒng)的各點(diǎn)同時(shí)保持?jǐn)?shù)據(jù)的一致。

Availability(可用性)荒辕,每個(gè)請(qǐng)求都能接受到一個(gè)響應(yīng)汗销,無(wú)論響應(yīng)成功或失敗芒粹。

Partition tolerance(分區(qū)容錯(cuò)性),當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)故障時(shí)系統(tǒng)的容錯(cuò)能力

從微服務(wù)到服務(wù)管理中心

實(shí)例緩存機(jī)制

服務(wù)管理中心提供了實(shí)例緩存機(jī)制大溜』幔基于ServiceComb的SDK開(kāi)發(fā)的微服務(wù)在第一次消費(fèi)provider的時(shí)候會(huì)進(jìn)行一次實(shí)例發(fā)現(xiàn)的操作,在內(nèi)部向Service Center拉取provider存活的實(shí)例集合钦奋,并保存到內(nèi)存緩存中座云。消費(fèi)請(qǐng)求都會(huì)跟著這個(gè)緩存集合不停地用自定義的路由策略去選擇一個(gè)合適的進(jìn)行請(qǐng)求。

這樣做的好處就是已經(jīng)運(yùn)行的SDK進(jìn)程始終在內(nèi)部保存了一份實(shí)例緩存付材,在出現(xiàn)服務(wù)與Service Center網(wǎng)絡(luò)分區(qū)的情況下朦拖,雖然無(wú)法實(shí)時(shí)感知實(shí)例的刷新,但是可以在重新連上Service Center之后觸發(fā)一次實(shí)例刷新厌衔,保證這個(gè)實(shí)例最終還是有效的璧帝。

在這個(gè)過(guò)程中,SDK上承載的一些業(yè)務(wù)是始終可用的富寿,沒(méi)有中斷睬隶。

心跳保活機(jī)制

SDK通過(guò)進(jìn)程上報(bào)實(shí)例心跳的方式對(duì)它的實(shí)例進(jìn)行币承欤活苏潜。每個(gè)provider和Service Center之間的心跳在無(wú)法保持的時(shí)候,實(shí)例就會(huì)按照設(shè)置好的時(shí)間自動(dòng)老化变勇。

當(dāng)Service Center感知到這個(gè)實(shí)例下線了恤左,就會(huì)推送給各個(gè)監(jiān)聽(tīng)在ServiceComb上的consumer去刷新本地緩存,實(shí)現(xiàn)了微服務(wù)動(dòng)態(tài)發(fā)現(xiàn)的能力

從微服務(wù)管理中心到etcd

異步緩存機(jī)制

基于Service Center內(nèi)部本身是不存數(shù)據(jù)的搀绣,一旦etcd出現(xiàn)網(wǎng)絡(luò)故障的時(shí)候飞袋,就會(huì)導(dǎo)致Service Center不可用。

所以Service Center引入了異步緩存機(jī)制链患,在啟動(dòng)之初Service Center會(huì)與etcd建立一個(gè)長(zhǎng)連接巧鸭,也就是watch。每次watch的時(shí)候?yàn)榱朔乐菇atch時(shí)間窗發(fā)生變化锣险,做了一層保護(hù)蹄皱,在watch之前做了全量的查詢。

在運(yùn)行過(guò)程中查詢所得到的資源變化會(huì)緩存到Service Center本地芯肤,然后進(jìn)行異步的循環(huán)巷折。

異步心跳機(jī)制

ServiceCenter會(huì)根據(jù)上報(bào)實(shí)例的心跳頻率和失敗次數(shù)來(lái)推算最終實(shí)例下線的時(shí)間。異步心跳機(jī)制的好處就是它不會(huì)因?yàn)橐恍┬奶难訒r(shí)而阻塞崖咨,也使得Service Center處理心跳的能力大幅提高锻拘。

自我保護(hù)機(jī)制

前面提到的緩存機(jī)制,保證了Service Center在etcd出現(xiàn)網(wǎng)絡(luò)分區(qū)故障時(shí)依然保持可讀狀態(tài),Service Center的自我保護(hù)(Self-preservation)機(jī)制保證了Provider端與Service Center在出現(xiàn)網(wǎng)絡(luò)分區(qū)故障時(shí)依然保持業(yè)務(wù)可用署拟。

ServiceCenter在一個(gè)時(shí)間窗內(nèi)監(jiān)聽(tīng)到etcd有80%的實(shí)例下線事件婉宰,會(huì)立即啟動(dòng)自我保護(hù)機(jī)制。即使etcd存儲(chǔ)的數(shù)據(jù)全部丟失推穷,這種極端場(chǎng)景下心包,SDK與Service Center之間可在不影響業(yè)務(wù)的前提下,做到數(shù)據(jù)自動(dòng)恢復(fù)馒铃。雖然這個(gè)恢復(fù)是有損的蟹腾,但在這種災(zāi)難場(chǎng)景下還能保持業(yè)務(wù)基本可用。

如何參與到ServiceComb社區(qū)

官網(wǎng):http://servicecomb.incubator.apache.org/cn/

通過(guò)訂閱郵件列表參與討論:

1区宇、發(fā)送任意內(nèi)容至郵箱:dev-subscribe@servicecomb.incubator.apache.org

2娃殖、收到來(lái)自dev-help的郵件后,再回復(fù)任意內(nèi)容來(lái)確認(rèn)訂閱郵件列表

在Apache JIRA(https://issues.apache.org/jira/browse/SCB)上提issue或查看最新的開(kāi)發(fā)任務(wù)及進(jìn)展议谷;

加入微信群進(jìn)行交流炉爆;

通過(guò)Github(https://github.com/apache?q=servicecomb)發(fā)起PR

今天的分享就到這里,謝謝大家卧晓!

編者:IT大咖說(shuō)芬首,轉(zhuǎn)載請(qǐng)標(biāo)明版權(quán)和出處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市禀崖,隨后出現(xiàn)的幾起案子衩辟,更是在濱河造成了極大的恐慌,老刑警劉巖波附,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異昼钻,居然都是意外死亡掸屡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門然评,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仅财,“玉大人,你說(shuō)我怎么就攤上這事碗淌≌登螅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵亿眠,是天一觀的道長(zhǎng)碎罚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)纳像,這世上最難降的妖魔是什么荆烈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上憔购,老公的妹妹穿的比我還像新娘宫峦。我一直安慰自己,他們只是感情好玫鸟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布导绷。 她就那樣靜靜地躺著,像睡著了一般屎飘。 火紅的嫁衣襯著肌膚如雪妥曲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天枚碗,我揣著相機(jī)與錄音逾一,去河邊找鬼。 笑死肮雨,一個(gè)胖子當(dāng)著我的面吹牛遵堵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怨规,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陌宿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了波丰?” 一聲冷哼從身側(cè)響起壳坪,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掰烟,沒(méi)想到半個(gè)月后爽蝴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纫骑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蝎亚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片先馆。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡发框,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煤墙,到底是詐尸還是另有隱情梅惯,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布仿野,位于F島的核電站铣减,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏设预。R本人自食惡果不足惜徙歼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魄梯,春花似錦桨螺、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至辣苏,卻和暖如春肝箱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稀蟋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工煌张, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人退客。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓骏融,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親萌狂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子档玻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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