分布式微服務(wù)架構(gòu)體系詳解

微服務(wù)架構(gòu)的技術(shù)體系、社區(qū)目前已經(jīng)越來(lái)越成熟。在最初系統(tǒng)架構(gòu)的搭建署咽,或者當(dāng)現(xiàn)有架構(gòu)已到達(dá)瓶頸需要進(jìn)行架構(gòu)演進(jìn)時(shí),很多架構(gòu)師、運(yùn)維工程師會(huì)考慮是否需要搭建微服務(wù)架構(gòu)體系宁否。雖然很多文章都說(shuō)微服務(wù)架構(gòu)是復(fù)雜的窒升、會(huì)帶來(lái)很多分布式的問(wèn)題,但只要我們了解這些問(wèn)題慕匠,并找到解法饱须,就會(huì)有種撥開(kāi)云霧的感覺(jué)。

微服務(wù)架構(gòu)也不是完美的台谊,世上沒(méi)有完美的架構(gòu)蓉媳,微服務(wù)架構(gòu)也是隨著業(yè)務(wù)、團(tuán)隊(duì)成長(zhǎng)而不斷演進(jìn)的锅铅。最開(kāi)始可能就幾個(gè)酪呻、十幾個(gè)微服務(wù),每個(gè)服務(wù)是分庫(kù)的盐须,通過(guò) API Gateway 并行進(jìn)行服務(wù)數(shù)據(jù)合并玩荠、轉(zhuǎn)發(fā)。隨著業(yè)務(wù)擴(kuò)大贼邓、不斷地加入搜索引擎阶冈、緩存技術(shù)、分布式消息隊(duì)列塑径、數(shù)據(jù)存儲(chǔ)層的數(shù)據(jù)復(fù)制女坑、分區(qū)、分表等统舀。

微服務(wù)是一種服務(wù)間松耦合的匆骗、每個(gè)服務(wù)之間高度自治并且使用輕量級(jí)協(xié)議進(jìn)行通信的可持續(xù)集成部署的分布式架構(gòu)體系。這一句包含了微服務(wù)的特點(diǎn)绑咱,微服務(wù)架構(gòu)和其他架構(gòu)有什么區(qū)別绰筛?以下對(duì)比一些常見(jiàn)的架構(gòu)。

單體架構(gòu)是最簡(jiǎn)單的軟件架構(gòu)描融,常用于傳統(tǒng)的應(yīng)用軟件開(kāi)發(fā)以及傳統(tǒng) Web 應(yīng)用铝噩。傳統(tǒng) Web 應(yīng)用,一般是將所有功能模塊都打包(jar窿克、war)在一個(gè) Web 容器(JBoss骏庸、Tomcate)中部署、運(yùn)行年叮。隨著業(yè)務(wù)復(fù)雜度增加具被、技術(shù)團(tuán)隊(duì)規(guī)模擴(kuò)大,在一個(gè)單體應(yīng)用中維護(hù)代碼只损,會(huì)降低開(kāi)發(fā)效率一姿,即使是處理一個(gè)小需求七咧,也需要將所有機(jī)器上的應(yīng)用全部部署一遍,增加了運(yùn)維的復(fù)雜度叮叹。

當(dāng)某一天使用單體架構(gòu)發(fā)現(xiàn)很難推進(jìn)需求的開(kāi)發(fā)艾栋、以及日積月累的技術(shù)債時(shí),很多企業(yè)會(huì)開(kāi)始做單體服務(wù)的拆分蛉顽,拆分的方式一般有水平拆分和垂直拆分蝗砾。垂直拆分是把一個(gè)應(yīng)用拆成松耦合的多個(gè)獨(dú)立的應(yīng)用,讓?xiě)?yīng)用可以獨(dú)立部署携冤,有獨(dú)立的團(tuán)隊(duì)進(jìn)行維護(hù)悼粮;水平拆分是把一些通用的,會(huì)被很多上層服務(wù)調(diào)用的模塊獨(dú)立拆分出去曾棕,形成一個(gè)共享的基礎(chǔ)服務(wù)扣猫,這樣拆分可以對(duì)一些性能瓶頸的應(yīng)用進(jìn)行單獨(dú)的優(yōu)化和運(yùn)維管理,也在一定程度上防止了垂直拆分的重復(fù)造輪子睁蕾。

