《從零開始學(xué)架構(gòu)》——照著做琳彩,你也能成為架構(gòu)師

第1章 架構(gòu)基礎(chǔ)

系統(tǒng)泛指由一群有關(guān)聯(lián)的個(gè)體組成,根據(jù)某種規(guī)則運(yùn)作蹦漠,能完成個(gè)別元件不能單獨(dú)完成的工作的群體椭员。它的意思是“總體”“整體”或“聯(lián)盟”。

子系統(tǒng)也是由一群有關(guān)聯(lián)的個(gè)體所組成的系統(tǒng)笛园,多半是更大的系統(tǒng)中的一部分隘击。

軟件模塊(Module)是一套一致而互相緊密關(guān)聯(lián)的軟件組織。它分別包含了程序和數(shù)據(jù)結(jié)構(gòu)兩部分研铆。

軟件組件定義為自包含的埋同、可編程的、可重用的棵红、與語言無關(guān)的軟件單元凶赁,軟件組件可以很容易被用于組裝應(yīng)用程序中。

軟件框架(Software Framework)窄赋,通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范哟冬,也指為了實(shí)現(xiàn)某個(gè)軟組件規(guī)范時(shí),提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品忆绰。

軟件架構(gòu)指軟件系統(tǒng)的頂層結(jié)構(gòu)浩峡。

同一款軟件系統(tǒng)從不同的角度進(jìn)行分解,會(huì)得到不同的架構(gòu)错敢。

架構(gòu)設(shè)計(jì)的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來的問題翰灾。

主要的軟件系統(tǒng)復(fù)雜度有高性能、高可用稚茅、可擴(kuò)展纸淮、低成本、安全亚享、規(guī)模幾種咽块。

第2章 架構(gòu)設(shè)計(jì)原則

架構(gòu)設(shè)計(jì)原則1:適合原則,適合的架構(gòu)優(yōu)于業(yè)界領(lǐng)先的架構(gòu)欺税。

真正優(yōu)秀的架構(gòu)都是在企業(yè)當(dāng)前人力侈沪、條件揭璃、業(yè)務(wù)等各種約束下設(shè)計(jì)出來的,能夠合理地將資源整合在一起并發(fā)揮出最大功效亭罪,并且能夠快速落地瘦馍。

架構(gòu)設(shè)計(jì)原則2:簡單原則,簡單的架構(gòu)優(yōu)于復(fù)雜的架構(gòu)应役。

軟件領(lǐng)域的復(fù)雜性體現(xiàn)在兩方面:結(jié)構(gòu)的復(fù)雜性情组、邏輯的復(fù)雜性。

架構(gòu)設(shè)計(jì)原則3:演化原則箩祥,架構(gòu)需要隨著業(yè)務(wù)的發(fā)展而不斷演化院崇。

對(duì)應(yīng)建筑來說,永恒是主題滥比;而對(duì)于軟件來說亚脆,變化才是主題。

軟件架構(gòu)設(shè)計(jì)類似于生物演化盲泛。

第3章 架構(gòu)設(shè)計(jì)流程

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

架構(gòu)師根據(jù)自己對(duì)業(yè)務(wù)的理解寺滚,挑選適合的架構(gòu)模式進(jìn)行組合柑营,再對(duì)組合后的方案進(jìn)行修改和調(diào)整。

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

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

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

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

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

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

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

通過分析步驟鼻百、分階段绞旅、分系統(tǒng)等方式,盡量降低方案復(fù)雜度温艇。

采取設(shè)計(jì)團(tuán)隊(duì)的方式來進(jìn)行設(shè)計(jì)因悲,可以博采眾長,匯集團(tuán)隊(duì)經(jīng)驗(yàn)勺爱,減少思維和經(jīng)驗(yàn)盲區(qū)晃琳。

第4章 存儲(chǔ)高性能

