999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

如何應(yīng)對數(shù)千微服務(wù)組件帶來的挑戰(zhàn)

2022-05-01 12:55:21王剛
計算機(jī)與網(wǎng)絡(luò) 2022年5期
關(guān)鍵詞:服務(wù)系統(tǒng)

王剛

從幾年前某CTO的一個問題說起:“我們的系統(tǒng)將會擁有5 000個微服務(wù)組件,我們應(yīng)該怎么做?”

一個接口是無法稱之為微服務(wù)的,接口數(shù)量達(dá)到十幾個或許才夠稱之為微服務(wù)。那么,對于包含5 000個微服務(wù)的系統(tǒng)而言,該如何實(shí)現(xiàn)和管理呢?在這樣龐大的系統(tǒng)背后,一定存在很大的問題。

微服務(wù)的前世今生

微服務(wù)是如何誕生的,必須了解以下4個領(lǐng)域。

TOGAF:全稱“開放組體系結(jié)構(gòu)框架”,TOGAF在上世紀(jì)七、八十年代的時候就已經(jīng)由專門組織負(fù)責(zé)開發(fā)了,直到1995年美國國防部參與之后,TOGAF才最終成型。

如今,大家手機(jī)里正在使用的產(chǎn)品和應(yīng)用中,很多都會用到SAP、IBM或者惠普的軟件,而這些軟件公司所遵循的就是TOGAF。可以說目前全球超過50 %的企業(yè)正在使用TOGAF實(shí)踐軟件架構(gòu)設(shè)計和開發(fā)。

TOGAF是一個架構(gòu)體系,但并沒有提供具體的架構(gòu)方法。TOGAF包含了業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)、技術(shù)架構(gòu)等,TOGAF有3個最為主要的支柱:

企業(yè)架構(gòu)域,主要是企業(yè)信息與業(yè)務(wù)流等;

ADM一系列的架構(gòu)方法論;

企業(yè)連續(xù)性,指的是在企業(yè)業(yè)務(wù)高速增長并且不斷變更的過程中,保證架構(gòu)體系的連續(xù)性。

DDD:全稱為“領(lǐng)域驅(qū)動設(shè)計”,其包含了諸多的概念,可以用3句話進(jìn)行概括:

DDD是精簡的業(yè)務(wù),DDD首先關(guān)注的就是業(yè)務(wù),把各種繁瑣的業(yè)務(wù)流程精簡成更細(xì)的鏈條;

DDD需要回答業(yè)務(wù)是干什么的,能夠滿足什么需求,達(dá)成什么目的;

不斷迭代,DDD的不斷迭代與TOGAF的企業(yè)連續(xù)性類似。

SOA:全稱為“面向服務(wù)架構(gòu)”,理論較多,但是可以總結(jié)為以下3點(diǎn):

SOA解決了信息孤島的問題;

業(yè)務(wù)重用,從業(yè)務(wù)角度將各個服務(wù)組合成一個個中間件或者服務(wù),將其提供給用戶或者其他系統(tǒng);

SOA使得系統(tǒng)成為互聯(lián)互通的信息群。

GRASP原則:全稱為“通用職責(zé)分配原則”,包含很多耳熟能詳?shù)母拍钊绲婉詈稀⒏邇?nèi)聚,均來自GRASP原則。它與設(shè)計模式不同,設(shè)計模式指導(dǎo)如何實(shí)現(xiàn)系統(tǒng),而GRASP旨在指導(dǎo)如何劃分。

GRASP原則旨在指導(dǎo)定義業(yè)務(wù)架構(gòu)以及API等相關(guān)內(nèi)容和劃分服務(wù),其理論內(nèi)容也非常多,但只需記住3個關(guān)鍵:

自己干自己的事;

自己只干自己能干的事;

自己只干自己的事,強(qiáng)調(diào)了資源劃分。

在軟件工程的教科書上給出了微服務(wù)架構(gòu)的定義:微服務(wù)架構(gòu)是一種架構(gòu)模式,它是將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價值。每個服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級的通信機(jī)制互相溝通(通常基于HTTP協(xié)議的RESTFul API)。每個服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立地部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等。另外,應(yīng)當(dāng)盡量避免統(tǒng)一的、集中式的服務(wù)管理機(jī)制,對具體的一個服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下游,選擇合適的語言、工具對其進(jìn)行構(gòu)建。

微服務(wù)帶來的優(yōu)勢

