書名: 微服務(wù)設(shè)計原理與架構(gòu)作者名: 鄭天民本章字?jǐn)?shù): 1219字更新時間: 2019-09-10 13:22:34
1.5 微服務(wù)架構(gòu)的挑戰(zhàn)
將一個系統(tǒng)分散到多個微服務(wù)中使得系統(tǒng)整體結(jié)構(gòu)變得更加復(fù)雜,這在技術(shù)和架構(gòu)上同樣給我們帶來了一定挑戰(zhàn)。同時,由于各個微服務(wù)都需要獨立部署,我們就會有更多的服務(wù)需要單獨進行發(fā)布和運行管理,運維基礎(chǔ)設(shè)施也會面臨比單塊系統(tǒng)更大的困難。最后,微服務(wù)架構(gòu)在很大程度上改變了系統(tǒng)的研發(fā)過程,從團隊協(xié)作到需求管理等方面,都需要通過引入變化進行調(diào)整和完善。
1.5.1 技術(shù)架構(gòu)挑戰(zhàn)
微服務(wù)架構(gòu)是一種分布式架構(gòu),各個微服務(wù)之間需要通過網(wǎng)絡(luò)通信完成交互。網(wǎng)絡(luò)在連通各個微服務(wù)的同時也會產(chǎn)生響應(yīng)時間的延遲和通信過程的不可靠性。關(guān)于分布式系統(tǒng)固有的問題我們已經(jīng)在1.1.2節(jié)中做了介紹,這里不再贅述。另外,我們還需要注意到微服務(wù)架構(gòu)中的去中心化思想和服務(wù)版本控制所帶來的系統(tǒng)復(fù)雜性。
1.去中心化與平衡
微服務(wù)架構(gòu)所帶來的獨立性可能導(dǎo)致每個服務(wù)采用不同的技術(shù)體系。去中心化的設(shè)計思想意味著微服務(wù)之間不需要共享技術(shù),然而缺少通用的技術(shù)體系同樣也會加劇系統(tǒng)的復(fù)雜度。去中心化是微服務(wù)架構(gòu)的基本特征之一,但當(dāng)每個微服務(wù)團隊都采用自身團隊擅長的不同技術(shù)進行微服務(wù)構(gòu)建時,導(dǎo)致的問題就是沒有一個人能夠明白系統(tǒng)中所采用的所有技術(shù)。盡管多數(shù)情況下,我們并不需要深入到其他團隊的微服務(wù)中,但當(dāng)從統(tǒng)一發(fā)布和運維等角度去看待整個系統(tǒng)時,這種技術(shù)復(fù)雜性就可能會是一個問題。我們需要把控中心化和去中心化之間的平衡性。
2.服務(wù)版本控制
每個微服務(wù)都應(yīng)該具備與其他服務(wù)保持相互獨立的版本控制機制,我們提倡為每個微服務(wù)建立版本并根據(jù)業(yè)務(wù)迭代更新這個版本。如果每個服務(wù)都能夠完全按照自身服務(wù)的演進過程進行獨立發(fā)布,那么事情還比較簡單。但如果某一個服務(wù)與另一個服務(wù)具有版本關(guān)聯(lián)性,即這兩個服務(wù)要么都不發(fā)布、要么一起發(fā)布,那么事情就變得有點復(fù)雜。如果這些具有版本關(guān)聯(lián)性的服務(wù)很多且版本的更新頻率很高,如何正確地管理服務(wù)版本就是一項具有挑戰(zhàn)性的工作。
1.5.2 研發(fā)過程挑戰(zhàn)
在技術(shù)之外,采用微服務(wù)架構(gòu)也可能帶來研發(fā)過程上的挑戰(zhàn)。
1.需求的邊界
對研發(fā)過程而言,分散的服務(wù)在一定程度上等同于分散的業(yè)務(wù)需求,來源于微服務(wù)具有的業(yè)務(wù)獨立性和明確的服務(wù)邊界。但對于整個系統(tǒng)而言,需求的邊界并不會那么容易劃分。當(dāng)我們面對微服務(wù)架構(gòu),如何確定業(yè)務(wù)功能的粒度、如何把非功能性需求分解到各個微服務(wù)中、如何從系統(tǒng)整體上把握需求的優(yōu)先級等都是我們不得不面對的問題。
2.引入變化
對于大多數(shù)尚未采用微服務(wù)架構(gòu)的團隊而言,使用微服務(wù)架構(gòu)就是一個引入變化的過程。關(guān)于團隊引入變化,很多人存在一些誤解,其中最大的誤解就是認(rèn)為新想法一旦引入就意味著已經(jīng)成功。當(dāng)我們嘗試采用微服務(wù)架構(gòu)時,團隊管理人員想了很多辦法、做了很多工作,找到了問題的切入點,跟各個利益方討論之后終于引入了大家都贊同的變化,然后就期望這個變化能按照自己想的那樣發(fā)揮效果,這是不對的。當(dāng)微服務(wù)架構(gòu)被引入時,我們還要做很多事情,因為前面所提到的各種技術(shù)、架構(gòu)和過程的挑戰(zhàn)都需要我們進行跟蹤和協(xié)調(diào)。
- Learning Scala Programming
- Node.js+Webpack開發(fā)實戰(zhàn)
- Web應(yīng)用系統(tǒng)開發(fā)實踐(C#)
- Power Up Your PowToon Studio Project
- Python數(shù)據(jù)可視化:基于Bokeh的可視化繪圖
- Python神經(jīng)網(wǎng)絡(luò)項目實戰(zhàn)
- Java程序設(shè)計:原理與范例
- 可解釋機器學(xué)習(xí):模型、方法與實踐
- Selenium Testing Tools Cookbook(Second Edition)
- 蘋果的產(chǎn)品設(shè)計之道:創(chuàng)建優(yōu)秀產(chǎn)品、服務(wù)和用戶體驗的七個原則
- 貫通Tomcat開發(fā)
- Python應(yīng)用與實戰(zhàn)
- Instant GLEW
- C語言程序設(shè)計教程
- Mastering ArcGIS Server Development with JavaScript