高性能數(shù)據(jù)庫集群的第一種方式是“讀寫分離”,其本質(zhì)是講訪問壓力分散到集群中的多個(gè)節(jié)點(diǎn),但是沒有分散存儲(chǔ)壓力蝎土。

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

數(shù)據(jù)庫讀寫分離的分配機(jī)制有兩種實(shí)現(xiàn)方式:程序代碼封裝和中間件封裝。

高性能數(shù)據(jù)庫集群的第二種方式是“分庫分表”誊涯,既可以分散訪問壓力,又可以分散存儲(chǔ)壓力蒜撮。

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

業(yè)務(wù)分庫會(huì)引入 join 操作問題、事務(wù)問題段磨、成本問題三個(gè)復(fù)雜度相關(guān)的問題取逾。

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

垂直分表引入的復(fù)雜性重要體現(xiàn)在表操作數(shù)據(jù)要增加苹支。

水平分表引入了路由砾隅、join 操作、count() 操作债蜜、order by 操作等復(fù)雜問題晴埂。

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

文檔數(shù)據(jù)庫最大的特點(diǎn)就是 no-schema寻定,可以存儲(chǔ)和讀取任意的數(shù)據(jù)儒洛。

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

列式存儲(chǔ)具備很高的壓縮比狼速,能夠節(jié)省存儲(chǔ)空間琅锻。

全文搜索引擎的基本原理是倒排索引。

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

緩存穿透是指當(dāng)業(yè)務(wù)系統(tǒng)查詢的數(shù)據(jù)在存儲(chǔ)系統(tǒng)中沒有的時(shí)候僵芹,每次查詢都會(huì)訪問存儲(chǔ)系統(tǒng)处硬。

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

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

第5章 計(jì)算高性能

PPC 模型:每次有新的連接就新建一個(gè)進(jìn)程去專門處理這個(gè)連接的請求郁油。

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

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

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

常見的負(fù)載均衡系統(tǒng)有3種:DNS 負(fù)載均衡、硬件負(fù)載均衡和軟件負(fù)載均衡苟径。

DNS 是最簡單的也是最常見的負(fù)載均衡方式案站,一般用來實(shí)現(xiàn)地理級(jí)別的均衡。

硬件負(fù)載均衡用于實(shí)現(xiàn)集群級(jí)別的負(fù)載均衡棘街。

軟件負(fù)載均衡用于實(shí)現(xiàn)機(jī)器級(jí)別的負(fù)載均衡蟆盐。

負(fù)載均衡的算法分為:任務(wù)平分類承边、負(fù)載均衡類、性能最優(yōu)類和 Hash 類石挂。

第6章 CAP

CAP 理論三個(gè)核心要素:一致性博助、可用性、和分區(qū)容忍性痹愚。

CAP 理論指分布式系統(tǒng)中涉及讀寫操作時(shí)富岳,一致性、可用性拯腮、分區(qū)容忍性三個(gè)要素只能保證兩個(gè)窖式,另外一個(gè)必須被犧牲。

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

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

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

正常運(yùn)行情況下,不存在 CP 和 AP 的選擇肩碟,可以同時(shí)滿足 CA强窖。

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

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

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

第7章 FMEA

FMEA 是一種在各行各業(yè)都有廣泛應(yīng)用的可用性分析方法咙崎,通過對(duì)系統(tǒng)范圍內(nèi)潛在的故障模式加以分析,并按照嚴(yán)重程度進(jìn)行分類吨拍,以確定失效對(duì)于系統(tǒng)的最終影響褪猛。

FMEA 分析方法很簡單,就是一個(gè) FMEA 分析表羹饰。

FMEA 分析中的“功能點(diǎn)”是從用戶的角度來看的伊滋,而不是從系統(tǒng)各個(gè)模塊功能點(diǎn)劃分來看的。

FMEA 分析中的“故障模式”的描述要盡量精確队秩,多使用量化描述笑旺,避免使用泛化的描述。

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

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

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

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

