日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 架構師社區(qū)
[導讀]本文從單體架構,微服務架構,微服務風險評估,微服務落地條件等幾個方面探討微服務的落地過程,希望對你有所啟發(fā)。


作者:張飛洪

原文:www.cnblogs.com/jackyfei/p/10107510.html


面對微服務如火如荼的發(fā)展,很多人都在了解,學習希望能在自己的項目中幫得上忙,當你對微服務的廬山真面目有所了解后,接下來就是說服自己了,到底如何評估微服務,什么時候使用微服務,什么時間點最合適,需要哪些技術儲備和資源投入等等,這些都是你需要面對和解決的。

本文從單體架構,微服務架構,微服務風險評估,微服務落地條件等幾個方面探討微服務的落地過程,希望對你有所啟發(fā)。

  講解微服務之前,我們先簡單了解下單體架構。

一、單體架構

單體架構的優(yōu)點:

  • 快速開發(fā)和驗證想法,證明產(chǎn)品思路是否可行

  • 投入資源和成本,包括人力和物力相對比較節(jié)約

單體架構的缺點:

  隨著業(yè)務的復雜度增加,單體的靈活度會逐漸下降,比如:

  • IDE過載:隨著代碼量增加,代碼整體編譯效率下降。

  • 規(guī)?;簾o法滿足團隊規(guī)?;咝ч_發(fā)。

  • 系統(tǒng)開發(fā)、測試、部署的沖突和效率低下等問題

  • 只能關注一套技術棧

  • 應用擴展性比較差

  • 海量用戶高并發(fā)訪問數(shù)量有限

單體適用場景:

  架構設計的三大原則告訴我們,架構需要的是簡單、適度、演化。

  對于項目起步階段,單體是最高效也是最節(jié)省成本的方式。因為初期階段,由于人力,成本,業(yè)務熟悉程度,微服務技術積累等因素,如何過度設計可能工期和復雜度會急劇上升,造成交付困難,問題百出,從而錯過了時間窗口。最合適,簡單的方式還是單體優(yōu)先,這是創(chuàng)業(yè)公司的特點決定的。當然設計面向微服務的單體架構也是一種聰明的方法,這遵守了系統(tǒng)演化的法則。

單體分層目的:

  無論采取何種維度的架構分層,分層的最核心目的是保證各層之間的差異足夠清晰,邊界足夠明顯,為將來可能產(chǎn)生的變化提供最容易、最小化的修改。比如客戶端要從安卓替換為IOS,底層無須任何改動,就像替換積木一樣。又比如,設備需要接入新的設備或協(xié)議,其他層也不需要做任何變化,可以無縫平滑接入任何設備。

建議

  如果前期在業(yè)務不十分清晰,求的是驗證想法,證明產(chǎn)品思路是否可行性,并且業(yè)務量不大,僅限于省級范圍,建議只要對當前架構稍加改良升級就可以了,這樣改動量相對較小,且至少能支撐一定時間段的業(yè)務增長。

二、微服務架構

微服務的優(yōu)勢

  支撐的業(yè)務更加龐大,可以支撐海量用戶高并發(fā)和海量設備接入,支持分布式多機房,多區(qū)域部署,支持服務器無限擴容。支持私有云,公有云,混合云等部署方式。所以微服務是大多數(shù)互聯(lián)網(wǎng)公司的首選。

微服務的代價

  • 技術門檻高:微服務包括,服務描述,注冊中心,服務框架,服務監(jiān)控,服務追蹤,服務治理等幾大基本組件,以上每個組件缺一不可,每個組件展開又包括很多技術門檻,比如,容器技術,持續(xù)部署,DevOps等相關概念。

  • 復雜性增加:相對單體架構將所有功能打包部署在一起,集中地進行開發(fā)、測試和運維,微服務會將這些單體的服務進行拆分部署,業(yè)務拆分粒度是一個難點,拆分后服務聚合也是一個麻煩。因為服務粒度增加后,相互調用,相互依存,所以問題排查難度會增加,就需要一套完整的服務監(jiān)控,服務跟蹤和治理的系統(tǒng)。

  • 觀念變化:微服務不僅僅是技術的升級,更是開發(fā)方式、組織架構、開發(fā)觀念的轉變。

  • 前期投入成本較高

