微服務(wù)的基礎(chǔ)設(shè)施

簡介
  • 微服務(wù)的三大特性:small翅娶、lightweight、automated狭园。
  • 微服務(wù)的基礎(chǔ)設(shè)置


    image.png
1. 自動(dòng)化測試

微服務(wù)將原本大一統(tǒng)的系統(tǒng)拆分了很多獨(dú)立運(yùn)行的微服務(wù),微服務(wù)之間接口數(shù)量居多,并且微服務(wù)提倡快速交付踏堡,版本周期短,版本更新頻繁咒劲。如果每次更新靠人工回歸整個(gè)系統(tǒng)顷蟆,則工作量大,效率低腐魂,達(dá)不到快速交付的目的帐偎,因此必須通過自動(dòng)化完成絕大部分測試回歸的工作

自動(dòng)化測試包括:代碼級(jí)的單元測試、單個(gè)系統(tǒng)級(jí)的集成測試蛔屹、系統(tǒng)間的接口測試削樊,理想情況下每個(gè)類都要自動(dòng)化。如果因?yàn)閳F(tuán)隊(duì)規(guī)模和人力的原因無法全面覆蓋判导,至少要做到接口測試自動(dòng)化

2. 自動(dòng)化部署

與單體試架構(gòu)嫉父,微服務(wù)需要部署的節(jié)點(diǎn)增加了幾倍甚至十幾倍,微服務(wù)部署頻率也大幅度提升眼刃,綜合算下來绕辖,微服務(wù)部署次數(shù)是大一統(tǒng)部署次數(shù)的幾十倍。如果繼續(xù)采用人工部署擂红,需要投入大量的人力仪际,且容易出錯(cuò)围小,因此需要自動(dòng)化部署系統(tǒng)。

  • 自動(dòng)化部署系統(tǒng)包括:版本管理树碱、資源管理(如:機(jī)器管理肯适、虛擬機(jī)管理)、部署操作成榜、回退操作等框舔。
  • 開源:gitlab cicd, k8s
3. 配置中心

微服務(wù)的節(jié)點(diǎn)數(shù)量非常多,通過人工登錄每臺(tái)機(jī)器手工修改赎婚,效率低刘绣,容易出錯(cuò)。特別是在部署或拍障時(shí)挣输,需要快速增刪改查配置纬凤,人工操作的方式顯然是不行的。此外撩嚼,有的運(yùn)行期配置需要?jiǎng)討B(tài)修改并且所有節(jié)點(diǎn)即時(shí)生效停士,人工操作是無法做到的。綜合上述的分析完丽,微服務(wù)需要一個(gè)統(tǒng)一的配置中心來管理所有的微服務(wù)節(jié)點(diǎn)配置
配置中心包括:版本管理恋技、增刪改查配置、節(jié)點(diǎn)管理舰涌、配置同步猖任、配置推送等功能。

4. 接口框架

微服務(wù)提倡輕量級(jí)的通信方式瓷耙,一般采用HTTP/REST或RPC方式統(tǒng)一接口協(xié)議。但在實(shí)踐過程中刁赖,統(tǒng)一接口協(xié)議還不夠搁痛,還需要統(tǒng)一接口傳遞的數(shù)據(jù)格式。例如宇弛,我們需要指定接口協(xié)議為HTTP/REST,還需要指定數(shù)據(jù)格式為JSON且JSON的數(shù)據(jù)都遵循如下規(guī)范:

    "requestId":100,
    "time":"2020-04-23 00:01:01",
    "caller":"tencent",
    "api":"get_money",
    "param":{
        "userId":110
    },
    "sign":"1299394ujjdlfjasldjfoweuio"
}

接口框架不是一個(gè)可運(yùn)行的系統(tǒng)鸡典,一般以庫或包的形式提供給所有微服務(wù)調(diào)用

  • 開源:gRPC,Thrift枪芒,dubbo彻况,rpcx,monthan


    image.png
5. api網(wǎng)關(guān)

