《架構(gòu)真經(jīng)》筆記

《架構(gòu)即未來(lái)》和《架構(gòu)真經(jīng)》是架構(gòu)姊妹篇,本來(lái)想兩本都買(mǎi)來(lái)學(xué)習(xí),但是《架構(gòu)即未來(lái)》看了一下目錄贮尖,感覺(jué)偏“道”一些,理解和應(yīng)用有些難度趁怔,沒(méi)有《架構(gòu)真經(jīng)》的實(shí)戰(zhàn)性這么強(qiáng)湿硝。以下內(nèi)容是基于《架構(gòu)真經(jīng)》中的一些架構(gòu)原則做了整理薪前,方便閱讀。

架構(gòu)設(shè)計(jì)原則.png

1.數(shù)據(jù)庫(kù)

1.1.評(píng)估規(guī)則

  • 數(shù)據(jù)量关斜、存儲(chǔ)量
  • 響應(yīng)時(shí)間長(zhǎng)短
  • 關(guān)系

1.2.關(guān)注明鎖和監(jiān)控暗鎖

最大化數(shù)據(jù)庫(kù)并發(fā)和吞吐量

1.3.禁用分階段提交事務(wù)

容易阻塞其它事務(wù)

1.4.永遠(yuǎn)不要為確認(rèn)操作是否有效而讀取剛剛寫(xiě)入的數(shù)據(jù)

1.5.nosql

  • no select for update
  • no select *

2.緩存設(shè)計(jì)

2.1.利用CDN緩存

  • 加快訪問(wèn)速度
  • 動(dòng)靜分離

2.2.httpheader

max-age
Expires
cache-control
Last-Modified
ETags

2.3.應(yīng)用緩存

緩存命中率>85%


3.分布式系統(tǒng)設(shè)計(jì)

3.1.CAP要求不能同時(shí)滿足

  • 一致性C
    從客戶角度看示括,一組操作同時(shí)發(fā)生
  • 可用性A
    每個(gè)操作必須都能收到預(yù)期的響應(yīng)
  • 分區(qū)容錯(cuò)性P
    即使個(gè)別消息丟失,操作仍然可以完成
  • 解決

[BASE思想]
o o 基本可用BA
o o 軟狀態(tài)S
o o 最終一致E
[放寬時(shí)間約束]
o o 放寬一致性可以使我們?cè)诮鉀Q擴(kuò)展問(wèn)題時(shí)有更大的靈活性

  • 無(wú)狀態(tài)實(shí)施方案

4.方案設(shè)計(jì)

4.1.采用帕累托原則簡(jiǎn)化范圍

80-20原則痢畜,收益的80%來(lái)自于20%的工作

4.2.考慮成本優(yōu)化和可擴(kuò)展性簡(jiǎn)化設(shè)計(jì)

4.2.1.擴(kuò)展性設(shè)計(jì)

DID方法

  • Implement(I) 實(shí)施3倍的容量
  • Design(D) 設(shè)計(jì)20倍的容量
  • Deploy(D) 部署1.5倍的容量

4.3.依靠其他人的經(jīng)驗(yàn)來(lái)簡(jiǎn)化部署


5.拆分和擴(kuò)展

5.1.水平擴(kuò)展(X軸)

5.1.1.復(fù)制服務(wù)或者數(shù)據(jù)庫(kù)分散事務(wù)處理負(fù)載
  • 數(shù)據(jù)庫(kù)讀寫(xiě)分離
  • 多部署服務(wù)實(shí)例
5.1.2.事務(wù)的ACID屬性
  • 原子性Atomicity
  • 一致性Consistency
  • 隔離性Isolation
  • 持久性Durability

5.2.拆分(Y軸)

5.2.1.垂直拆分垛膝,面向數(shù)據(jù)或者服務(wù)

服務(wù)拆分,例如拆分會(huì)員丁稀、商品吼拥、積分等

5.3.拆分(Z軸)

5.3.1.分片,把數(shù)據(jù)或者服務(wù)分割成幾塊
  • 例如擴(kuò)大客戶基數(shù)线衫,按照用戶ID取脑淇桑或者散列算法分片
  • 數(shù)據(jù)分片,理論上可以無(wú)限擴(kuò)存儲(chǔ)

6.避免工具被過(guò)度使用

  • 缺乏實(shí)驗(yàn)和使用新技術(shù)的勇氣授账,結(jié)果導(dǎo)致工具被鎖定和過(guò)渡使用
  • 我們都試圖使用熟悉的工具解決問(wèn)題矿酵,類(lèi)似技能的人員解決仍然會(huì)得到一致的答案,過(guò)度
    1)需要拿出一部分資源主動(dòng)分析、試驗(yàn)和采用新工具
    2)花時(shí)間學(xué)習(xí)新事物,保持開(kāi)放心態(tài)

7.避免過(guò)度設(shè)計(jì)