微服務架構圖

  微服務架構圖譜谷歌或Bing下,可以看到各種各樣的架構圖,源于業(yè)務和架構師自身的喜好或者粗細粒度,但是每個架構圖的基本組件和架構分層都差別不大,只是有的細一些,有的粗一下。比如有客戶端層,容器層(K8S),API Gateway,微服務集群層,EventBus層是必須要有的,至于服務監(jiān)控和服務跟蹤、服務治理本身就是一個完整的系統(tǒng),粒度就沒有細了?;谶@些概念,我把架構圖稍微細化一下,這里省去服務監(jiān)控跟蹤和治理的部分,后續(xù)單獨抽離出來分析。

  這邊的架構圖譜相對之前的架構圖,更加貼近業(yè)務,粒度也更細,雖然個別組件有所省略,比如跟蹤和治理部分。

  架構圖主要分4層,每個層次遵循架構分層的核心思想:關注點分離,職責各異,邊界清晰。

  第1層:客戶端:理論上包含一切可以聯(lián)網(wǎng)的設備,包括移動設備,Android、IoS、Pad、微信、微博、QQ、Web、各自瀏覽器、物聯(lián)網(wǎng)設備等等……

  第2層:API網(wǎng)關:包括服務注冊,發(fā)現(xiàn),認證授權,單點登錄,熔斷,限流……網(wǎng)關的知識點豐富,是微服務的核心之一。

  • - 假如網(wǎng)關對外提供統(tǒng)一的地址:www.jackyfei.com

    第3層:微服務集群:包括各種具體的microservice,比如縱向劃分的業(yè)務服務(用戶服務,訂單服務,……),橫向劃分的基礎或公共服務(元數(shù)據(jù)服務,公共服務……)

    其他微服務的地址可能是這樣的:

  • - 用戶服務:1.user.jackyfei.com

  • 訂單服務:2.order.jackyfei.com

  • 元數(shù)據(jù)服務:3.base.jackyfei.com

  • 消息服務:4.msg.jackyfei.com

    第4層:事件總線:Event Bus 目的是消息解耦,不要讓服務之間直接的鏈接。不同與SOA的服務總線,事件總線相對比較輕量,經(jīng)?;谙㈥犃幸孢M行解耦,目的是為了讓服務之間的關聯(lián)弱化,不直接進行關聯(lián)。很多時候用的是相對穩(wěn)定、可靠、企業(yè)級的RabbitMQ。

    微服務的架構其實不難,根據(jù)以上的架構,每種業(yè)務都可以進行套用,這里的難點在于服務的劃分和粒度控制,另外如何管理膨脹的服務是一個麻煩事。

三、何時采用微服務?

3.1楊波說

  這里引用架構師楊波(前Ebay架構師,目前任職拍拍貸研發(fā)部總監(jiān),資深技術架構師,微服務技術專家)的一些觀點:

  “企業(yè)一開始不推薦直接使用微服務,因為微服務需要前期基礎設施的投資,復雜性很高,如果對問題領域并不是很理解,一開始用微服務,你很難去劃分服務的邊界,你的生產(chǎn)力反而會比較低,而且你花了很大精力進行開發(fā),你的產(chǎn)品并沒有被市場驗證過,有可能會失敗,所以這個選項風險會比較高。所以我們推薦的是單塊優(yōu)先,先從單塊運用做起,這樣成本低,團隊成員也比較少,無須太多研發(fā)投入,就可以交付一些基本的功能給客戶使用。

  隨著應用越來越成功,客戶增加,你的系統(tǒng)復雜度會越來越高,就會出現(xiàn)單塊應用和團隊規(guī)模之間的矛盾,生產(chǎn)力會隨著業(yè)務復雜度逐漸降低。所以在一些初創(chuàng)型公司,你更多看到的是單塊應用,只有一些中大型的公司會看到微服務架構?!?

漫談何時從單體架構遷移到微服務?

  “交叉點表明,業(yè)務已經(jīng)到達了一定的復雜性,單塊應用已經(jīng)無法滿足業(yè)務增長的需要,研發(fā)效率開始下降了,而微服務可以提升研發(fā)和交付的效率。這個點需要架構師去綜合,權衡。個人經(jīng)驗,一般團隊需要達到百人規(guī)模,才去考慮微服務?!?

  以上的觀點講的很中肯,給我的啟發(fā)和幫助非常大。這里的交叉點怎么來確定和評估是重點,比如我們上線一個社交姑且叫抖信,初期為了快速上線,驗證可行性,可以只開發(fā)首頁聊天、通訊錄、評論等基本功能。產(chǎn)品上線后,經(jīng)過一段時間的運營,用戶開始逐步增多,可行性驗證通過,下一階段就需要進一步增加更多的新特性來吸引更多的目標用戶,比如再給這個社交抖信添加朋友圈、消息通知、游戲、電商等等功能。

  “一般情況下,這個時候就需要大規(guī)模地擴張開發(fā)人員,以支撐多個功能的開發(fā)。如果這個時候繼續(xù)采用單體應用架構,多個功能模塊混雜在一起開發(fā)、測試和部署的話,就會導致不同功能之間相互影響,一次打包部署需要所有的功能都測試 OK 才能上線。

  不僅如此,多個功能模塊混部在一起,對線上服務的穩(wěn)定性也是個巨大的挑戰(zhàn)。比如 A 開發(fā)的一個功能由于代碼編寫考慮不夠全面,上線后產(chǎn)生了內存泄漏,運行一段時間后進程異常退出,那么部署在這個服務池中的所有功能都不可訪問。

  根據(jù)我的實際項目經(jīng)驗,一旦單體應用同時進行開發(fā)的人員超過 10 人,就會遇到上面的問題,這個時候就該考慮進行服務化拆分了?!?strong>---胡忠想(微博微服務技術專家)

  至此,我們何時采用微服務已經(jīng)十分明確了,關鍵是業(yè)務復雜度團隊規(guī)模兩大要點,而業(yè)務復雜度和市場窗口是權衡和抉擇的首要因素。

