(轉(zhuǎn)載)架構(gòu)設(shè)計原則整理

架構(gòu)設(shè)計原則

常見架構(gòu)設(shè)計方案質(zhì)量屬性點有:性能蟹略、可用性挖炬、硬件成本、項目投入、復(fù)雜度空闲、安全性碴倾、可擴展性等掉丽。在評估這些質(zhì)量屬性時捶障,需要遵循架構(gòu)設(shè)計原則:1.合適原則项炼,2簡單原則示绊,避免貪大求全面褐,基本上某個質(zhì)量屬性能夠滿足以 一定時期業(yè)務(wù)發(fā)展就可以了取胎。

屬性 | 集群方案 | 拆分方案 | 備注 ---|---|---|--- 性能 | 中闻蛀,繼續(xù)擴展下去循榆,MySQL會成為瓶頸 | 高,系統(tǒng)拆分為子系統(tǒng)映挂,子系統(tǒng)又可以做成集群方案 | 拆分方案優(yōu) | 復(fù)雜度 | 低柑船,只需要引入Nginx做負載均衡 | 高鞍时,需要對系統(tǒng)和數(shù)據(jù)庫進行拆分 | 集群方案優(yōu) 成本 | 中扣蜻,需要增加web服務(wù)器 | 中莽使,需要增加web服務(wù)器和MySQL服務(wù)器芳肌,單MySQL服務(wù)器物流上可以共用亿笤,邏輯上分開即可| 集群方案稍微優(yōu)一點 可擴展 | 低,所有的功能繼續(xù)在同一個系統(tǒng)實現(xiàn)汪榔,系統(tǒng)會越來越復(fù)雜揍异,擴展越來越難 | 高,系統(tǒng)按照追責(zé)拆分為多個字系統(tǒng)辱姨,每個子系統(tǒng)可單獨擴展 | 拆分方案優(yōu) 可用性| 中雨涛,web服務(wù)器是集群模式替久,單MySQL是單點的躏尉,MySQL故障回你導(dǎo)致整個業(yè)務(wù)不可用 | 高胀糜,子系統(tǒng)是獨立的教藻,某個子系統(tǒng)故障不會導(dǎo)致整個業(yè)務(wù)不可用 | 拆分方案優(yōu)

Eg:架構(gòu)師選擇了Elasticsearch作為全文搜索解決方案括堤,前提必須是架構(gòu)師自己對Elasticsearch的設(shè)計原理有深入的理解,比如索引讥电、副本允趟、集群等技術(shù)點;而不能道聽途說Elasticsearch很牛分唾,所以你選擇它绽乔,更不能成為把“細節(jié)我們不討論”這句話掛在嘴邊的“PPT架構(gòu)師”碳褒。

架構(gòu)設(shè)計流程總結(jié):

設(shè)計架構(gòu)的時候,首先要分析出系統(tǒng)的復(fù)雜性两芳。

架構(gòu)師根據(jù)自己對業(yè)務(wù)的理解怖辆,挑選合適的架構(gòu)模式進行組合竖螃,再對組合后的方案進行修改和調(diào)整逗余。

新技術(shù)都是在現(xiàn)有技術(shù)的基礎(chǔ)上發(fā)展起來的录粱,現(xiàn)有技術(shù)又源于先前的技術(shù)关摇。

備選方案的數(shù)量以3~5個備選方案為最佳输虱。

備選方案的差異要比較明顯。

備選方案的技術(shù)不要只局限于已經(jīng)熟悉的技術(shù)愁茁。

通過360度環(huán)評的方式來評估備選方案鹅很。

按照質(zhì)量屬性的優(yōu)先級來判斷備選方案的優(yōu)劣促煮。

架構(gòu)師需要對技術(shù)的細節(jié)和原理有較深入的理解,避免成為“PPT架構(gòu)師”整袁。

通過分步驟菠齿、分階段、分系統(tǒng)等方式坐昙,盡量降低方案復(fù)雜度绳匀。

采取設(shè)計團隊的方式來進行設(shè)計,可以博采眾長,匯集團隊經(jīng)驗疾棵,減少思維和經(jīng)驗盲區(qū)戈钢。

存儲高性能總結(jié):

高性能數(shù)據(jù)庫集群的第一種方式是“讀寫分離”,其本質(zhì)是將訪問壓力分散到集群中的多個節(jié)點殉了,但是沒有分散存儲壓力。

