- 微服務(wù)從小白到專(zhuān)家:Spring Cloud和Kubernetes實(shí)戰(zhàn)
- 姚秋辰 張昕 卿睿
- 1939字
- 2021-10-29 12:24:33
4.1 什么是微服務(wù)架構(gòu)
4.1.1 微服務(wù)架構(gòu)的特點(diǎn)
微服務(wù)是當(dāng)前互聯(lián)網(wǎng)行業(yè)的主流架構(gòu)模式,各大互聯(lián)網(wǎng)巨頭也在用實(shí)際行動(dòng)全面擁抱微服務(wù)架構(gòu),這種架構(gòu)模式是在分布式應(yīng)用和SOA之上的進(jìn)一步擴(kuò)展,它的核心思想是“業(yè)務(wù)系統(tǒng)的組件化拆分和服務(wù)治理”。通過(guò)微服務(wù)架構(gòu),我們可以將一個(gè)龐大的業(yè)務(wù)系統(tǒng)拆分成細(xì)粒度的服務(wù)組件,并且我們可以對(duì)這些組件進(jìn)行獨(dú)立設(shè)計(jì)、開(kāi)發(fā)、測(cè)試和上線部署。
服務(wù)拆分是進(jìn)行微服務(wù)化改造的第一步,傳統(tǒng)的業(yè)務(wù)系統(tǒng)在向微服務(wù)架構(gòu)轉(zhuǎn)型的過(guò)程中,都要經(jīng)歷一番大刀闊斧的“拆遷工程”。業(yè)界通行的做法是結(jié)合領(lǐng)域驅(qū)動(dòng)建模和主鏈路規(guī)劃進(jìn)行服務(wù)拆分,本章將對(duì)微服務(wù)拆分的主流方法做詳細(xì)介紹。
拋開(kāi)紙上談兵的微服務(wù)三大特征(Small、Automated和Lightweight),我們從搭建大型應(yīng)用的視角來(lái)看,微服務(wù)架構(gòu)具有以下3個(gè)特點(diǎn):
(1)服務(wù)拆分與組件化:結(jié)合領(lǐng)域建模理論將一個(gè)大型應(yīng)用拆分成邊界清晰的子系統(tǒng)的集合(如訂單系統(tǒng)、商品中心、營(yíng)銷(xiāo)優(yōu)惠系統(tǒng)),再根據(jù)業(yè)務(wù)場(chǎng)景對(duì)子系統(tǒng)進(jìn)行更細(xì)粒度的拆分。
(2)獨(dú)立演進(jìn):拆分后的子應(yīng)用有自己獨(dú)立的數(shù)據(jù)庫(kù),可以獨(dú)立進(jìn)行開(kāi)發(fā)和部署,結(jié)合自動(dòng)化的DevOps和CICD持續(xù)集成方案,助力業(yè)務(wù)快速迭代。
(3)高可用:通過(guò)服務(wù)治理、流量整形、降級(jí)熔斷、削峰填谷和彈性計(jì)算等一系列技術(shù)手段,保證業(yè)務(wù)系統(tǒng)在高并發(fā)場(chǎng)景下的高可用性。
從本書(shū)第5章開(kāi)始,我們就通過(guò)優(yōu)惠券項(xiàng)目的開(kāi)發(fā)及微服務(wù)化過(guò)程,讓讀者切身感受微服務(wù)架構(gòu)的優(yōu)點(diǎn)。
4.1.2 一線大廠為什么采用微服務(wù)架構(gòu)
在互聯(lián)網(wǎng)飛速發(fā)展的同時(shí),誕生了一系列巨無(wú)霸式的移動(dòng)端應(yīng)用程序,比如以手機(jī)淘寶、支付寶和盒馬鮮生為代表的淘系產(chǎn)品,以及微信、抖音等具有社交娛樂(lè)屬性的全民App,它們的后臺(tái)業(yè)務(wù)以微服務(wù)架構(gòu)的模式部署在大規(guī)模集群之上,支撐著巨量的用戶請(qǐng)求。以筆者若干年前參與的“阿里系”產(chǎn)品為例,拿核心主鏈路上的某一個(gè)營(yíng)銷(xiāo)優(yōu)惠計(jì)算的微服務(wù)來(lái)說(shuō),在非大促時(shí)期就有近6000臺(tái)虛擬機(jī)的部署規(guī)模,整條產(chǎn)品線的體量更是一個(gè)極其驚人的數(shù)字。這類(lèi)承接海量用戶請(qǐng)求的巨無(wú)霸應(yīng)用,為什么都采用微服務(wù)模式來(lái)構(gòu)建業(yè)務(wù)系統(tǒng)呢?我們從三個(gè)方面來(lái)分析:
1. 支持快速迭代的業(yè)務(wù)
在微服務(wù)的理念中,微服務(wù)架構(gòu)就等同于微服務(wù)團(tuán)隊(duì),一個(gè)獨(dú)立的微服務(wù)模塊由一個(gè)開(kāi)發(fā)團(tuán)隊(duì)掌舵,而同時(shí)開(kāi)發(fā)團(tuán)隊(duì)也保持一個(gè)小型的特戰(zhàn)隊(duì)規(guī)模。由小規(guī)模團(tuán)隊(duì)來(lái)負(fù)責(zé)細(xì)分領(lǐng)域的業(yè)務(wù)模塊,使團(tuán)隊(duì)可以更專(zhuān)注于自己的獨(dú)立業(yè)務(wù),快速將業(yè)務(wù)落地上線,滿足互聯(lián)網(wǎng)行業(yè)快速試錯(cuò)、快速迭代的需求。如今大多數(shù)淘系業(yè)務(wù)的微服務(wù)團(tuán)隊(duì)仍保持10人以下的小團(tuán)隊(duì)規(guī)模。
2. 節(jié)約大量的計(jì)算資源
在單體架構(gòu)或者粗粒度的SOA、分布式架構(gòu)之下,系統(tǒng)擴(kuò)容往往是通過(guò)添加硬件服務(wù)器的水平擴(kuò)展模式來(lái)實(shí)現(xiàn)的,這相當(dāng)于吃上了大鍋飯,所有服務(wù)都分配到了資源,無(wú)法將計(jì)算資源集中在瓶頸業(yè)務(wù)上,造成了資源浪費(fèi)。在微服務(wù)的架構(gòu)模式下,系統(tǒng)被拆分成更細(xì)粒度的服務(wù)化組件,可以根據(jù)業(yè)務(wù)體量和性能壓測(cè)的結(jié)果,在各個(gè)服務(wù)之間合理分配計(jì)算資源,把資源用在真正需要的服務(wù)上。
以淘系電商場(chǎng)景為例,營(yíng)銷(xiāo)優(yōu)惠計(jì)算服務(wù)是一個(gè)承接海量用戶請(qǐng)求的模塊,商品的優(yōu)惠價(jià)格需要顯示在搜索列表頁(yè)、商品詳情頁(yè)、購(gòu)物車(chē)頁(yè)和訂單結(jié)算頁(yè),各個(gè)頁(yè)面都要調(diào)用營(yíng)銷(xiāo)優(yōu)惠計(jì)算接口。當(dāng)訪問(wèn)壓力增大時(shí),如果營(yíng)銷(xiāo)計(jì)算服務(wù)的響應(yīng)變慢,那么依賴(lài)營(yíng)銷(xiāo)計(jì)算服務(wù)的業(yè)務(wù)線都會(huì)受到影響,營(yíng)銷(xiāo)服務(wù)就很容易成為整個(gè)下單鏈路的瓶頸。在微服務(wù)架構(gòu)體系下,我們可以有針對(duì)性地添加硬件服務(wù)器和緩存資源到營(yíng)銷(xiāo)優(yōu)惠計(jì)算服務(wù)的集群環(huán)境中,將寶貴的計(jì)算資源投入瓶頸業(yè)務(wù)鏈路上。
3. 技術(shù)選型的多樣性
對(duì)單體應(yīng)用來(lái)說(shuō),引入新的技術(shù)棧是一件極其困難的事情,不僅要考慮和現(xiàn)有技術(shù)棧的兼容性,還要避免引起功能和依賴(lài)項(xiàng)的沖突,用新技術(shù)棧替換老技術(shù)棧更是一場(chǎng)艱苦卓絕的持久戰(zhàn)。而對(duì)微服務(wù)架構(gòu)的應(yīng)用來(lái)說(shuō),每個(gè)微服務(wù)都是可以獨(dú)立演進(jìn)的個(gè)體,在技術(shù)選型上有相當(dāng)大的自由度,只要遵循集團(tuán)層面的框架選型(比如使用指定的服務(wù)治理組件),技術(shù)團(tuán)隊(duì)在選型上就有了更大的話語(yǔ)權(quán),可以自主選擇適合業(yè)務(wù)發(fā)展的技術(shù)棧,并推進(jìn)技術(shù)棧的更新。
4.1.3 微服務(wù)架構(gòu)對(duì)系統(tǒng)運(yùn)維的挑戰(zhàn)
工欲善其事,必先利其器,若要借助微服務(wù)架構(gòu)達(dá)到業(yè)務(wù)快速迭代的目的,需要構(gòu)建一套高度自動(dòng)化的CICD工具(Continuous Integration and Continuous Delivery),從代碼提交到編譯構(gòu)建,再到單元測(cè)試和集成測(cè)試,最后根據(jù)指定的部署策略分批上線,整套流程需要構(gòu)建在高度自動(dòng)化的持續(xù)集成平臺(tái)之上。持續(xù)集成是DevOps領(lǐng)域的一個(gè)重要部分,不同于大型單體應(yīng)用動(dòng)輒數(shù)小時(shí)甚至十幾小時(shí)的編譯加回歸測(cè)試,微服務(wù)架構(gòu)下的應(yīng)用規(guī)模足夠靈巧,可以在短時(shí)間內(nèi)完成測(cè)試驗(yàn)證并發(fā)布上線。
微服務(wù)架構(gòu)下的應(yīng)用部署結(jié)構(gòu)非常復(fù)雜,對(duì)線上運(yùn)維體系也提出了更高的要求,需要搭建眾多的業(yè)務(wù)支持系統(tǒng)來(lái)保障系統(tǒng)的可用性。比如,業(yè)務(wù)接口可用性實(shí)時(shí)監(jiān)控系統(tǒng)、服務(wù)器異常的自動(dòng)診斷與恢復(fù)、洪峰流量下的彈性計(jì)算與流量切換,等等。
- Data Visualization with D3 4.x Cookbook(Second Edition)
- Boost程序庫(kù)完全開(kāi)發(fā)指南:深入C++”準(zhǔn)”標(biāo)準(zhǔn)庫(kù)(第5版)
- Spring 5.0 By Example
- C/C++算法從菜鳥(niǎo)到達(dá)人
- R語(yǔ)言數(shù)據(jù)可視化之美:專(zhuān)業(yè)圖表繪制指南
- FFmpeg入門(mén)詳解:音視頻流媒體播放器原理及應(yīng)用
- Java持續(xù)交付
- 手把手教你學(xué)C語(yǔ)言
- 琢石成器:Windows環(huán)境下32位匯編語(yǔ)言程序設(shè)計(jì)
- Spring Boot企業(yè)級(jí)項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)
- 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道(修訂版)
- 區(qū)塊鏈底層設(shè)計(jì)Java實(shí)戰(zhàn)
- INSTANT Yii 1.1 Application Development Starter
- 零基礎(chǔ)學(xué)C語(yǔ)言第2版
- Django實(shí)戰(zhàn):Python Web典型模塊與項(xiàng)目開(kāi)發(fā)