云时代架构阅读笔记十五——架构设计思维(一)
對于架構(gòu)設(shè)計(jì)人們已經(jīng)提出了許多方法,分類為:工件驅(qū)動(dòng)的方法;用例驅(qū)動(dòng)的法;模式驅(qū)動(dòng)的方法;領(lǐng)域驅(qū)動(dòng)的方法。一個(gè)經(jīng)典的架構(gòu)設(shè)計(jì)過程模型,沿用了RUP中迭代增量的思想,由分析、描述、選擇、構(gòu)造和組合5個(gè)階段組成。
依據(jù)需求規(guī)格說明書分析出功能需求和架構(gòu)需求,通過用例和場景的描述,把需求分為關(guān)鍵的,次要的和可選的3類。關(guān)鍵需求決定架構(gòu),結(jié)合軟件架構(gòu)風(fēng)格和通用知識選擇最關(guān)鍵、影響最大的子系統(tǒng)分析設(shè)計(jì)并產(chǎn)生構(gòu)件。組合就是定義構(gòu)件接口,構(gòu)件作為一個(gè)封閉的功能實(shí)體,對外提供交互接口,并通過連接件將構(gòu)件連接起來形成最終的軟件架構(gòu)描述。5個(gè)階段是不斷迭代的過程,在每一次迭代中,都選取并實(shí)現(xiàn)一組用例和場景來確認(rèn)并完善架構(gòu)。
這個(gè)過程模型看似很流暢,但是,架構(gòu)師在設(shè)計(jì)時(shí)很難把握他的正確性和精準(zhǔn)性,而且用它架構(gòu)的系統(tǒng)是否對后續(xù)設(shè)計(jì)開發(fā)形成一種原則上的指導(dǎo)是很難說的。但是對于架構(gòu)師來說有些思路可以進(jìn)行參考,大致將架構(gòu)思維可以分為:分解、集成、分離、復(fù)用、分層、模式、抽象、結(jié)構(gòu)化、迭代、勿做過度設(shè)計(jì)這幾部分,按照這個(gè)思維方式來設(shè)計(jì)系統(tǒng)架構(gòu)。
分而治之是一種處理復(fù)雜問題的通用方法,在系統(tǒng)架構(gòu)中也是一種很重要的手段,例如多層架構(gòu)、OSI?七層模型都體現(xiàn)了分而治之思想。在架構(gòu)設(shè)計(jì)過程中,通過將關(guān)注點(diǎn)分離對架構(gòu)進(jìn)行多層次分解,將系統(tǒng)層層分解為多個(gè)架構(gòu)元素,進(jìn)而識別架構(gòu)元素。同時(shí)保證分解后的各個(gè)部分還能夠高內(nèi)聚,松耦合,最終又集成為一個(gè)完整的整體。分解核心是定義問題,因此架構(gòu)首先仍然需要理解清楚需求。
分解的作用:
?? ???1、應(yīng)用層:按照功能或者微服務(wù)進(jìn)行分解,將系統(tǒng)劃分未若干子系統(tǒng), 低耦合存在,在業(yè)務(wù)角度可以將單個(gè)應(yīng)用獨(dú)立為應(yīng)用單元(應(yīng)用單元是無狀態(tài)的),這樣可以靈活地進(jìn)行伸縮。
?? ???2、數(shù)據(jù)層:對數(shù)據(jù)庫進(jìn)行垂直拆分按照子系統(tǒng)緯度進(jìn)行分庫和水平拆分按照業(yè)務(wù)緯度進(jìn)行分表;但是進(jìn)行分庫分表中要避免分布式事務(wù),實(shí)在無法避免可利用消息系統(tǒng)來進(jìn)行規(guī)避。
?? ???3、代碼結(jié)構(gòu)層:代碼層一般分為三層,從下至上分別為:數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層(又或稱為領(lǐng)域?qū)?#xff09;、表示層。這也是Java?Web中重要的三層架構(gòu)中的三個(gè)層次。區(qū)分層次的目的即為了“高內(nèi)聚低耦合”的思想。
?????? 分解的原則:
?????? 業(yè)務(wù)原則:
??? 單一責(zé)任原則:對于一個(gè)微服務(wù)而言,具有有限的業(yè)務(wù)范圍,可以幫助我們滿足服務(wù)開發(fā)和交付的敏捷性;
適當(dāng)?shù)倪吔?#xff1a;關(guān)注微服務(wù)的功能范圍,一個(gè)服務(wù)的大小應(yīng)該等于滿足某個(gè)特定業(yè)務(wù)能力所需要的大小;
業(yè)務(wù)分層:?從整體規(guī)劃上把業(yè)務(wù)分層,形成單向依賴,避免微服務(wù)之間的網(wǎng)狀依賴關(guān)系;
顆粒度遞增:設(shè)計(jì)初期先把業(yè)務(wù)劃分到盡可能細(xì),然后依據(jù)其它原則合并到適當(dāng)顆粒度;
非唯一依賴:至少被2個(gè)以上其它微服務(wù)依賴的功能模塊,才有必要獨(dú)立成一個(gè)微服務(wù)。
技術(shù)原則:
部署獨(dú)立性:能獨(dú)立于其它微服務(wù)部署,一個(gè)微服務(wù)故障不影響其它微服務(wù);
動(dòng)態(tài)擴(kuò)展:每個(gè)微服務(wù)都可以動(dòng)態(tài)的進(jìn)行x軸和z軸的擴(kuò)展,并適應(yīng)云環(huán)境下的自動(dòng)化部署;(?參考這里?)
領(lǐng)域和應(yīng)用解耦:提供數(shù)據(jù)操作能力的領(lǐng)域服務(wù)和執(zhí)行業(yè)務(wù)邏輯的應(yīng)用服務(wù)解耦;
避免產(chǎn)生頻繁的跨庫查詢;
避免產(chǎn)生頻繁的分布式事務(wù)。
治理原則:
在業(yè)務(wù)分層的基礎(chǔ)上,根據(jù)業(yè)務(wù)細(xì)分規(guī)則,對微服務(wù)分組;
各個(gè)分組之間通過API網(wǎng)關(guān)集成;
通過API網(wǎng)關(guān)實(shí)現(xiàn)級輕量級消息路由,鑒權(quán);
運(yùn)行時(shí)管理,如服務(wù)降級,限流,監(jiān)控等可在API網(wǎng)關(guān)實(shí)現(xiàn),讓微服務(wù)功能純粹;
避免通過數(shù)據(jù)庫集成;
避免部署多個(gè)版本來兼容。
轉(zhuǎn)載于:https://www.cnblogs.com/DaisyYuanyq/p/11056077.html
總結(jié)
以上是生活随笔為你收集整理的云时代架构阅读笔记十五——架构设计思维(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 诺基亚塞班系列最强回顾(搬运整理)
- 下一篇: 解决 webpack-dev-serve