第8章 存儲(chǔ)高可用

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

主從架構(gòu)中的主機(jī)負(fù)責(zé)讀寫操作,從機(jī)只負(fù)責(zé)讀操作荠察,不負(fù)責(zé)寫操作置蜀。

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

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

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

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

數(shù)據(jù)分散集群中每臺(tái)服務(wù)器都會(huì)負(fù)責(zé)存儲(chǔ)一部分?jǐn)?shù)據(jù)绍哎,同時(shí)也會(huì)備份一部分?jǐn)?shù)據(jù)来农。

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

數(shù)據(jù)分區(qū)的復(fù)制規(guī)則分為集中式崇堰、互備式和獨(dú)立式沃于。

第9章 計(jì)算高可用

主備架構(gòu)是計(jì)算高可用最簡單的架構(gòu),可以細(xì)分為冷備架構(gòu)和溫備架構(gòu)海诲,常用溫備架構(gòu)繁莹。

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

主從架構(gòu)與主備架構(gòu)相比蚯斯,發(fā)揮了硬件的性能薄风,但設(shè)計(jì)要復(fù)雜一些。

高可用計(jì)算的集群根據(jù)集群中服務(wù)器節(jié)點(diǎn)角色的不同拍嵌,可以分為對(duì)稱集群和非對(duì)稱集群遭赂。

對(duì)稱集群中每個(gè)服務(wù)器的角色都一樣的,都可以執(zhí)行所有任務(wù)撰茎。

非對(duì)稱集群中的服務(wù)器分為多個(gè)不同的角色嵌牺,不同角色執(zhí)行不同的任務(wù)。

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

第10章 業(yè)務(wù)高可用

異地多活架構(gòu)的關(guān)鍵點(diǎn)就是異地募疮、多活,其中異地就是指地理位置上不同的地方僻弹,多活就是指不同地理位置上的系統(tǒng)都能提供業(yè)務(wù)服務(wù)阿浓。

異地多活雖然功能強(qiáng)大,但也不是每個(gè)業(yè)務(wù)不管三七二十一都要上異地多活蹋绽。

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

異地多活架構(gòu)可以分為同城異地卸耘、跨城異地退敦、跨國異地。

同城異區(qū)指的是將業(yè)務(wù)部署在同一個(gè)城市不同區(qū)的多個(gè)機(jī)房蚣抗。

同城異區(qū)的兩個(gè)機(jī)房能夠?qū)崿F(xiàn)和同一個(gè)機(jī)房內(nèi)幾乎一樣的網(wǎng)絡(luò)傳輸速度侈百,這就意味著雖然是兩個(gè)不同地理位置上機(jī)房,但邏輯上我們可以將它們看作是同一個(gè)機(jī)房翰铡。

跨城異地指的是業(yè)務(wù)部署在不同城市的多個(gè)機(jī)房钝域,而且距離最好遠(yuǎn)一些。

跨城異地距離較遠(yuǎn)帶來的網(wǎng)絡(luò)傳輸延遲問題锭魔,給業(yè)務(wù)多活架構(gòu)設(shè)計(jì)帶來了復(fù)雜性例证。

跨國異地指的是將業(yè)務(wù)部署在不同國家的多個(gè)機(jī)房。

跨國異地主要適應(yīng)兩種場景:為不同地區(qū)的用戶提供服務(wù)迷捧,為全球用戶提供只讀服務(wù)织咧。

異地多活設(shè)計(jì)技巧一:保證核心業(yè)務(wù)的異地多活。

異地多活設(shè)計(jì)技巧二:保證核心數(shù)據(jù)最終一致性党涕。

異地多活設(shè)計(jì)技巧三:采用多種手段同步數(shù)據(jù)烦感。

異地多活設(shè)計(jì)技巧四:只保證絕大部分用戶的異地多活。