我們使用微服務(wù)架構(gòu)的時候,到底得到了什么東西呢?這里總結(jié)了4點(diǎn)最為明顯的優(yōu)點(diǎn):

使得開發(fā)和迭代變得更加敏捷,微服務(wù)架構(gòu)使得敏捷開發(fā)成為可能;

易于擴(kuò)展和收縮,一些公司基于Kubernetes、Docker等技術(shù)可以在幾秒內(nèi)拉起上萬個微服務(wù),當(dāng)大型流量沖擊到達(dá)的時候,可以實(shí)現(xiàn)無損地承擔(dān)全部流量,同時實(shí)現(xiàn)用戶無感知,而當(dāng)數(shù)據(jù)訪問量降低之后,又可以實(shí)現(xiàn)快速縮容;

多技術(shù)棧可能,目前云智慧的技術(shù)棧非常全面,雖然開發(fā)人員只有60多人,但是開發(fā)語言卻多達(dá)10多門,而使用微服務(wù)可以有效地組織各類開發(fā)人員;

高可修改性,比如實(shí)現(xiàn)數(shù)據(jù)庫的快速遷移,通道的快速切換等。

微服務(wù)帶來的疑問

微服務(wù)能夠帶來諸多優(yōu)點(diǎn),但是也存在2點(diǎn)疑問,第一個就是“微服務(wù)架構(gòu),你的系統(tǒng)變得更健壯了嗎?”;第二個則是“使用微服務(wù)讓系統(tǒng)變得更快了嗎?”

對于這2點(diǎn)而言,可能說是見仁見智的。有人說因為組件變得越來越多,可監(jiān)控性就會變難,因此系統(tǒng)健壯性就會變得越來越差;也有人說因為將系統(tǒng)拆分得越來越細(xì),因此健壯性就會越來越強(qiáng)。如果單體架構(gòu)是串行的,那么使用微服務(wù)可以將其變成并行的和分布式的,而多個組件之間進(jìn)行通信,也會使得通信成為性能瓶頸,那么使用微服務(wù)到底是變快了還是變慢了呢?這2個問題都很難以回答,作為一個架構(gòu)師或者開發(fā)者需要不斷進(jìn)行深入的思考。

微服務(wù)架構(gòu)面臨的挑戰(zhàn)和思考

這里總結(jié)了在使用微服務(wù)架構(gòu)的時候所需要面臨的8個挑戰(zhàn)和相關(guān)的思考:

小即是多

當(dāng)業(yè)務(wù)從大變小的時候,也意味著業(yè)務(wù)變多了。由大變小,可以使系統(tǒng)變得更加容易維護(hù)和修改,但是由少變多,又會使得問題更加復(fù)雜,因此也會出現(xiàn)很多的挑戰(zhàn)。

第一個問題就是多節(jié)點(diǎn)、多服務(wù)和多狀態(tài)。系統(tǒng)中的節(jié)點(diǎn)、組件服務(wù)變得更多了,那么節(jié)點(diǎn)和服務(wù)之間的狀態(tài)也會變得更難維護(hù),更加復(fù)雜。基于前面提到的4種知識,可以將從大變小和從少變多這2個轉(zhuǎn)變進(jìn)行折中,使得其變得更加可控。而解決這個問題的關(guān)鍵在于對于服務(wù)的合理拆分,主要有3點(diǎn)可以考慮,即:數(shù)據(jù)資源、業(yè)務(wù)功能以及服務(wù)對象。

債務(wù)管理

Bug、代碼缺陷、未完成的功能或者版本不兼容等問題都是債務(wù),當(dāng)服務(wù)變得越來越多的時候,債務(wù)往往就會變得更多。為了解決這些問題,有這樣的幾種策略:

單元測試,如果單元測試做的足夠好,那么代碼缺陷的可能性就會變得更低,可以將服務(wù)由少變多所造成的債務(wù)變多問題進(jìn)行收斂。

集成回歸,這部分提供了很多工具去做這件事情,不用開發(fā)者自己去做。

版本管理,這里指的是靜態(tài)庫的版本管理,動態(tài)庫指的是正在變更中的庫,而靜態(tài)庫指的是不再變更的庫和配置項,這一點(diǎn)控制不好,就容易使得系統(tǒng)管理混亂。

迭代沖刺,是一種組織方式,當(dāng)有很多技術(shù)債務(wù)需要進(jìn)行管理時,如何將這些債務(wù)一點(diǎn)點(diǎn)處理掉或者把發(fā)散的趨勢收斂住,迭代沖刺就是一種做法。