3.2微服務落地條件評估

  一般情況下,業(yè)務系統(tǒng)引入新技術就必然會帶來架構的復雜度提升,在具體決策前,你先要認識到新架構會帶來哪些新的問題,這些問題你和你的團隊是否能夠解決?如何解決?是自己投入人力建設,還是采用業(yè)界開源方案?假如你和我一樣都是微服務的旁觀者或者學習者,那么下面的評估也許對你又所參考。

3.2.1落地方式選擇

不同的落地方式?jīng)Q定不同的資源配置。

方式一:借力外部架構咨詢公司提供架構DEMO和培訓服務助推內部團隊技術轉型升級。

方式二:招聘相關經(jīng)驗豐富的人員進來,自行研究和搭建架構并做內部培訓,推動團隊技術升級。

建議:如果比較緊急,采用第一種方式,因為招聘匹配的人才比較困難,等不起。但是不管是那種方式,對于團隊來說都需要一定的技術人才儲備方便后續(xù)交接和運維。

3.2.2人才儲備

  這里分成兩類人員,一類是研究型,一類是應用型。研究型主要是以技術攻堅為主,負責微服務的核心組件的研究和開發(fā),比如服務發(fā)布和訂閱,服務跟蹤和監(jiān)控,服務的治理;應用型主要是負責技術理解應用為主。

3.2.3技術儲備

  微服務學習導航和微服務周邊技術棧。周邊技術棧包括領域驅動涉及,持續(xù)交付,分布式至少,負載均衡,CAP理論,緩存原理,DevOps和容器化技術。

3.2.4團隊規(guī)模評估

  楊波在給微服務的開發(fā)團隊規(guī)劃時候給了一個百人左右的大概預估,至于到底需要多少開發(fā)人員就沒有細說,可能作者本身呆過的公司都是大廠,對人力成本控制沒有那么大的包袱,對于中小企業(yè),人力是最貴的成本。如果要一定要上微服務,該怎么辦?

  對于微服務的團隊規(guī)模眾說紛紜,有的說要百來號人;有的說需要精兵10人左右;有的說和人數(shù)沒有關系,只和業(yè)務有關;有的說一個懂微服務的架構師也能搞定。這些說法都比較籠統(tǒng),如果你想上微服務,人力評估包括人力、能力、人數(shù)等等,這些因素還是非常重要的,畢竟成本才是商業(yè)的本質,有可能不客觀的規(guī)劃會導致項目的潰敗。

  對于微服務的團隊規(guī)模是哪些方面決定的呢?我覺得至少要從以下兩個維度來評估:

業(yè)務規(guī)模:如果你們的業(yè)務架構非常復雜,有倉儲系統(tǒng)開發(fā),ERP系統(tǒng),OA系統(tǒng),訂單系統(tǒng)等等,業(yè)務越多,需求人數(shù)越多(這里人數(shù)指的都是后臺開發(fā)人數(shù))。

技術能力:另外,別忘了非功能性的開發(fā),比如API網(wǎng)關,服務跟蹤、治理等也是需要人去開發(fā)和維護的,這些非功能性的核心組件需要多少人,由于沒有完整的開發(fā)經(jīng)驗,加上個別組件,比如跟蹤系統(tǒng),開發(fā)的程度可深可淺,開發(fā)周期可長可短,以目前個人的經(jīng)驗還無法給與合理的建議??赡芘H?個人兩周就夠了,也可能高級開發(fā)2個人,一人分工三個核心組件,兩周也夠用?;蛘呒軜嬐獍?,只要交接的人能跟上,也是一種解決方案。

  總結:1個精通微服務落地經(jīng)驗的架構師是必不可少的,圍繞架構師周邊一幫高級開發(fā),按根據(jù)實際業(yè)務來確定,一般一個開發(fā)負責2-3個核心模塊,不宜太多,比如目前核心模塊有8個,對應人數(shù)配置大概在3-4個左右。

