演進(jìn)式架構(gòu)師
系統(tǒng)的成功靠不斷的取舍實(shí)現(xiàn)
1. 架構(gòu)師的職責(zé)
1) 技術(shù)愿景、技術(shù)領(lǐng)導(dǎo)者,帶領(lǐng)團(tuán)隊(duì)交付客戶(hù)想要的系統(tǒng)
2) 從更高層次思考,權(quán)衡利弊,作出抉擇
2. 架構(gòu)師的演化視角
1) 軟件是持續(xù)演化的,不是一成不變的。
2) 對(duì)于架構(gòu)師來(lái)講,不要想著一開(kāi)始就設(shè)計(jì)出完美產(chǎn)品,而是要設(shè)計(jì)一個(gè)合理的框架,在這個(gè)框架下可以逐漸演化出客戶(hù)想要的系統(tǒng)。
3) 系統(tǒng)不但要滿(mǎn)足當(dāng)前的需要,還能夠應(yīng)對(duì)將來(lái)的變化
3. 微服務(wù)架構(gòu)師關(guān)注點(diǎn)
應(yīng)該關(guān)注:
1) 分區(qū):劃分服務(wù)的邊界,確定服務(wù)的粒度
2) 區(qū)域間的交互:不同的服務(wù)之間是如何交互,制定統(tǒng)一的接口,比如REST接口
3) 對(duì)整個(gè)系統(tǒng)的健康進(jìn)行監(jiān)控
4) 編碼:架構(gòu)師需要花時(shí)間和開(kāi)發(fā)工程師在一起,理想狀況下應(yīng)該一起編碼
不應(yīng)該關(guān)注:
1) 過(guò)多關(guān)注每個(gè)區(qū)域內(nèi)發(fā)生的事情:每個(gè)服務(wù)內(nèi)部可以允許團(tuán)隊(duì)自己選擇不同的技術(shù)棧或者數(shù)據(jù)存儲(chǔ)技術(shù)
4. 微服務(wù)架構(gòu)的目標(biāo)、原則與實(shí)踐
1) 業(yè)務(wù)部門(mén)的目標(biāo):
確保技術(shù)和業(yè)務(wù)層面能保持一致
2) 原則:
區(qū)分約束和原則:約束不能改變的,而原則是可以改變的。
Heroku的12 Factors
3) 原則和實(shí)踐相結(jié)合
實(shí)踐:a. 保證原則得到實(shí)施;b. 指導(dǎo)如何完成任務(wù);c.是和技術(shù)相關(guān)的;d.比較底層的;e. 例如:代碼規(guī)范、日志數(shù)據(jù)格式、http/rest作為標(biāo)準(zhǔn)集成風(fēng)格,服務(wù)部署在不同的aws賬戶(hù)中等。
原則指導(dǎo)系統(tǒng)的演化
實(shí)踐:指導(dǎo)如何實(shí)現(xiàn)原則的細(xì)節(jié)
不同的實(shí)踐后可以有一個(gè)原則:.Net 團(tuán)隊(duì)/Java團(tuán)隊(duì)都各有自己的實(shí)踐,但背后的原則是相同的。
目標(biāo) ? ? ? ? ? ? ? ? ? ? 原則 ? ? ? ? ? ? ? ?實(shí)踐
5. 微服務(wù)架構(gòu)的要求
1) 監(jiān)控
a. 原則:清晰描繪出跨服務(wù)系統(tǒng)的健康狀態(tài)
b. 實(shí)踐:每個(gè)服務(wù)主動(dòng)把標(biāo)準(zhǔn)化的數(shù)據(jù)推送到一個(gè)集中的位置。例如:Graphite來(lái)收集指標(biāo)數(shù)據(jù);Nagios來(lái)檢測(cè)健康狀態(tài);輪詢(xún)系統(tǒng)來(lái)從各個(gè)節(jié)點(diǎn)收集數(shù)據(jù)等。
2) 接口
a. 原則:選用少數(shù)幾種明確的接口
b. 實(shí)踐:
i. 使用一種標(biāo)準(zhǔn)的接口
ii. 不僅僅是接口的技術(shù)和協(xié)議
iii. Url中使用動(dòng)詞還是名詞
iv. 資源的分頁(yè)
v. Api的版本管理
3) 架構(gòu)安全性
a. 原則:保證每個(gè)服務(wù)都可以應(yīng)對(duì)下游服務(wù)的錯(cuò)誤請(qǐng)求
b. 實(shí)踐:
i. 每個(gè)下游服務(wù)使用自己的連接池
ii. 每個(gè)服務(wù)使用一個(gè)斷路器
iii. 返回碼遵守一定的規(guī)則:正常且被正確處理的請(qǐng)求;錯(cuò)誤請(qǐng)求;被訪(fǎng)問(wèn)的服務(wù)宕機(jī),無(wú)法判斷請(qǐng)求是否正常
4) 代碼治理
a. 原則:使用簡(jiǎn)單的方式把事情做對(duì)
b. 實(shí)踐:
i. 范例:代碼范例
ii. 服務(wù)代碼模板:實(shí)現(xiàn)一個(gè)新服務(wù)時(shí),所用實(shí)現(xiàn)核心屬性的那些代碼都是現(xiàn)成的,即基于模板的。
6. 技術(shù)債務(wù)及例外管理
技術(shù)債務(wù):
無(wú)法遵守原則會(huì)導(dǎo)致技術(shù)債務(wù)。
架構(gòu)師要理解債務(wù)的層次,對(duì)系統(tǒng)的影響,做出權(quán)衡
例外管理:
系統(tǒng)偏離了制定的原則和實(shí)踐式的處理方式。如果例外很多,要修改原則和實(shí)踐以應(yīng)對(duì)真正的需求。
比如:
在大多數(shù)場(chǎng)景下使用MySQL做存儲(chǔ),如果時(shí)數(shù)據(jù)快速增長(zhǎng)的場(chǎng)景,可以使用Cassandra
7. 治理:
COBIT(Control Objectives for Information and Related Technology)對(duì)治理的定義:
治理通過(guò)評(píng)估干系人的需求、當(dāng)前狀況及下一步的可能性來(lái)確保企業(yè)目標(biāo)的達(dá)成,通過(guò)排優(yōu)先級(jí)和做決策來(lái)設(shè)定方向。對(duì)于已經(jīng)達(dá)成一致的方向和目標(biāo)進(jìn)行監(jiān)督。
治理確保構(gòu)建的系統(tǒng)服務(wù)技術(shù)愿景,并在需要的時(shí)候?qū)υ妇斑M(jìn)行演化。
治理是個(gè)小組活動(dòng),小組由技術(shù)專(zhuān)家領(lǐng)導(dǎo),并要有一線(xiàn)人員參與。這個(gè)小組也負(fù)責(zé)跟蹤和管理技術(shù)風(fēng)險(xiǎn)。