Bug Crash,這是智慧云團(tuán)隊自己發(fā)明的一個名詞,相當(dāng)于是對于Bug的大掃除,無論采用傳統(tǒng)的還是敏捷的開發(fā)模式,都有一些Bug存在,因此定期會組織全體開發(fā)、測試和產(chǎn)品人員將自己的產(chǎn)品用一遍,進(jìn)行Bug大掃除。

總之,無論采用什么開發(fā)模式,在一個迭代周期完成之后,回歸總結(jié)是少不了的,也需要通過一些方法解決新發(fā)生的問題,或者將其封閉住不使債務(wù)繼續(xù)蔓延。

復(fù)雜的服務(wù)依賴

如果只有一個或者幾個組件,那么其實(shí)不存在服務(wù)依賴問題,而如果有幾千個組件,那么服務(wù)依賴將會成為巨大的問題。舉例而言,如果用戶服務(wù)需要調(diào)用訂單服務(wù),那么在啟動的時候需要進(jìn)行一些初始化任務(wù),那么一個服務(wù)的版本發(fā)布可能導(dǎo)致系統(tǒng)全面癱瘓,這就是復(fù)雜服務(wù)依賴問題。

為了解決這個問題首先就需要服務(wù)發(fā)現(xiàn)機(jī)制,比如使用 etcd或者Zookeeper等,首先服務(wù)發(fā)現(xiàn)中心也需要是分布式高可靠的,那么服務(wù)起來之后需要把自己的名字和調(diào)用方式告訴服務(wù)發(fā)現(xiàn)中心,注冊上去;對于服務(wù)調(diào)用者而言只需要從服務(wù)發(fā)現(xiàn)中心那里通過約定好的名字獲取服務(wù)調(diào)用地址即可。

依賴喚醒是有一個相對比較新的東西,比如大流量突然打進(jìn)來的時候,A服務(wù)需要從原來的10個啟動到100個,而B肯定也是不夠用的,因此需要通過喚醒的機(jī)制將服務(wù)拉起來,而不是被動的等通知。

還有一種情況也需要使用到依賴喚醒機(jī)制,比如緩存穿透問題,正常情況下,緩存是生效的,不會存在穿透的情況,但是可能因為某種異常使得緩存不生效了,會將大量的流量打到DB里面去,使得服務(wù)變得不可用了,整個服務(wù)雪崩掉,針對這些問題一般會開發(fā)一些擋板服務(wù),可能會給出一些固定的數(shù)據(jù),而這些擋板服務(wù)也有可能會面臨這種突發(fā)的流量也需要通過依賴喚醒的機(jī)制實(shí)現(xiàn)喚醒。

此外,還有灰度發(fā)布和AB測試,這2點(diǎn)是相關(guān)聯(lián)的。還有多版本共存問題,對于服務(wù)的多版本也是一個技術(shù)債務(wù)問題,需要考慮如何將其舊版本拿下來。

消息通信

如果系統(tǒng)中包含多個語言棧,多種實(shí)現(xiàn)方式。那統(tǒng)一標(biāo)準(zhǔn)是必須的,統(tǒng)一一種RPC或者就使用RestFul API等。消息中心也是一種處理做法,這一點(diǎn)在Java中應(yīng)用很多,消息中心并不是消息隊列,而是一個事件驅(qū)動的消息中心。此外,還有通信網(wǎng)關(guān),這在使用微服務(wù)的時候也是一個必要點(diǎn),其主要解決了監(jiān)控問題,而且可以通過網(wǎng)關(guān)起到中控的作用,比如安全、性能以及用戶校驗等任務(wù)。

分布式事務(wù)

在實(shí)現(xiàn)分布式事務(wù)的時候可以采用2PC或者3PC原則來實(shí)現(xiàn),2PC原則是通過全部節(jié)點(diǎn)投票和執(zhí)行2個步驟完成的,并且是阻塞的;而3PC則不同,在一個具體的事務(wù)里面可以是阻塞的,也可以是非阻塞的。

3PC協(xié)議則是通過“Can-Pre-Do”3個步驟來實(shí)現(xiàn)的,其實(shí)PDU就是3PC協(xié)議在單體中的實(shí)現(xiàn)方式。而在分布式系統(tǒng)中,3PC有3種實(shí)現(xiàn)方式,使用分布式的事件驅(qū)動、最大通知以及兩階段補(bǔ)償TCC。

花式故障