SOA 也叫面向服務(wù)的架構(gòu)苞笨,從單體服務(wù)到 SOA 的演進(jìn),需要結(jié)合水平拆分及垂直拆分子眶。SOA 強(qiáng)調(diào)用統(tǒng)一的協(xié)議進(jìn)行服務(wù)間的通信,服務(wù)間運(yùn)行在彼此獨(dú)立的硬件平臺(tái)但是需通過(guò)統(tǒng)一的協(xié)議接口相互協(xié)作序芦,也即將應(yīng)用系統(tǒng)服務(wù)化臭杰。舉個(gè)易懂的例子,單體服務(wù)如果相當(dāng)于一個(gè)快餐店谚中,所有的服務(wù)員職責(zé)都是一樣的渴杆,又要負(fù)責(zé)收銀結(jié)算,又要負(fù)責(zé)做漢堡宪塔,又要負(fù)責(zé)端盤子磁奖,又要負(fù)責(zé)打掃,服務(wù)員之間不需要有交流某筐,用戶來(lái)了后比搭,服務(wù)員從前到后負(fù)責(zé)到底。SOA 相當(dāng)于讓服務(wù)員有職責(zé)分工南誊,收銀員負(fù)責(zé)收銀身诺,廚師負(fù)責(zé)做漢堡,保潔阿姨負(fù)責(zé)打掃等抄囚,所有服務(wù)員需要用同一種語(yǔ)言交流霉赡,方便工作協(xié)調(diào)。

微服務(wù)也是一種服務(wù)化幔托,不過(guò)其和 SOA 架構(gòu)的服務(wù)化概念也是有區(qū)別的穴亏,可以從以下幾個(gè)關(guān)鍵字來(lái)理解:

松耦合:每個(gè)微服務(wù)內(nèi)部都可以使用 DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的思想進(jìn)行設(shè)計(jì)領(lǐng)域模型,服務(wù)間盡量減少同步的調(diào)用,多使用消息的方式讓服務(wù)間的領(lǐng)域事件來(lái)進(jìn)行解耦嗓化。 輕量級(jí)協(xié)議:Dubbo 是 SOA 的開(kāi)源的標(biāo)準(zhǔn)實(shí)現(xiàn)之一锅劝,類似的還有像 gRPC、Thrift 等蟆湖。微服務(wù)更傾向于使用 Restful 風(fēng)格的 API故爵,輕量級(jí)的協(xié)議可以很好得支持跨語(yǔ)言開(kāi)發(fā)的服務(wù),可能有的微服務(wù)用 Java 語(yǔ)言實(shí)現(xiàn)隅津,有的用 Go 語(yǔ)言诬垂,有的用 C++,但所有的語(yǔ)言都可以支持 Http 協(xié)議通信伦仍,所有的開(kāi)發(fā)人員都能理解 Restful 風(fēng)格 API 的含義结窘。 高度自治和持續(xù)集成:從底層的角度來(lái)說(shuō),SOA 更加傾向于基于虛擬機(jī)或者服務(wù)器的部署充蓝,每個(gè)應(yīng)用都部署在不同的機(jī)器上隧枫,一般持續(xù)集成工具更多是由運(yùn)維團(tuán)隊(duì)寫(xiě)一些 Shell 腳本以及提供基于共同協(xié)議(比如 Dubbo 管理頁(yè)面)的開(kāi)發(fā)部署頁(yè)面。微服務(wù)可以很好得和容器技術(shù)結(jié)合谓苟,容器技術(shù)比微服務(wù)出現(xiàn)得晚官脓,但是容器技術(shù)的出現(xiàn)讓微服務(wù)的實(shí)施更加簡(jiǎn)便,目前 Docker 已經(jīng)成為很多微服務(wù)實(shí)踐的基礎(chǔ)容器涝焙。因?yàn)槿萜鞯奶厣氨浚砸慌_(tái)機(jī)器上可以部署幾十個(gè)、幾百個(gè)不同的微服務(wù)仑撞。如果某個(gè)微服務(wù)流量壓力比其他微服務(wù)大赤兴,可以在不增加機(jī)器的情況下,在一臺(tái)機(jī)器上多分配一些該微服務(wù)的容器實(shí)例隧哮。同時(shí)桶良,因?yàn)?Docker 的容器編排社區(qū)日漸成熟,類似 Mesos沮翔、Kubernetes 及 Docker 官方提供的 Swarm 都可以作為持續(xù)集成部署的技術(shù)選擇陨帆。

其實(shí)從架構(gòu)的演進(jìn)的角度來(lái)看,整體的演進(jìn)都是朝著越來(lái)越輕量級(jí)鉴竭、越來(lái)越靈活的應(yīng)用方向發(fā)展歧譬,甚至到近兩年日漸成熟起來(lái)的 Serverless(無(wú)服務(wù))架構(gòu)。從單體服務(wù)到分層的服務(wù)搏存,再到面向服務(wù)瑰步、再到微服務(wù)甚至無(wú)服務(wù),對(duì)于架構(gòu)的挑戰(zhàn)是越來(lái)越大璧眠。

微服務(wù)架構(gòu)屬于分布式系統(tǒng)嗎缩焦?答案是肯定的读虏。微服務(wù)和 SOA 都是典型的分布式架構(gòu),只不過(guò)微服務(wù)的部署粒度更細(xì)袁滥,服務(wù)擴(kuò)展更靈活盖桥。