接口級(jí)故障的主要應(yīng)對(duì)方案:降級(jí)膛堤、熔斷手趣、限流、排隊(duì)肥荔。

降級(jí)的核心思想就是丟車保帥绿渣,優(yōu)先保證核心業(yè)務(wù)。

限流指只允許系統(tǒng)能夠承受的用戶量進(jìn)來訪問燕耿,超出系統(tǒng)訪問能力的用戶將被拋棄中符。

排隊(duì)實(shí)際上是限流的一種變種,限流是直接拒絕用戶誉帅,排隊(duì)是讓用戶等待很長時(shí)間淀散。

第11章 可擴(kuò)展模式

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

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

所有可擴(kuò)展性架構(gòu)設(shè)計(jì)档插,背后的基本思想都可以總結(jié)為一個(gè)字:拆慢蜓。

拆分軟件系統(tǒng)的方式有三種:面向流程拆分、面向服務(wù)拆分和面向功能拆分郭膛。

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

第12章 分層架構(gòu)

分層架構(gòu)是很常見的架構(gòu)模式,也叫N層架構(gòu)则剃,通常情況下耘柱,N至少是2層,一般不超過5層棍现。

C/S架構(gòu)寂玲、B/S架構(gòu)劃分的對(duì)象是整個(gè)業(yè)務(wù)系統(tǒng)搞隐,劃分的維度是用戶交互遥倦。

MVC架構(gòu)孝治,MVP架構(gòu)劃分的對(duì)象是單個(gè)業(yè)務(wù)子系統(tǒng)省咨,劃分的維度是職責(zé)想鹰,將不同的職責(zé)劃分到獨(dú)立層黔牵。

邏輯分層架構(gòu)劃分的對(duì)象可以是單個(gè)業(yè)務(wù)子系統(tǒng)斗蒋,也可以是整個(gè)業(yè)務(wù)系統(tǒng)坚洽,劃分的維度也是職責(zé)戈稿。

無論采用何種分層維度,分層架構(gòu)設(shè)計(jì)最核心的一點(diǎn)就是需要保證各層之間的差異足夠清晰讶舰,邊界足夠明顯鞍盗。

分層架構(gòu)之所以能夠較好地支撐系統(tǒng)擴(kuò)展,本質(zhì)在于:隔離關(guān)鍵點(diǎn)跳昼。

分層架構(gòu)的一個(gè)特點(diǎn)就是層層傳遞般甲。

分成架構(gòu)一個(gè)典型的缺點(diǎn)就是性能。

第13章 SOA 架構(gòu)

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

SOA 更多的是在傳統(tǒng)企業(yè)(例如敷存,制造業(yè)、金融業(yè)等)落地和推廣堪伍,在互聯(lián)網(wǎng)行業(yè)并沒有大規(guī)模的實(shí)踐和推廣锚烦。

SOA 三個(gè)關(guān)鍵概念:服務(wù)、ESB和松耦合帝雇。

SOA 架構(gòu)中涮俄,每項(xiàng)業(yè)務(wù)功能都是一項(xiàng)服務(wù),服務(wù)就意味著要對(duì)外提供開發(fā)的能力尸闸。

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

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

SOA 的 ESB 設(shè)計(jì)也是無奈之舉,企業(yè)在應(yīng)用 SOA 時(shí)野来,各種異構(gòu)的IT系統(tǒng)都已經(jīng)存在很多年了恼除,完全重寫或按照統(tǒng)一標(biāo)準(zhǔn)進(jìn)行改造的成本是非常大的,只能通過 ESB 方式去適應(yīng)已經(jīng)存在的各種異構(gòu)系統(tǒng)曼氛。

第14章 微服務(wù)

微服務(wù)概念的歷史要早得多豁辉,也不是 Martin Flower 創(chuàng)造出來的,Martin 只是將微服務(wù)進(jìn)行了系統(tǒng)的闡述舀患。

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