系統(tǒng)拆分為微服務(wù)后舅踪,內(nèi)部的微服務(wù)之間是互聯(lián)互通的纽甘,相互之間的訪問都是點(diǎn)對點(diǎn)的,如果外部系統(tǒng)想調(diào)用系統(tǒng)某個(gè)功能抽碌,也采用點(diǎn)對點(diǎn)的方式悍赢,則外部系統(tǒng)會(huì)非常“頭大”。因?yàn)閷ν獠肯到y(tǒng)來說左权,它不需要也沒辦法理解這么多微服務(wù)的職責(zé)分工和邊界皮胡,它只會(huì)關(guān)注它需要的能力,而不會(huì)關(guān)注這個(gè)能力時(shí)有那個(gè)微服務(wù)提供

  • 此外赏迟,外部系統(tǒng)訪問系統(tǒng)還涉及到安全和權(quán)限的問題屡贺,如果外部系統(tǒng)直接訪問某個(gè)服務(wù),則意味的每個(gè)服務(wù)都需要自己實(shí)現(xiàn)安全和權(quán)限的功能锌杀,這樣做不但工作量大烹笔,而且都是重復(fù)的工作。
  • 綜合上訴分析抛丽,微服務(wù)需要一個(gè)統(tǒng)一的api網(wǎng)關(guān)谤职,負(fù)責(zé)外部系統(tǒng)的訪問操作。api網(wǎng)關(guān)是外部系統(tǒng)訪問的接口亿鲜,所有的外部系統(tǒng)接入系統(tǒng)都需要通過api網(wǎng)關(guān)允蜈,主要包括接入鑒權(quán)(是否允許接入)、權(quán)限控制(可以訪問那些功能)蒿柳、傳輸加密饶套、請求路由、流量控制等功能垒探。
  • 開源:Kong妓蛮、Traefik、Ambassador圾叼、Tyk蛤克、Zuul 資料
6. 服務(wù)發(fā)現(xiàn)

微服務(wù)種類和數(shù)量很多,如果這些信息全部通過手工配置的方式寫入到各個(gè)微服務(wù)節(jié)點(diǎn)夷蚊,首先配置工作量很大构挤,配置文件可能要配幾百上千行,幾十個(gè)節(jié)點(diǎn)加起來后配置項(xiàng)就是幾萬幾十萬了惕鼓,人工維護(hù)這么大數(shù)量的配置項(xiàng)是一項(xiàng)災(zāi)難筋现。其次是微服務(wù)節(jié)點(diǎn)經(jīng)常變化,可能是由于擴(kuò)容導(dǎo)致節(jié)點(diǎn)增加箱歧,也可能是故障處理時(shí)隔離掉一部分節(jié)點(diǎn)矾飞,還可能是采用灰度升級(jí),先將一部分節(jié)點(diǎn)升級(jí)到新版本呀邢,然后讓新老版本同時(shí)運(yùn)行洒沦;不管哪種情況,我們都希望節(jié)點(diǎn)的變化能夠及時(shí)同步到所有其他依賴的微服務(wù)驼鹅。如果采用手工配置微谓,是不可能做到實(shí)時(shí)更新生效的森篷。所有我們需要一套服務(wù)發(fā)現(xiàn)的系統(tǒng)來支撐微服務(wù)的自動(dòng)注冊和發(fā)現(xiàn)。

  • 服務(wù)發(fā)現(xiàn)主要實(shí)現(xiàn)方式:自理式和代理式
  • 服務(wù)發(fā)現(xiàn)的核心功能就是服務(wù)注冊表豺型,注冊表記錄了所有的服務(wù)節(jié)點(diǎn)的配置和狀態(tài)仲智,每個(gè)微服務(wù)啟動(dòng)后都需要將自己的信息注冊到服務(wù)注冊表,然后由微服務(wù)系統(tǒng)到服務(wù)注冊表查詢可用的服務(wù)
  • 開源:Nacos姻氨、Eureka钓辆、consul、CoreDNS肴焊、Zookeeper


    對比