數(shù)據(jù)庫讀寫分流需要考慮“復(fù)制延遲”帶來的復(fù)雜性嗜历。

數(shù)據(jù)庫讀寫分離的分配機制有兩種方式:程序代碼封裝和中間件封裝宣渗。

高性能數(shù)據(jù)庫集群的第二種方式是“分庫分表”,就可以分散訪問壓力梨州,又可以分散存儲壓力痕囱。

業(yè)務(wù)分庫指的是按照業(yè)務(wù)模塊將數(shù)據(jù)分散到不同的數(shù)據(jù)庫服務(wù)器。

業(yè)務(wù)分庫會引起join操作問題暴匠、事務(wù)問題鞍恢、成本問題三個復(fù)雜度相關(guān)的問題。

數(shù)據(jù)庫分表分為垂直分表和水平分表每窖。

垂直分表引入的復(fù)雜性主要體現(xiàn)在表操作的數(shù)量要增加帮掉。

水平分表引入了路由、join操作窒典、count()操作蟆炊、order by操作等復(fù)雜度問題。

K-V存儲在數(shù)據(jù)結(jié)構(gòu)方面相比關(guān)系型數(shù)據(jù)庫具備較大優(yōu)勢瀑志。

文檔數(shù)據(jù)庫最大的特點就是no-schema涩搓,可以存儲和讀取任意的數(shù)據(jù)。

列式存儲在某些場景下能夠大大節(jié)省I/O劈猪。

列式存儲具備很高的壓縮比昧甘,能夠節(jié)省存儲空間。

全文搜索引擎的基本源流是倒排索引战得。

為了讓全文搜索引擎支持關(guān)系型數(shù)據(jù)的全文搜索充边,需要做一些轉(zhuǎn)換操作,即將關(guān)系型數(shù)據(jù)轉(zhuǎn)換為文檔數(shù)據(jù)常侦。

緩存穿透是指業(yè)務(wù)系統(tǒng)查詢的數(shù)據(jù)在緩存系統(tǒng)中沒有的時候浇冰,每次查詢都會訪問存儲系統(tǒng)。

緩存雪崩是指當(dāng)緩存失效(過期)后引起系統(tǒng)性能急劇下降的情況聋亡。

緩存熱點指大部分甚至所有業(yè)務(wù)請求都命中同一份緩存數(shù)據(jù)湖饱。

計算高性能總結(jié):

RPC模型:每次有新的連接就新建一個進程去專門處理這個連接請求。

TPC模型:每次有新的連接就新建一個線程去專門處理這個連接的請求杀捻。

Reactor模型的基礎(chǔ)是I/O多路復(fù)用。

Proactor模型是非阻塞異步網(wǎng)絡(luò)模式。

常見的負載均衡系統(tǒng)有3種:DNS負載均衡致讥、硬件負載均衡和軟件負載均衡仅仆。

硬件負載均衡用于實現(xiàn)集群級別的負載均衡。

軟件負載均衡用于實現(xiàn)機器級別的負載均衡垢袱。

負載均衡算法分為:任務(wù)平分類墓拜、負載均衡類、性能最優(yōu)類和Hash類请契。

CAP總結(jié):

CAP理論三個核心要素:一致性咳榜、可用性和分區(qū)容忍性。

CAP理論指分布式系統(tǒng)中涉及讀寫操作時爽锥,一致性涌韩、可用性、分區(qū)容忍性三個要素只能保證兩個氯夷,另外一個必須被犧牲臣樱。

分布式系統(tǒng)理論上不可能選擇CA架構(gòu),只能選擇CP或AP架構(gòu)腮考。

CAP關(guān)注的粒度是數(shù)據(jù)雇毫,而不是整個系統(tǒng)。

CAP是忽略網(wǎng)絡(luò)延遲的踩蔚。

正常運行的情況下棚放,不存在CP和AP的選擇,可以同時滿足CA馅闽。

CAP中放棄某個要素并不等于什么都不做飘蚯,需要為分區(qū)恢復(fù)后做準(zhǔn)備。

ACID的應(yīng)用場景是數(shù)據(jù)庫事務(wù)捞蛋,CAP關(guān)注的是分布式系統(tǒng)數(shù)據(jù)讀寫孝冒。

BASE是CAP理論中的AP方案的延伸。

