前言
當(dāng)你打開(kāi)窗戶(hù)時(shí)当纱,清新的空氣會(huì)進(jìn)入房間,伴隨空氣的可能還有蚊子踩窖。微服務(wù)也一樣坡氯,有好處,也有壞處洋腮。我這里不講微服務(wù)帶來(lái)了哪些好處箫柳,這些都非常容易找到。微服務(wù)帶來(lái)了復(fù)雜性啥供,這點(diǎn)大家都有共識(shí)悯恍。復(fù)雜性衍生出了如下2個(gè)痛點(diǎn):
-
痛點(diǎn)A: 部署一套環(huán)境很麻煩且耗資源。
現(xiàn)實(shí)中伙狐,可能有測(cè)試環(huán)境涮毫、性能測(cè)試環(huán)境、預(yù)發(fā)環(huán)境贷屎、生產(chǎn)環(huán)境等罢防。有的環(huán)境需要常駐,有的環(huán)境是臨時(shí)的唉侄,用完即可清理咒吐,如特性開(kāi)發(fā)環(huán)境、特性測(cè)試環(huán)境属划。
跟微服務(wù)相伴的一般都有敏捷恬叹,甚至是敏捷的增強(qiáng)版——DevOps。微服務(wù)是敏捷發(fā)展的架構(gòu)階段榴嗅。微服務(wù)妄呕、敏捷、DevOps之間的關(guān)系可以參看下圖嗽测,也可以參考文章(https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html)绪励。
而實(shí)施敏捷就有多特性的并行開(kāi)發(fā),每個(gè)特性都需要有一套環(huán)境進(jìn)行調(diào)試和測(cè)試唠粥。想象一下疏魏,一個(gè)有30個(gè)以上服務(wù)的應(yīng)用,部署一套這樣的環(huán)境多么麻煩晤愧。
- 痛點(diǎn)B: 隨著研發(fā)團(tuán)隊(duì)人員更迭大莫,沒(méi)人掌握整個(gè)系統(tǒng)的架構(gòu),服務(wù)之間的依賴(lài)關(guān)系不清楚官份。從而只厘,特性開(kāi)發(fā)或者修改bug時(shí)如履薄冰烙丛,不敢動(dòng)手。
如何解決痛點(diǎn)A?
對(duì)于這個(gè)痛點(diǎn)羔味,筆者看到過(guò)一些解決方案河咽,做得比較深入的是阿里,請(qǐng)參看文章(高能預(yù)警:文章很長(zhǎng)赋元,如果沒(méi)興趣看完也沒(méi)關(guān)系忘蟹,絲毫不影響本文的閱讀)。
在阿里搁凸,我們?nèi)绾喂芾頊y(cè)試環(huán)境
阿里的解決方式總結(jié)起來(lái)就是:發(fā)布平臺(tái)+本地服務(wù)+公共服務(wù)媚值。
但這種解決方式有如下2個(gè)缺點(diǎn):
- 多特性環(huán)境依賴(lài)于公共的基礎(chǔ)服務(wù),有時(shí)會(huì)有沖突护糖;
- 公共的基礎(chǔ)服務(wù)褥芒,如果需要回調(diào),不知道回調(diào)那哪個(gè)特性環(huán)境椅文。
現(xiàn)在喂很,我們來(lái)思考一下惜颇,這個(gè)問(wèn)題是否有更好的解決辦法皆刺?回到本痛點(diǎn)問(wèn)題:
- 部署麻煩,耗時(shí)耗力凌摄;
- 消耗資源大羡蛾。
我們能不能像管理單體應(yīng)用一樣,管理微服務(wù)應(yīng)用锨亏?答案是可以的痴怨!
1. 部署麻煩,耗時(shí)耗力器予。
對(duì)于這個(gè)問(wèn)題浪藻,解決起來(lái)相對(duì)比較簡(jiǎn)單,寫(xiě)一個(gè)完整的應(yīng)用部署腳本就行了乾翔,但也有一些額外的事情需要處理爱葵,比如:
- 部署參數(shù)不一樣,需要調(diào)整反浓;
- 統(tǒng)一配置中心上需要建不同的命名空間萌丈;
- 公共的中間件新部署一套時(shí),如何將數(shù)據(jù)復(fù)制到新的中間件實(shí)例雷则。比如:數(shù)據(jù)庫(kù)的數(shù)據(jù)辆雾、消息隊(duì)列中的數(shù)據(jù);
- 如果應(yīng)用使用了公共存儲(chǔ)月劈,新部署時(shí)需要特殊處理度迂。
但是藤乙,如果有一個(gè)部署平臺(tái)來(lái)解決這個(gè)問(wèn)題,惭墓,自動(dòng)解決所有這些細(xì)節(jié)問(wèn)題湾盒,豈不美哉?
2. 消耗資源大诅妹。
這個(gè)問(wèn)題罚勾,傳統(tǒng)方式解決起來(lái)可能比較棘手。但使用腳本和程序也是可以解決的吭狡,如下是我的解決思路:
1. 底層部署使用K8s尖殃。進(jìn)程級(jí)別資源復(fù)用,壓榨資源划煮,資源利用率比虛擬機(jī)高50%以上送丰。這一點(diǎn)比較容易,只是有一定的遷移K8s的成本弛秋。
2. 按需創(chuàng)建器躏,到期清理。每套環(huán)境需要定義環(huán)境存活時(shí)間蟹略,到期自動(dòng)清理登失。
3. 自動(dòng)啟停服務(wù)。監(jiān)控每個(gè)微服務(wù)實(shí)例的流量訪問(wèn)情況挖炬,自動(dòng)啟停服務(wù)揽浙,釋放CPU和內(nèi)存資源。這一點(diǎn)結(jié)合K8s來(lái)實(shí)現(xiàn)意敛,效果會(huì)更佳馅巷。
4. 應(yīng)用畫(huà)像。用算法給每個(gè)應(yīng)用草姻、每個(gè)實(shí)例做畫(huà)像钓猬,動(dòng)態(tài)調(diào)整每個(gè)服務(wù)占用的CPU和內(nèi)存大小。
5. 底層硬件優(yōu)化撩独。
上面的后2點(diǎn)敞曹,據(jù)我了解,阿里云有團(tuán)隊(duì)已經(jīng)實(shí)現(xiàn)了跌榔。一般的團(tuán)隊(duì)沒(méi)有這個(gè)能力做這2點(diǎn)异雁。
如何解決痛點(diǎn)B?
此問(wèn)題傳統(tǒng)的解決辦法是依賴(lài)于人或者流程,包括如下幾點(diǎn):
- 盡量留住對(duì)整個(gè)系統(tǒng)非常了解的架構(gòu)師僧须,或者平時(shí)有一個(gè)架構(gòu)師的backup纲刀,隨時(shí)能夠頂上來(lái);
- 盡量在人員更替時(shí),做好交接示绊;
- 平時(shí)盡量維護(hù)好系統(tǒng)的設(shè)計(jì)文檔锭部,以便新來(lái)的人學(xué)習(xí)。
從可行性上來(lái)說(shuō)面褐,第1點(diǎn)比其他兩點(diǎn)更靠譜拌禾。第2點(diǎn)和第3點(diǎn)都需要額外的人和流程來(lái)進(jìn)行監(jiān)督,收效甚微展哭。
是否有更好的解決思路湃窍?有!7税您市!思路主要包含如下幾點(diǎn):
1. 架構(gòu)圖定義好系統(tǒng)架構(gòu),包括哪些微服務(wù)役衡、中間件茵休、服務(wù)間依賴(lài)關(guān)系等。
2. 架構(gòu)圖可部署手蝎。架構(gòu)圖中的元素定義好部署參數(shù)榕莺,直接部署。
3. 封裝底層資源棵介,不能讓研發(fā)人員或運(yùn)維人員直接在底層資源上部署應(yīng)用钉鸯,所有的應(yīng)用部署必須以架構(gòu)圖部署。
這樣鞍时,最新的應(yīng)用亏拉,技術(shù)架構(gòu)是怎么樣扣蜻,依賴(lài)關(guān)系怎么樣逆巍,直接從對(duì)應(yīng)的架構(gòu)圖就能看出。
總結(jié)
其實(shí)莽使,如上2個(gè)痛點(diǎn)的解決方案锐极,可以融合在一起,做一個(gè)應(yīng)用管理平臺(tái)芳肌,包括如下模塊或功能即可灵再。
1. 應(yīng)用架構(gòu)圖管理。包括架構(gòu)圖設(shè)計(jì)亿笤、部署參數(shù)定義翎迁,最好是可視化的架構(gòu)圖。
2. 底層計(jì)算資源管理净薛。包括容器集群接入和刪除汪榔。
3. 架構(gòu)圖一鍵部署。
4. 應(yīng)用按需創(chuàng)建肃拜,到期自動(dòng)清理痴腌。
5. 應(yīng)用一鍵克隆雌团。
6. 服務(wù)的自動(dòng)啟停。
7. 服務(wù)資源占用的自動(dòng)調(diào)整士聪。
8. 底層硬件優(yōu)化锦援。
一圖勝千言,使用一張圖來(lái)表達(dá)包含這8點(diǎn)的解決方案剥悟,如下:
有的企業(yè)內(nèi)部確實(shí)有在做類(lèi)似的平臺(tái)灵寺,筆者2011年在某大廠內(nèi)部見(jiàn)過(guò)類(lèi)似的平臺(tái),但是當(dāng)時(shí)該平臺(tái)是面向該大廠的特殊產(chǎn)品的区岗,而不是面向微服務(wù)應(yīng)用的替久,并且也只是實(shí)現(xiàn)了上述的部分功能。
坦誠(chéng)地講躏尉,這個(gè)平臺(tái)我們已經(jīng)做出來(lái)了:StarOS蚯根,但是上面羅列的5、6胀糜、7颅拦、8四點(diǎn)還沒(méi)有實(shí)現(xiàn),未來(lái)的規(guī)劃中會(huì)一一實(shí)現(xiàn)教藻。簡(jiǎn)單show一下它的架構(gòu)圖設(shè)計(jì)距帅、一鍵部署。
可視化架構(gòu)設(shè)計(jì)
可部署的架構(gòu)圖一鍵部署
最后括堤,歡迎大家給我留言討論碌秸,集思廣益,讓開(kāi)發(fā)人員能夠做到“以業(yè)務(wù)為中心”悄窃,將所有非業(yè)務(wù)的東西沉淀為基礎(chǔ)設(shè)施讥电。歡迎大家試用StarOS,當(dāng)前可以免費(fèi)使用轧抗,有任何問(wèn)題可以給我們反饋恩敌,謝謝!