微服務(wù)的三個(gè)關(guān)鍵詞:small、lightweight聊浅、automated餐抢。

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

微服務(wù)并不是沒有代價(jià)旷痕,而且會(huì)帶來系統(tǒng)復(fù)雜度、運(yùn)維復(fù)雜度顽冶、性能下降等問題欺抗。

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

真正決定微服務(wù)成敗的强重,恰恰是那個(gè)被大部分人都忽略的“automated”绞呈,而不是“small”和“l(fā)ightweight”。

微服務(wù)并不是很多人認(rèn)為的那樣又簡單又輕量級(jí)间景,要做好微服務(wù)佃声,基礎(chǔ)設(shè)施是必不可少的。

第15章 微內(nèi)核架構(gòu)

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

第16章 消息隊(duì)列設(shè)計(jì)實(shí)戰(zhàn)

識(shí)別復(fù)雜度對(duì)架構(gòu)師來說是一項(xiàng)挑戰(zhàn)圾亏,因?yàn)樵嫉男枨笾胁]有哪個(gè)地方會(huì)明確地說復(fù)雜度在哪里,需要架構(gòu)師在理解需求的基礎(chǔ)上進(jìn)行分析碗誉。

有經(jīng)驗(yàn)的架構(gòu)師可能一看需求就知道復(fù)雜度大概在哪里召嘶,如果經(jīng)驗(yàn)不足,則只能采取“排查法”哮缺,從不同的角度逐一進(jìn)行分析弄跌。

架構(gòu)師關(guān)注的不是一天的數(shù)據(jù),而是一秒的數(shù)據(jù)尝苇,即 TPS 和 QPS铛只。

備選方案的選擇和很多因素相關(guān)埠胖,并不單單考慮性能高低、技術(shù)是否優(yōu)越這些純技術(shù)因素淳玩,業(yè)務(wù)的需求特點(diǎn)直撤、運(yùn)維團(tuán)隊(duì)的經(jīng)驗(yàn)、已有的技術(shù)體系蜕着、團(tuán)隊(duì)人員的技術(shù)水平都會(huì)影響備選方案的選擇谋竖。

架構(gòu)設(shè)計(jì)的目的不是證明自己(參考架構(gòu)設(shè)計(jì)原則1:適合原則),而是更快更好地滿足業(yè)務(wù)需求承匣。

第17章 互聯(lián)網(wǎng)架構(gòu)演進(jìn)

產(chǎn)品類業(yè)務(wù):技術(shù)創(chuàng)新推動(dòng)業(yè)務(wù)發(fā)展蓖乘。

“服務(wù)”類業(yè)務(wù):業(yè)務(wù)發(fā)展推動(dòng)技術(shù)的發(fā)展。

架構(gòu)師需要基于業(yè)務(wù)發(fā)展階段判斷出系統(tǒng)當(dāng)前面臨的主要復(fù)雜度韧骗。

互聯(lián)網(wǎng)業(yè)務(wù)千差萬別嘉抒,但都具有“規(guī)模決定一切”的特點(diǎn)。

互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展一般分為幾個(gè)時(shí)期:初創(chuàng)期袍暴、快速發(fā)展期些侍、競爭期、成熟期政模。

互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展第一個(gè)主要方向就是“業(yè)務(wù)越來越復(fù)雜”岗宣。

互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展的第二個(gè)主要方向就是“用戶量越來越大”。

互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展帶來復(fù)雜度的本質(zhì)原因其實(shí)都是“量變帶來質(zhì)變”淋样。

第18章 物聯(lián)網(wǎng)架構(gòu)模板

NoSQL 不是 No SQL狈定,而是 Not Only SQL,即 NoSQL 是 SQL 的補(bǔ)充习蓬。

NoSQL 發(fā)展到一定規(guī)模后,一般都是走集群路線措嵌。

在開源方案的基礎(chǔ)上封裝一個(gè)小文件存儲(chǔ)平臺(tái)并不是太難的事情躲叼。