FMEA總結(jié):

FMEA是一種在各行各業(yè)都有廣泛應(yīng)用的可用性分析方法拟杉,通過對系統(tǒng)范圍內(nèi)潛在的故障模式加以分析庄涡,并按照嚴(yán)重程度進行分類,以確保失效對于系統(tǒng)的最終影響搬设。

FMEA分析方法很簡單穴店,就是一個FMEA分析表。

FMEA分析中的“功能點”是從用戶的角度來看的拿穴,而不是從系統(tǒng)各個模塊功能點劃分來看的泣洞。

FMEA分析中的“故障模式”的描述要盡量精確,多使用量化描述默色,避免使用泛化的描述球凰。

FMEA分析中的“嚴(yán)重程序”指站在業(yè)務(wù)的角度,故障的影響程度一般分為“致命/高/中/低/無“五個檔次。

FMEA分析中不同的”故障原因“發(fā)生概率呕诉、檢測手段和處理措施可能不同缘厢。

FMEA分析中的”風(fēng)險程度“就是綜合嚴(yán)重程度和故障概率來一起判斷某個故障的最終等級。

FMEA分析中不一定所有的問題都要解決甩挫,采取規(guī)避措施也可以贴硫。

存儲高可用總結(jié):

主備架構(gòu)中的”備機“主要還是起一個備份作用,并不承擔(dān)實際的業(yè)務(wù)讀寫操作伊者。

主從架構(gòu)中的主機負責(zé)讀寫操作英遭,從機只負責(zé)讀操作,不負責(zé)寫操作亦渗。

主備倒換和主從倒換架構(gòu)的復(fù)雜點主要體現(xiàn)在:狀態(tài)判斷挖诸、倒換決策和數(shù)據(jù)沖突修復(fù)三方面。

主主復(fù)制架構(gòu)必須保證數(shù)據(jù)能夠雙向復(fù)制央碟,而很多數(shù)據(jù)是不能雙向復(fù)制的税灌。

根據(jù)集群中機器承擔(dān)的不同角色來劃分,集群可以分為兩類:數(shù)據(jù)集中集群亿虽、數(shù)據(jù)分散集群菱涤。

數(shù)據(jù)集中集群可以看作一主多備或一主多從,但復(fù)雜度比主備或主從要高出很多洛勉。

數(shù)據(jù)分散集群中每臺服務(wù)器都會負責(zé)存儲一部分?jǐn)?shù)據(jù)和同時也會備份一部分?jǐn)?shù)據(jù)粘秆。

數(shù)據(jù)分區(qū)主要應(yīng)對地理級別的故障。

數(shù)據(jù)分區(qū)的復(fù)制規(guī)則分為集中式收毫、互備式和獨立式攻走。

計算高可用總結(jié):

主備架構(gòu)時計算高可用最簡單的架構(gòu),可以細分為冷備結(jié)構(gòu)和溫備架構(gòu)此再,常用溫備架構(gòu)昔搂。

計算高可用的主備架構(gòu)也比較適合與內(nèi)部管理系統(tǒng)、后臺管理系統(tǒng)這類使用人數(shù)不多输拇、使用頻率不高的業(yè)務(wù)摘符,不太適合在線的業(yè)務(wù)。

主從架構(gòu)與主備架構(gòu)相比策吠,發(fā)揮了硬件的性能逛裤,但設(shè)計要復(fù)雜一些。

高可用計算的集群根據(jù)集群中服務(wù)器節(jié)點角色的不同猴抹,可以分為對稱集群和非對稱集群带族。

對稱集群中每臺服務(wù)器的角色都是一樣的,都可以執(zhí)行所有任務(wù)蟀给。

非對稱集群中的服務(wù)器分為多個不同的角色蝙砌,不同角色執(zhí)行不同的任務(wù)阳堕。

非對稱集群相比負載均衡集群,設(shè)計復(fù)雜度主要體現(xiàn)在任務(wù)分配策略和角色分配策略會更加復(fù)雜择克。

業(yè)務(wù)高可用總結(jié):

異地多活架構(gòu)的關(guān)鍵點就是異地嘱丢、多活,其中異地就是指地理位置上不同的地方祠饺,多活就是指不同地理位置上的系統(tǒng)都能夠提供業(yè)務(wù)服務(wù)。

