《微服務(wù)設(shè)計(jì)》讀書(shū)筆記(二)

演進(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)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容