7. 服務(wù)路由
  • 有了服務(wù)發(fā)現(xiàn)后前联,微服務(wù)之間能夠方便地獲取相關(guān)配置信息,但具體進(jìn)行某次調(diào)用請求時(shí)娶眷,我們還需要從所有符合條件的可用微服務(wù)節(jié)點(diǎn)中挑選出一個(gè)具體的節(jié)點(diǎn)發(fā)起請求似嗤,這就是服務(wù)路由需要完成的功能。
  • 服務(wù)路由和服務(wù)發(fā)現(xiàn)是密切相關(guān)的届宠,服務(wù)路由一般不會(huì)設(shè)計(jì)成為一個(gè)獨(dú)立運(yùn)行的系統(tǒng)烁落,通常情況下是和服務(wù)發(fā)現(xiàn)放在一起實(shí)現(xiàn)的。對于自理式服務(wù)發(fā)現(xiàn)豌注,服務(wù)路由是微服務(wù)內(nèi)部實(shí)現(xiàn)的伤塌;對于代理式服務(wù)發(fā)現(xiàn),服務(wù)路由是load balancer系統(tǒng)實(shí)現(xiàn)的轧铁。無論放在那里每聪,核心功能是路由的算法:
  • 常見路由算法:隨機(jī)路由、輪詢路由齿风、最小壓力路由药薯、最小連接數(shù)路由等。
8. 服務(wù)容錯(cuò)
  • 系統(tǒng)拆分為微服務(wù)后聂宾,單個(gè)節(jié)點(diǎn)故障的概率變小果善,故障影響范圍也變少,但是微服務(wù)的節(jié)點(diǎn)數(shù)量大大增加了系谐。從整體看,系統(tǒng)中某個(gè)微服務(wù)出現(xiàn)故障的概率會(huì)大大增加讨跟,微服務(wù)還有故障擴(kuò)散的特點(diǎn)纪他,如果不及時(shí)處理,導(dǎo)致看起來系統(tǒng)很多節(jié)點(diǎn)都故障了晾匠。
  • 常見服務(wù)容錯(cuò)包括:請求重試茶袒、流控和服務(wù)隔離
9.服務(wù)監(jiān)控
  • 系統(tǒng)拆分微服務(wù)后,節(jié)點(diǎn)數(shù)量大大增加凉馆,導(dǎo)致需要監(jiān)控的機(jī)器薪寓、網(wǎng)絡(luò)亡资、進(jìn)程、接口調(diào)用數(shù)等監(jiān)控對象的數(shù)量大大增加向叉;同時(shí)锥腻,一旦發(fā)生故障,我們需要快速根據(jù)各類信息來定位故障母谎。
  • 服務(wù)監(jiān)控主要作用:
    -- 實(shí)時(shí)搜集信息并進(jìn)行分析瘦黑,避免故障后再來分析,減少了處理時(shí)間
    -- 可以實(shí)時(shí)分析的基礎(chǔ)上進(jìn)行報(bào)警奇唤,在問題萌芽的階段發(fā)覺并預(yù)警幸斥,降低了問題的影響范圍和時(shí)間
  • 通常情況下,服務(wù)監(jiān)控需要搜集并分析大量的數(shù)據(jù)咬扇,因此建議做成獨(dú)立的系統(tǒng)甲葬,而不是集成到服務(wù)發(fā)現(xiàn)、api網(wǎng)關(guān)等系統(tǒng)中懈贺。
10. 服務(wù)跟蹤
  • 服務(wù)監(jiān)控可以做到微服務(wù)節(jié)點(diǎn)級(jí)的監(jiān)控和信息收集经窖,但如果我們需要某個(gè)請求在微服務(wù)的完整路徑,就需要服務(wù)跟蹤了隅居。
  • 服務(wù)監(jiān)控和服務(wù)跟蹤的區(qū)別可以簡單概括為宏觀和微觀的區(qū)別钠至。服務(wù)監(jiān)控記錄:請求次數(shù),響應(yīng)時(shí)間平均值胎源、響應(yīng)時(shí)間最大值棉钧、錯(cuò)誤碼分布信息;服務(wù)跟蹤記錄:發(fā)起時(shí)間涕蚤、響應(yīng)時(shí)間宪卿、響應(yīng)錯(cuò)誤碼、請求參數(shù)万栅、返回的json數(shù)據(jù)
  • 服務(wù)跟蹤技術(shù):標(biāo)注點(diǎn)佑钾、跟蹤數(shù)和span;采樣跟蹤和染色跟蹤