異地多活雖然功能很強大汁政,但也不是每個業(yè)務(wù)不管三七二十一都要上異地多活道偷。

如果業(yè)務(wù)規(guī)模很大,能夠做異地多活的情況下盡量實現(xiàn)異地多活记劈。

異地多活架構(gòu)可以分為同城異區(qū)勺鸦、跨城異地、跨國異地目木。

異地多活設(shè)計技巧:保證核心業(yè)務(wù)的異地多活换途、保證核心數(shù)據(jù)最終以執(zhí)行、采用多種手段同步數(shù)據(jù)刽射、只保證絕大部分用戶的異地多活军拟。

接口級故障的主要應(yīng)對方案:降級、熔斷誓禁、限流懈息、排隊。

降級的核心思想就是丟車保帥摹恰,優(yōu)先保證核心業(yè)務(wù)辫继。

限流指只允許系統(tǒng)能夠承受的用戶量進來訪問,超出系統(tǒng)訪問能力的用戶將被拋棄俗慈。

排隊實際上是限流的一個變種姑宽,限流是直接拒絕用戶,排隊是讓用戶等待很長水間闺阱。

可擴展模式總結(jié):

軟件系統(tǒng)與硬件和建筑系統(tǒng)最大的差異在于軟件是可擴展的炮车。

真正有生命力的軟件系統(tǒng)都是在不斷迭代和發(fā)展的。

所有可擴展性架構(gòu)設(shè)計馏颂,背后的基本思想都可以總結(jié)為一個字:拆示血。

面向流程拆分:分層架構(gòu)

面向服務(wù)拆分:SOA、微服務(wù)救拉。

面向功能拆分:微內(nèi)核架構(gòu)难审。

不同的拆分方式將得到不同的系統(tǒng)架構(gòu)。

分層架構(gòu)總結(jié):

分層架構(gòu)是很常見的架構(gòu)模式亿絮,也叫N層架構(gòu)告喊,通常情況下麸拄,N至少是2層,一般不超過5層黔姜。

C/S架構(gòu)拢切、B/S架構(gòu)劃分的對象是整個業(yè)務(wù)系統(tǒng),劃分的維度是職責(zé)秆吵,將不同的職責(zé)劃分到獨立層淮椰。

MVC架構(gòu)、MVP架構(gòu)劃分的對象是單個業(yè)務(wù)子系統(tǒng)纳寂,劃分的維度是職責(zé)主穗,將不同的職責(zé)劃分到獨立層。

邏輯分層架構(gòu)劃分的對象可以是單個業(yè)務(wù)子系統(tǒng)毙芜,也可以是整個業(yè)務(wù)系統(tǒng)忽媒,劃分的維度也是職責(zé)。

無論采用何種分層維度腋粥,分層架構(gòu)設(shè)計最核心的一點就是需要保證各層之間的差異足夠清晰晦雨,邊界足夠明顯。

分層架構(gòu)之所以能夠較好地支撐系統(tǒng)擴展隘冲,本質(zhì)在于:隔離關(guān)注點闹瞧。

分層架構(gòu)的一個特點就是層層傳遞。

分層架構(gòu)一個典型的缺點就是性能对嚼。

SOA架構(gòu)總結(jié):

SOA提出的背景是企業(yè)內(nèi)部的IT系統(tǒng)重復(fù)建設(shè)且效率低下夹抗。

SOA更多是在傳統(tǒng)企業(yè)(例如,制造業(yè)纵竖、金融業(yè)等)落地和推廣漠烧,在互聯(lián)網(wǎng)行業(yè)并沒有多大規(guī)模的時間和推廣。

SOA三個關(guān)鍵概念:服務(wù)靡砌、ESB和松耦合已脓。

SOA架構(gòu)中,每項業(yè)務(wù)功能都是一項服務(wù)通殃,服務(wù)就意味著對外提供開放的能力度液。

SOA使用ESB來屏蔽異構(gòu)系統(tǒng)對外提供各種不同的接口方式,以此來達到服務(wù)間高效的互聯(lián)互通画舌。

SOA解決了傳統(tǒng)IT系統(tǒng)重復(fù)建設(shè)和擴展效率低的問題堕担,但其本身也引入了更多的復(fù)雜性,SOA最廣為人詬病的就是ESB曲聂。