大數(shù)據(jù)存儲(chǔ)和處理反而是最簡單的,因?yàn)槟銊e無選擇企巢,只能用這幾個(gè)流行的開源方案枫慷。

框架的選擇,有一個(gè)總的原則:優(yōu)選成熟的框架浪规,避免盲目追逐新技術(shù)或听!

互聯(lián)網(wǎng)行業(yè)基本上都是“拿來主義”,挑選一個(gè)流行的開源服務(wù)即可笋婿。

配置中心主要為了解決系統(tǒng)數(shù)量增多后配置管理復(fù)雜和效率低下的問題誉裆。

服務(wù)中心目的是解決跨系統(tǒng)依賴的“配置”和“調(diào)度”問題。

消息隊(duì)列目的是為了實(shí)現(xiàn)跨系統(tǒng)異步通知缸濒。

DNS 是最簡單也是最常見的負(fù)載均衡方式足丢,一般用來實(shí)現(xiàn)地理級(jí)別的均衡粱腻。

Nginx & LVS & F5 用于同一地點(diǎn)內(nèi)機(jī)器級(jí)別的負(fù)載均衡。

CDN 是為了解決用戶網(wǎng)絡(luò)訪問時(shí)的“最后一公里”效應(yīng)斩跌,本質(zhì)上是一種“以空間換時(shí)間”的加速策略绍些。

多機(jī)房設(shè)計(jì)最核心的設(shè)計(jì)因素就是如何處理時(shí)延帶來的影響。

多中心必須以多機(jī)房為前提耀鸦,但從設(shè)計(jì)的角度來看柬批,多中心相比多機(jī)房是本質(zhì)上的飛越,難度也高出一個(gè)等級(jí)袖订。

用戶管理系統(tǒng)兩個(gè)核心職責(zé):單點(diǎn)登錄和第三方授權(quán)登錄氮帐。

消息推送主要包含 3 個(gè)功能:設(shè)備管理(唯一標(biāo)識(shí)、注冊和注銷)著角、連接管理和消息管理揪漩。

除非 BAT 級(jí)別,一般不建議自己再重復(fù)造輪子了吏口,直接買圖片云和存儲(chǔ)云服務(wù)可能是最快又最經(jīng)濟(jì)的方式奄容。

業(yè)務(wù)層降低復(fù)雜性最好的方式就是“拆”,化整為零产徊、分而治之昂勒,將整體復(fù)雜性分散到多個(gè)子業(yè)務(wù)或子系統(tǒng)里面去。

運(yùn)維平臺(tái)核心的職責(zé)分為四大塊:配置舟铜、部署戈盈、監(jiān)控和應(yīng)急。

測試平臺(tái)的核心目的是提升測試效率谆刨,從而提升產(chǎn)品質(zhì)量塘娶,其設(shè)計(jì)關(guān)鍵就是自動(dòng)化。

數(shù)據(jù)平臺(tái)的核心職責(zé)主要包括三個(gè)部分:數(shù)據(jù)管理痊夭、數(shù)據(jù)分析和數(shù)據(jù)應(yīng)用刁岸。

管理平臺(tái)的核心職責(zé)就是權(quán)限管理。

第19章 架構(gòu)重構(gòu)

期望通過架構(gòu)重構(gòu)來解決所有問題當(dāng)然是不現(xiàn)實(shí)的她我。

架構(gòu)師的首要任務(wù)是從一大堆紛繁復(fù)雜的問題中識(shí)別出真正要通過架構(gòu)重構(gòu)來解決的問題虹曙,集中力量快速解決,而不是想著通過架構(gòu)重構(gòu)來解決所有問題番舆。

真正推動(dòng)一個(gè)架構(gòu)重構(gòu)項(xiàng)目啟動(dòng)酝碳,需要花費(fèi)大量的精力進(jìn)行游說和溝通。