很多時候,當(dāng)系統(tǒng)出現(xiàn)問題時可能需要花費(fèi)數(shù)周和很多人力才能找到根源所在,可能因為系統(tǒng)太多,使得系統(tǒng)架構(gòu)師也無法理清系統(tǒng)與系統(tǒng)之間的關(guān)系。面對諸多的花式故障,也有多種策略可以應(yīng)對,比如全鏈路追蹤,比如使用Open Tracking;主動撥測,很多用戶端的App里面內(nèi)置探針,使其可以接收Server端的指令來定期探測接口和服務(wù)是否正常。

中心與去中心

中心與去中心可以算是一個永恒的話題,配置、發(fā)號、日志、調(diào)度、狀態(tài)以及預(yù)警,其實(shí)對于比較成熟的大型系統(tǒng)而言,這6點(diǎn)都是需要中心的。

組織危機(jī)

最后一個問題,也是最大的問題。要實(shí)現(xiàn)向微服務(wù)架構(gòu)的變更的時候,最大的問題就是組織危機(jī)。這一點(diǎn)與開發(fā)者關(guān)系不大,但是對于Team Leader以及組織的管理人員而言,關(guān)系非常大。架構(gòu)的轉(zhuǎn)變需要考慮到信任危機(jī)、過期維護(hù)、多語言棧、溝通協(xié)作、安全網(wǎng)關(guān)以及輪崗結(jié)對等問題。

總之,最重要的觀點(diǎn)有2個:微服務(wù)不是銀彈;不要讓重復(fù)的事情做2次。

猜你喜歡
服務(wù)系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
半沸制皂系統(tǒng)(下)
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
服務(wù)在身邊 健康每一天
主站蜘蛛池模板: 欧美亚洲国产精品第一页| 亚洲一区精品视频在线| 成人精品视频一区二区在线| a亚洲视频| 色综合a怡红院怡红院首页| 中文字幕第1页在线播| 中文字幕在线视频免费| 一本二本三本不卡无码| 国产综合色在线视频播放线视| 国产精品免费露脸视频| 亚洲男人在线天堂| 另类欧美日韩| 中文字幕乱码中文乱码51精品| 国产永久在线视频| 日韩高清一区 | 久综合日韩| 国产人成网线在线播放va| 亚洲一区二区日韩欧美gif| 免费a级毛片18以上观看精品| 亚洲一区二区三区香蕉| 国内自拍久第一页| 就去色综合| 久久人人妻人人爽人人卡片av| 国产免费网址| 免费啪啪网址| 都市激情亚洲综合久久| 亚洲视频无码| 人妻丰满熟妇av五码区| 国内精品免费| AV网站中文| 99尹人香蕉国产免费天天拍| 69av免费视频| 亚洲天堂在线视频| 国产麻豆aⅴ精品无码| 欧美国产日韩另类| 国内精品久久久久鸭| 狠狠做深爱婷婷久久一区| 99国产精品免费观看视频| 国产99视频免费精品是看6| 狠狠色噜噜狠狠狠狠色综合久 | 国产在线精品人成导航| 嫩草在线视频| 国产一级在线观看www色 | 91久久精品日日躁夜夜躁欧美| 国产亚洲一区二区三区在线| 久久国产精品娇妻素人| av手机版在线播放| 国产成人区在线观看视频| 久久精品丝袜| 欧美亚洲日韩中文| 无码中字出轨中文人妻中文中| 精品少妇人妻av无码久久| 亚洲一区二区约美女探花| 亚洲日本中文字幕乱码中文| 亚洲专区一区二区在线观看| 亚洲av无码成人专区| 精品乱码久久久久久久| 97se亚洲综合在线天天| 色九九视频| 丝袜美女被出水视频一区| 亚洲无码高清免费视频亚洲| 波多野结衣在线一区二区| 国产自在自线午夜精品视频| 国产中文一区二区苍井空| 色婷婷亚洲综合五月| 国产精品美女网站| 国产成人精品一区二区三在线观看| 日本欧美成人免费| 国产午夜精品鲁丝片| 欧美激情视频二区| 精品久久久久久中文字幕女| 国产永久在线观看| 久久77777| 欧美一级在线看| 免费网站成人亚洲| 久久精品中文字幕少妇| 精品一区二区三区水蜜桃| 亚洲国产天堂久久九九九| 国产一区二区人大臿蕉香蕉| 亚洲欧美综合另类图片小说区| 国产一区免费在线观看| 黄色免费在线网址|