怎樣理解微服務(wù)中的分布式?舉一個(gè)招聘時(shí)一個(gè)同學(xué)來(lái)面試的例子题翻。A 同學(xué)說(shuō)揩徊,目前所在公司在做從單應(yīng)用到微服務(wù)架構(gòu)遷移的工作,已經(jīng)差不多完成了嵌赠。提到微服務(wù)感覺(jué)就有話題聊了塑荒,于是便問(wèn):“是否可以簡(jiǎn)單描述下服務(wù)拆分后的部署結(jié)構(gòu)、底層存儲(chǔ)的拆分姜挺、遷移方案齿税?”于是 A 同學(xué)說(shuō),只是做了代碼工程結(jié)構(gòu)的拆分炊豪,還是原來(lái)的部署方式凌箕,數(shù)據(jù)庫(kù)還是那個(gè)庫(kù),所有的微服務(wù)都用一個(gè)庫(kù)词渤,分布式事務(wù)處理方式是“避免”牵舱,盡量都同步調(diào)用……于是我就跟這位同學(xué)友好地微笑說(shuō)再見(jiàn)了。

微服務(wù)的分布式不僅僅是容器應(yīng)用層面的分布式掖肋,其為了高度自治仆葡,底層的存儲(chǔ)體系也應(yīng)該互相獨(dú)立,并且也不是所有的微服務(wù)都需要持久化的存儲(chǔ)服務(wù)志笼。一個(gè)“手機(jī)驗(yàn)證碼”微服務(wù)可能底層存儲(chǔ)只用一個(gè) Redis;一個(gè)“營(yíng)銷活動(dòng)搭建頁(yè)面”微服務(wù)可能底層存儲(chǔ)只需要一個(gè) MongoDB把篓。

微服務(wù)中的分布式場(chǎng)景除了服務(wù)本身需要有服務(wù)發(fā)現(xiàn)纫溃、負(fù)載均衡,微服務(wù)依賴的底層存儲(chǔ)也會(huì)有分布式的場(chǎng)景:為了高可用性和性能需要處理數(shù)據(jù)庫(kù)的復(fù)制韧掩、分區(qū)紊浩,并且在存儲(chǔ)的分庫(kù)情況下,微服務(wù)需要能保證分布式事務(wù)的一致性疗锐。

微服務(wù)架構(gòu)的技術(shù)體系坊谁、社區(qū)目前已經(jīng)越來(lái)越成熟,所以在初期選擇使用或者企業(yè)技術(shù)體系轉(zhuǎn)型微服務(wù)的時(shí)候滑臊,需要了解微服務(wù)架構(gòu)中的分布式的問(wèn)題:

分布式架構(gòu)

《分布式微服務(wù)架構(gòu)體系詳解》從微服務(wù)不得不面對(duì)和解決的分布式問(wèn)題出發(fā)口芍,包含分布式技術(shù)的一系列理論以及架構(gòu)模型、算法的介紹雇卷,同時(shí)結(jié)合技術(shù)選型和實(shí)踐應(yīng)用鬓椭,提供一系列解決方案的梳理颠猴。相信閱讀完整個(gè)課程,你會(huì)對(duì)微服務(wù)的分布式問(wèn)題有個(gè)系統(tǒng)地理解小染。本課程會(huì)對(duì)微服務(wù)的分布式場(chǎng)景問(wèn)題一一擊破翘瓮,為你提供解決思路。并且裤翩,本課程通過(guò)對(duì)分布式問(wèn)題的體系化梳理资盅,結(jié)合一些方案的對(duì)比選型,可以讓工程師們一覽微服務(wù)的知識(shí)圖譜踊赠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呵扛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子臼疫,更是在濱河造成了極大的恐慌择份,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烫堤,死亡現(xiàn)場(chǎng)離奇詭異荣赶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鸽斟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門拔创,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人富蓄,你說(shuō)我怎么就攤上這事剩燥。” “怎么了立倍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵灭红,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我口注,道長(zhǎng)变擒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任寝志,我火速辦了婚禮娇斑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘材部。我一直安慰自己毫缆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布乐导。 她就那樣靜靜地躺著苦丁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兽叮。 梳的紋絲不亂的頭發(fā)上芬骄,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天猾愿,我揣著相機(jī)與錄音,去河邊找鬼账阻。 笑死蒂秘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淘太。 我是一名探鬼主播姻僧,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蒲牧!你這毒婦竟也來(lái)了撇贺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤冰抢,失蹤者是張志新(化名)和其女友劉穎松嘶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挎扰,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翠订,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遵倦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尽超。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梧躺,靈堂內(nèi)的尸體忽然破棺而出似谁,到底是詐尸還是另有隱情,我是刑警寧澤掠哥,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布巩踏,位于F島的核電站,受9級(jí)特大地震影響续搀,放射性物質(zhì)發(fā)生泄漏蛀缝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一拂共、第九天 我趴在偏房一處隱蔽的房頂上張望帮匾。 院中可真熱鬧,春花似錦、人聲如沸鳖昌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碳柱。三九已至,卻和暖如春革答,著一層夾襖步出監(jiān)牢的瞬間战坤,已是汗流浹背曙强。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留途茫,地道東北人碟嘴。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像囊卜,于是被迫代替她去往敵國(guó)和親娜扇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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