架構(gòu)重構(gòu)溝通協(xié)調(diào)時(shí)恨狈,將技術(shù)語音轉(zhuǎn)換為通俗語言疏哗,以事實(shí)說話,以數(shù)據(jù)說話禾怠,是溝通的關(guān)鍵沃斤。

架構(gòu)重構(gòu)涉及關(guān)聯(lián)方配合時(shí)圣蝎,有效的溝通策略是“換位思考、合作雙贏衡瓶、關(guān)注長期”徘公。

架構(gòu)重構(gòu)需要采取“分段實(shí)施”策略,將要解決的問題根據(jù)優(yōu)先級(jí)哮针、重要性关面、實(shí)施難度等劃分為不同階段,每個(gè)階段聚焦于一個(gè)整體的目標(biāo)十厢。

真正的架構(gòu)師等太,必須具備一定的項(xiàng)目經(jīng)理技能,但更重要的還是技術(shù)能力蛮放。

第20章 開源系統(tǒng)

選開源方案時(shí)缩抡,聚焦于是否滿足業(yè)務(wù),而不需要過于關(guān)注開源方案是否優(yōu)秀包颁。

選擇開源項(xiàng)目時(shí)瞻想,盡量選擇成熟的開源項(xiàng)目。

選擇開源項(xiàng)目時(shí)娩嚼,除了關(guān)注技術(shù)指標(biāo)蘑险,還要關(guān)注運(yùn)維能力。

開源項(xiàng)目不能簡單“拿來主義”岳悟,而要深入研究和仔細(xì)測試佃迄。

使用開源項(xiàng)目時(shí)對(duì)線上環(huán)境和風(fēng)險(xiǎn)要有敬畏之心,小心應(yīng)用贵少,灰度發(fā)布呵俏。

無論什么開源方案,都需要考慮應(yīng)急的備選方案滔灶。

如果需要修改開源系統(tǒng)柴信,不要改動(dòng)原系統(tǒng),而是要開發(fā)輔助系統(tǒng)宽气。

選與不選開源項(xiàng)目,核心還是成本和收益問題潜沦,并不是說選擇開源項(xiàng)目就一定是最優(yōu)的方案萄涯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唆鸡,隨后出現(xiàn)的幾起案子涝影,更是在濱河造成了極大的恐慌,老刑警劉巖争占,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燃逻,死亡現(xiàn)場離奇詭異序目,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伯襟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門猿涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姆怪,你說我怎么就攤上這事叛赚。” “怎么了稽揭?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵俺附,是天一觀的道長。 經(jīng)常有香客問我溪掀,道長事镣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任揪胃,我火速辦了婚禮璃哟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘只嚣。我一直安慰自己沮稚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布册舞。 她就那樣靜靜地躺著蕴掏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪调鲸。 梳的紋絲不亂的頭發(fā)上盛杰,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音藐石,去河邊找鬼即供。 笑死,一個(gè)胖子當(dāng)著我的面吹牛于微,可吹牛的內(nèi)容都是我干的逗嫡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼株依,長吁一口氣:“原來是場噩夢啊……” “哼驱证!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恋腕,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤抹锄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伙单,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡获高,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吻育。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片念秧。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扫沼,靈堂內(nèi)的尸體忽然破棺而出出爹,到底是詐尸還是另有隱情,我是刑警寧澤缎除,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布严就,位于F島的核電站,受9級(jí)特大地震影響器罐,放射性物質(zhì)發(fā)生泄漏梢为。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一轰坊、第九天 我趴在偏房一處隱蔽的房頂上張望铸董。 院中可真熱鬧,春花似錦肴沫、人聲如沸粟害。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悲幅。三九已至,卻和暖如春站蝠,著一層夾襖步出監(jiān)牢的瞬間汰具,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工菱魔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留留荔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓澜倦,卻偏偏與公主長得像聚蝶,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藻治,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344