SOA的ESB設(shè)計也是無奈之舉霹购,企業(yè)在應(yīng)用SOA時,各種異構(gòu)的IT系統(tǒng)都已經(jīng)踩在很多年了朋腋,完全重寫或者按照統(tǒng)一標(biāo)準(zhǔn)進行改造的成本是非常大的齐疙,只能通過ESB方式其適配已經(jīng)存在的各種異構(gòu)系統(tǒng)膜楷。

微服務(wù)架構(gòu)總結(jié)

微服務(wù)概念的歷史要早得多,也不是Martin Flower創(chuàng)造出來的贞奋,Martin只是將微服務(wù)進行了系統(tǒng)的闡述赌厅。

微服務(wù)是一種和SOA相似但本質(zhì)上不同的架構(gòu)理念。

微服務(wù)的三個關(guān)鍵詞 : small(微小的)轿塔、lightweight(輕量的)特愿、automated(自動化)。

微服務(wù)和SOA不存在孰優(yōu)孰劣勾缭,只是應(yīng)用場景不同洽议。

微服務(wù)并不是沒有代價,而是會帶來系統(tǒng)復(fù)雜度漫拭、運維復(fù)雜度、性能下降等問題混稽。

微服務(wù)拆分的粒度遵循“三個火槍手”原則采驻。

真正決定微服務(wù)成敗的,恰恰是那個被大部分人都忽略的“automated”匈勋,而不是“l(fā)ightweight”和“small”礼旅。

微服務(wù)并不是很多人認為的那樣又簡單又輕量級,要做好微服務(wù)洽洁,基礎(chǔ)設(shè)施是必不可少的痘系。

微內(nèi)核架構(gòu)總結(jié)

微內(nèi)核架構(gòu)也被稱為插件化架構(gòu)(Plug-in-Architecture),是一種面向功能進行拆分的可擴展性架構(gòu)饿自。

微內(nèi)核架構(gòu)通常用于實現(xiàn)基于產(chǎn)品的應(yīng)用

微內(nèi)核架構(gòu)包含兩類組件:核心系統(tǒng)(core system) 和插件模塊(plug-in modules)汰翠。

微內(nèi)核的核心系統(tǒng)設(shè)計的關(guān)鍵技術(shù)有幾部分: 插件管理、插件連接和插件通信昭雌。

Eclipse采用OSGi標(biāo)準(zhǔn)后复唤,OSGi更是成為首選的插件化標(biāo)準(zhǔn)。


出處:https://zhuanlan.zhihu.com/p/150168153

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烛卧,一起剝皮案震驚了整個濱河市佛纫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌总放,老刑警劉巖呈宇,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異局雄,居然都是意外死亡甥啄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門哎榴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來型豁,“玉大人僵蛛,你說我怎么就攤上這事∮洌” “怎么了充尉?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衣形。 經(jīng)常有香客問我驼侠,道長,這世上最難降的妖魔是什么谆吴? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任倒源,我火速辦了婚禮,結(jié)果婚禮上句狼,老公的妹妹穿的比我還像新娘笋熬。我一直安慰自己,他們只是感情好腻菇,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布胳螟。 她就那樣靜靜地躺著,像睡著了一般筹吐。 火紅的嫁衣襯著肌膚如雪糖耸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天丘薛,我揣著相機與錄音嘉竟,去河邊找鬼。 笑死洋侨,一個胖子當(dāng)著我的面吹牛舍扰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播希坚,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼消约,長吁一口氣:“原來是場噩夢啊……” “哼迁央!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤僚碎,失蹤者是張志新(化名)和其女友劉穎蔗坯,沒想到半個月后植榕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻馁,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年售睹,在試婚紗的時候發(fā)現(xiàn)自己被綠了桩警。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡昌妹,死狀恐怖捶枢,靈堂內(nèi)的尸體忽然破棺而出握截,到底是詐尸還是另有隱情,我是刑警寧澤烂叔,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布谨胞,位于F島的核電站,受9級特大地震影響蒜鸡,放射性物質(zhì)發(fā)生泄漏胯努。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一逢防、第九天 我趴在偏房一處隱蔽的房頂上張望叶沛。 院中可真熱鬧,春花似錦忘朝、人聲如沸灰署。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氓侧。三九已至,卻和暖如春导狡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偎痛。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工旱捧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踩麦。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓枚赡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谓谦。 傳聞我的和親對象是個殘疾皇子贫橙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容