3.3轉微服務風險評估

3.3.1重寫面廣

  由于是架構級別的調整,之前能保留下來的大部分是解耦比較好的代碼,比如前端代碼,采集服務代碼,部分業(yè)務邏輯代碼,所以對現(xiàn)有框架沖擊面比較大。

3.3.2復雜度高

  因為微服務是一種觀念和思想,又是新近技術,本身就有各種架構實現(xiàn)方式和技術解決方案。所以對技術人員來說,對比選型本身就是一個考驗。加上本身涉及的技術面就比較廣,所以復雜度和門檻相對比較高。

但是該技術發(fā)源于亞馬遜,經(jīng)過近些年的發(fā)展,雖然還在發(fā)展,但是已經(jīng)相對成熟。

3.3.3人員配置

  微服務架構工作量主要集中在后端,對后端開發(fā)人員的技術級別有較高的要求,主要是對微服務原理和開源組件的熟悉上,同時需要具備整體的微服務的意識。暫時不具備整體微服務開發(fā)意識和經(jīng)驗,需要通過培訓后進行轉型升級。

3.3.4合作方式

  如果采用借助外部架構力量來助推架構升級,和架構單位的合作就不是簡單的外包,涉及的面會變得比較廣,在完全交接過來之前,周期會比較長。包括對我們業(yè)務架構的深入了解,然后根據(jù)業(yè)務架構繪制可靠技術架構藍圖,再根據(jù)技術藍圖進行落地實施(不建議只提供架構方案而由其他單位實施落地),包括新系統(tǒng)的開發(fā),舊系統(tǒng)的升級,當然這種升級是平滑過度的,對業(yè)務窗口并不會產(chǎn)生影響。

3.4合理的拆分姿勢

  如何正確拆分?這里正確指的是合理,因為沒有絕對的標準。按照前人的經(jīng)驗可以分為縱向和橫向兩種劃分方法:

3.4.1縱向拆分

  是從業(yè)務維度進行拆分。標準是按照業(yè)務的關聯(lián)程度來決定,關聯(lián)比較密切的業(yè)務適合拆分為一個微服務,而功能相對比較獨立的業(yè)務適合單獨拆分為一個微服務,比如上圖中的訂單服務,用戶服務。另外粒度太小,服務聚合是一個坑,粒度太大,分和沒分一個樣。

3.4.2橫向拆分

  是從公共且獨立功能維度拆分。標準是按照是否有公共的被多個其他服務調用,且依賴的資源獨立不與其他業(yè)務耦合。比如上圖中的元數(shù)據(jù)服務和消息服務。

3.4.3總結

  借用《微服務設計》中的一句話:“你越不了解一個領域,為服務找到合適的界限上下文就越難……服務的界限劃分錯誤,可能會導致不得不頻繁地更改服務間的協(xié)作,而這種更改成本更高……”

四、SOA和微服務

  由于SOA和微服務有千絲萬縷的關系,這里簡單羅列雙方的對比圖,算是一個小知識點:

  兩種架構背后的意圖是不同的:SOA嘗試將應用集成,一般采用中央管理模式來確保各應用能夠交互運作。微服務嘗試部署新功能,快速有效地擴展開發(fā)團隊。它著重于分散管理、代碼再利用與自動化執(zhí)行。

五、總結

  最后讓我們回顧一下前人經(jīng)典的話語:

  • 分布式第一定律是“盡量不要使用分布式”。

  • 軟件行業(yè)從業(yè)者,尤其是那些已經(jīng)不寫代碼的從業(yè)者,總會期望有銀彈,但銀彈終究是沒有的。

  • 微服務依賴于“基礎設施自動化”。微服務不是“銀彈”。

    還是回到我們架構設計的原則上,遵循簡單,適用,演化的原則,那么你的抉擇也許會變得沒有那么令人糾纏。

文章引用

  • 從單體式架構遷移到微服務架構

  • 《微服務設計》作者: [[英] Sam Newman](https://book.douban.com/search/Sam Newman) 出版社: 人民郵電出版社

  • 4 Challenges You Need to Address with Microservices Adoption

  • 為什么使用微服務?

特別推薦一個分享架構+算法的優(yōu)質內容,還沒關注的小伙伴,可以長按關注一下:

漫談何時從單體架構遷移到微服務?

漫談何時從單體架構遷移到微服務?

漫談何時從單體架構遷移到微服務?

長按訂閱更多精彩▼

漫談何時從單體架構遷移到微服務?

如有收獲,點個在看,誠摯感謝

免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