11. 服務(wù)安全
  • 系統(tǒng)拆分微服務(wù)后烦粒,數(shù)據(jù)分散在各個(gè)微服務(wù)節(jié)點(diǎn)上休溶。從系統(tǒng)連接的角度來說,任意微服務(wù)都可以訪問其他微服務(wù)節(jié)點(diǎn)扰她;但從業(yè)務(wù)角度來說兽掰,部分敏感數(shù)據(jù)或操作只能部分微服務(wù)可以訪問,而不是所有的微服務(wù)都可以訪問徒役。
  • 服務(wù)安全分三部分:接入安全孽尽,數(shù)據(jù)安全,傳輸安全
  • 服務(wù)安全可以集成到配置中心系統(tǒng)中忧勿,即配置中心配置微服務(wù)的接入安全策略和數(shù)據(jù)安全策略杉女,微服務(wù)節(jié)點(diǎn)從配置中心獲取這些配置信息瞻讽,然后在處理具體的微服務(wù)調(diào)用請求時(shí),根據(jù)安全策略進(jìn)行處理熏挎。由于這些策略是通用的速勇,一般會(huì)把策略封裝成通用的庫提供給各個(gè)微服務(wù)調(diào)用。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婆瓜,一起剝皮案震驚了整個(gè)濱河市快集,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廉白,老刑警劉巖个初,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猴蹂,居然都是意外死亡院溺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門磅轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍逸,“玉大人,你說我怎么就攤上這事聋溜∽簧牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵撮躁,是天一觀的道長漱病。 經(jīng)常有香客問我,道長把曼,這世上最難降的妖魔是什么杨帽? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嗤军,結(jié)果婚禮上注盈,老公的妹妹穿的比我還像新娘。我一直安慰自己叙赚,他們只是感情好老客,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著震叮,像睡著了一般沿量。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冤荆,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音权纤,去河邊找鬼钓简。 笑死乌妒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的外邓。 我是一名探鬼主播撤蚊,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼损话!你這毒婦竟也來了侦啸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤丧枪,失蹤者是張志新(化名)和其女友劉穎光涂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拧烦,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忘闻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恋博。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片齐佳。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖债沮,靈堂內(nèi)的尸體忽然破棺而出炼吴,到底是詐尸還是另有隱情,我是刑警寧澤疫衩,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布援岩,位于F島的核電站,受9級(jí)特大地震影響衔统,放射性物質(zhì)發(fā)生泄漏藕甩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一曹傀、第九天 我趴在偏房一處隱蔽的房頂上張望辐脖。 院中可真熱鬧,春花似錦皆愉、人聲如沸嗜价。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽久锥。三九已至,卻和暖如春异剥,著一層夾襖步出監(jiān)牢的瞬間瑟由,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工冤寿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歹苦,地道東北人青伤。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像殴瘦,于是被迫代替她去往敵國和親狠角。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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

  • 微服務(wù)架構(gòu)的演進(jìn) 作為一種架構(gòu)模式蚪腋,微服務(wù)將復(fù)雜系統(tǒng)切分為數(shù)十乃至上百個(gè)小服務(wù)丰歌,每個(gè)服務(wù)負(fù)責(zé)實(shí)現(xiàn)一個(gè)獨(dú)立的業(yè)務(wù)邏輯...
    AI喬治閱讀 7,539評(píng)論 0 16
  • 微服務(wù)架構(gòu)模式的核心在于如何識(shí)別服務(wù)的邊界,設(shè)計(jì)出合理的微服務(wù)屉凯。但如果要將微服務(wù)架構(gòu)運(yùn)用到生產(chǎn)項(xiàng)目上立帖,并且能夠發(fā)揮...
    java菜閱讀 2,942評(píng)論 0 6
  • 第84篇 極客時(shí)間《從0開始學(xué)架構(gòu)》課程筆記。 每項(xiàng)微服務(wù)基礎(chǔ)設(shè)施都是一個(gè)平臺(tái)神得、一個(gè)系統(tǒng)厘惦、一個(gè)解決方案,若需自己實(shí)...
    短暫瞬間閱讀 1,165評(píng)論 0 0
  • 最近公司組織學(xué)習(xí)《梁寧產(chǎn)品經(jīng)理30講》哩簿,有一些體會(huì)感悟宵蕉,分享下: 印象最深&我的感受: 1.框架:這個(gè)詞很重要,框...
    曉蟲閱讀 165評(píng)論 0 1
  • AngularJS 通過被稱為指令的新屬性來擴(kuò)展 HTML节榜。AngularJS 通過內(nèi)置的指令來為應(yīng)用添加功能羡玛。當(dāng)...
    聶叼叼閱讀 186評(píng)論 0 1