7.1.通過(guò)測(cè)試人員是否能夠輕松的理解解決方案來(lái)驗(yàn)證

7.2.過(guò)度設(shè)計(jì)分類(lèi)

  • 產(chǎn)品的設(shè)計(jì)和實(shí)施超過(guò)實(shí)際的需求
  • 把事情做得過(guò)于復(fù)雜和以復(fù)雜的方式去實(shí)現(xiàn)

7.3.好工程師的度量

多快簡(jiǎn)化一個(gè)復(fù)雜的問(wèn)題塞蹭,然后構(gòu)思出一個(gè)易于理解并可以維護(hù)的解決方案


8.流量風(fēng)險(xiǎn)

  • 空前極具增長(zhǎng)的大量用戶請(qǐng)求
  • 用戶行為都集中在少數(shù)熱點(diǎn)上

9.發(fā)現(xiàn)問(wèn)題

9.1.從失敗而不是成功中能學(xué)習(xí)到更多的東西

若隱藏失敗,結(jié)果必然是反復(fù)失敗

9.2.觀察客戶或用A/B Test驗(yàn)證

9.3.QA的作用以較低成本發(fā)現(xiàn)問(wèn)題

  • 提升工程速度和增加缺陷檢出率
  • QA不提升質(zhì)量
    代碼評(píng)審和測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD辜腺,提前編寫(xiě)測(cè)試代碼)可以提升質(zhì)量

9.4.代碼支持回滾能力

大部分回滾問(wèn)題出現(xiàn)在數(shù)據(jù)庫(kù)

  • 數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更僅可以增加,而不應(yīng)該刪除列或者表

9.5.測(cè)試

  • 單元測(cè)試
  • 系統(tǒng)測(cè)試
  • 回歸測(cè)試

最終實(shí)現(xiàn)完全自動(dòng)化


10.故障

10.1.設(shè)立故障隔離域建立“泳道”

不允許跨越泳道邊界進(jìn)行同步調(diào)用

  • 例如支付網(wǎng)關(guān)乍恐,每個(gè)客戶獨(dú)立網(wǎng)關(guān)泳道
    沿物理服務(wù)器邊界劃分泳道

10.2.消除單點(diǎn)故障(SPOF)

10.3.避免系統(tǒng)串聯(lián)

  • 串聯(lián)電路和并聯(lián)電路的優(yōu)劣勢(shì)
  • 減少串聯(lián)組件或增加并聯(lián)組件降低故障風(fēng)險(xiǎn)

10.4.增加上下線開(kāi)關(guān)


11.監(jiān)控

11.1.監(jiān)控目的

1)有問(wèn)題嗎评疗?
2)問(wèn)題在哪里?
3)有什么問(wèn)題茵烈?

11.2.監(jiān)控內(nèi)容

  • 應(yīng)用監(jiān)控
    告警無(wú)法確定對(duì)于客戶的實(shí)際影響
  • 業(yè)務(wù)監(jiān)控
  • 硬件監(jiān)控

11.3.監(jiān)控預(yù)測(cè)問(wèn)題是否可能發(fā)生

  • 控制圖的統(tǒng)計(jì)工具
  • 神經(jīng)元網(wǎng)絡(luò)或貝葉斯網(wǎng)絡(luò)這樣的機(jī)器學(xué)習(xí)算法

11.4.日志

11.4.1.使用自動(dòng)化的工具監(jiān)控日志
  • ELK
  • 檢索目標(biāo)行百匆、統(tǒng)計(jì)錯(cuò)誤
  • 超過(guò)預(yù)警閾值告警
11.4.2.日志是監(jiān)控、事件管理呜投、應(yīng)用調(diào)試的重要工具

12.數(shù)據(jù)中心

12.1.系統(tǒng)部署3個(gè)或更多活的數(shù)據(jù)中心

12.2.使用云平臺(tái)來(lái)解決突發(fā)增長(zhǎng)

  • 雙活遷移三活數(shù)據(jù)中心加匈,云可做第三數(shù)據(jù)中心
  • 批量處理、測(cè)試環(huán)境仑荐、或者峰值容量雕拼,可以考慮放云環(huán)境

12.3.分析

  • 歸納
    是從數(shù)據(jù)中形成假設(shè)的過(guò)程
  • 演繹
    是對(duì)數(shù)據(jù)進(jìn)行假設(shè)檢驗(yàn)以確定有效性的過(guò)程

12.4.數(shù)據(jù)梯級(jí)存儲(chǔ)策略

12.4.1.RFM方案
  • Recency數(shù)據(jù)多久前被訪問(wèn)過(guò)
    近因
  • Frequency數(shù)據(jù)多久被訪問(wèn)一次,即數(shù)據(jù)訪問(wèn)頻率
    頻率
  • Monetization特定數(shù)據(jù)對(duì)業(yè)務(wù)的價(jià)值
    貨幣化分析
12.4.2.存儲(chǔ)數(shù)據(jù)無(wú)價(jià)值
  • 不被訪問(wèn)的時(shí)間越久
  • 訪問(wèn)的頻率越低
  • 數(shù)據(jù)對(duì)業(yè)務(wù)價(jià)值越低

13.風(fēng)險(xiǎn)評(píng)估模型

13.1.風(fēng)險(xiǎn)=問(wèn)題發(fā)生的概率*發(fā)生的影響

13.2.發(fā)生的影響

13.2.1.服務(wù)不可用時(shí)間/數(shù)據(jù)損失百分比/受影響的響應(yīng)時(shí)間
13.2.2.影響的百分比
  • 影響客戶的百分比
  • 受影響功能的百分比

14.瀏覽器訪問(wèn)

14.1.減少域名解析

  • 瀏覽器對(duì)每個(gè)服務(wù)器或者網(wǎng)關(guān)代理的最大持久并發(fā)連接數(shù)有限制
    不要把所有對(duì)象放在同一個(gè)域里

14.2.減少頁(yè)面元素

  • 瀏覽器允許每個(gè)子域名擁有自己的最大并發(fā)連接數(shù)
  • 通過(guò)添加域名最大化并發(fā)連接數(shù)量
  • gzip壓縮

14.3.重定向

  • 重定向使用服務(wù)器配置實(shí)現(xiàn)粘招,避免代碼的解決方案
  • 重定向不利于搜索引擎收錄
  • http狀態(tài)碼301/302

14.4.使用cookie保存會(huì)話數(shù)據(jù)

  • cookie越大啥寇,頁(yè)面加載速度越慢
  • 使用https發(fā)送cookie

15.硬件網(wǎng)絡(luò)

15.1.采購(gòu)

  • 盡可能采用小型廉價(jià)的硬件
    處理器最多最大的設(shè)備往往是利潤(rùn)最高

15.2.防火墻

  • 不要用在低價(jià)值的靜態(tài)內(nèi)容防護(hù)上
  • 防火墻失敗是僅次于數(shù)據(jù)庫(kù)的第二大網(wǎng)站癱瘓黑手

16.異步通信

16.1.非關(guān)鍵請(qǐng)求

  • 請(qǐng)求以非阻塞方式發(fā)出,而且調(diào)用方不阻止等待響應(yīng)
    與MQ交互調(diào)用注意異步

16.2.使用原則

  • 外部API/第三方調(diào)用
  • 長(zhǎng)期運(yùn)行的進(jìn)程
    進(jìn)程長(zhǎng)時(shí)間運(yùn)行容易緩慢
  • 經(jīng)常改變且易出錯(cuò)/過(guò)于復(fù)雜的方法
    避免將關(guān)鍵代碼與復(fù)雜而且經(jīng)常改變的代碼捆綁在一起
  • 時(shí)間約束
    兩個(gè)進(jìn)程之間不存在時(shí)間約束,列如注冊(cè)成功和發(fā)送郵件辑甜,不能耽誤注冊(cè)頁(yè)面結(jié)果反饋給用戶

16.3.同步調(diào)用方式必須設(shè)置超時(shí)


PS:歡迎加個(gè)人微信交流 @jinleivinus 衰絮,也可以掃描以下二維碼,轉(zhuǎn)載請(qǐng)注明出處磷醋。


WechatIMG227
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猫牡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子子檀,更是在濱河造成了極大的恐慌镊掖,老刑警劉巖乃戈,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褂痰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡症虑,警方通過(guò)查閱死者的電腦和手機(jī)缩歪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谍憔,“玉大人匪蝙,你說(shuō)我怎么就攤上這事∠捌叮” “怎么了逛球?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)苫昌。 經(jīng)常有香客問(wèn)我颤绕,道長(zhǎng),這世上最難降的妖魔是什么祟身? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任奥务,我火速辦了婚禮,結(jié)果婚禮上袜硫,老公的妹妹穿的比我還像新娘氯葬。我一直安慰自己,他們只是感情好婉陷,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布帚称。 她就那樣靜靜地躺著,像睡著了一般秽澳。 火紅的嫁衣襯著肌膚如雪世杀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天肝集,我揣著相機(jī)與錄音瞻坝,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛所刀,可吹牛的內(nèi)容都是我干的衙荐。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浮创,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼忧吟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起斩披,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤溜族,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后垦沉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體煌抒,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年厕倍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寡壮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讹弯,死狀恐怖况既,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情组民,我是刑警寧澤棒仍,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站臭胜,受9級(jí)特大地震影響莫其,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庇楞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一榜配、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吕晌,春花似錦蛋褥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乏沸,卻和暖如春淫茵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹬跃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工匙瘪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓丹喻,卻偏偏與公主長(zhǎng)得像薄货,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碍论,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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