互联网系统设计原则
互聯(lián)網(wǎng)業(yè)務(wù)背景
隨這移動互聯(lián)網(wǎng)、云計算、大數(shù)據(jù)、物聯(lián)網(wǎng)技術(shù)的發(fā)展,促進(jìn)電子商務(wù)、工業(yè)互聯(lián)網(wǎng)和互聯(lián)網(wǎng)金融等業(yè)務(wù)領(lǐng)域健康發(fā)展。無論是互聯(lián)網(wǎng)公司,還是傳統(tǒng)行業(yè),一切商業(yè)都將互聯(lián)網(wǎng)化,這幾乎是所有大佬能達(dá)成的唯一共識。所以目前我們面臨的首要任務(wù)就是構(gòu)建和改造我們的系統(tǒng)使其面向互聯(lián)網(wǎng)。
互聯(lián)網(wǎng)應(yīng)用的幾個特性:
? 高性能
? 高可用性
? 大數(shù)據(jù)
? 低成本
互聯(lián)網(wǎng)系統(tǒng)設(shè)計原則
面向互聯(lián)網(wǎng)化的過程中,系統(tǒng)架構(gòu)應(yīng)該按照以下幾個規(guī)則進(jìn)行設(shè)計。
1.1 業(yè)務(wù)架構(gòu)設(shè)計原則
1.1.1 業(yè)務(wù)平臺化
? 業(yè)務(wù)平臺相互獨立,如交易平臺、支付平臺、廣告平臺。
? 基礎(chǔ)業(yè)務(wù)下沉,可復(fù)用。如,用戶、商品、類目。
1.1.2 核心業(yè)務(wù)、非核心業(yè)務(wù)分離
? 系統(tǒng)核心業(yè)務(wù)與非核心業(yè)務(wù)分離,核心業(yè)務(wù)精簡(利于穩(wěn)定),非核心業(yè)務(wù)多樣化。如,如主交易服務(wù)、通用交易服務(wù)。
1.1.3 區(qū)分主流程、附流程
? 區(qū)分哪些是系統(tǒng)主流程。運(yùn)行時,優(yōu)先保證主流程順利完成,輔流程可以采用后臺異步化的方式。避免主流程失敗導(dǎo)致主流程的回滾。如,下單時,同步調(diào)用快照,異步通知臺賬,發(fā)表。
1.1.4 隔離不同類型的業(yè)務(wù)
? 交易業(yè)務(wù)就是簽訂買家、賣家之間的交易合同,需要確保高可用性,讓用戶能夠快速下單。
? 履約業(yè)務(wù)對可用性沒有太高的要求,可以優(yōu)先保證一致性。
? 秒殺業(yè)務(wù)對高并發(fā)要求很高,應(yīng)該跟普通業(yè)務(wù)隔離。
1.2 應(yīng)用架構(gòu)設(shè)計原則
1.2.1 穩(wěn)定性原則
? 一切以穩(wěn)定為中心
? 架構(gòu)盡可能簡單、清晰
? 不過度設(shè)計
1.2.2 解耦/拆分
? 穩(wěn)定部分與易變部分分離
? 核心業(yè)務(wù)與非核心業(yè)務(wù)分離
? 主流程與輔流程分離
? 應(yīng)用與數(shù)據(jù)分離
? 服務(wù)與實現(xiàn)細(xì)節(jié)分離
1.2.3 抽象化
? 應(yīng)用抽象化:應(yīng)用只依賴服務(wù)抽象,不依賴服務(wù)實現(xiàn)細(xì)節(jié)、位置
? 數(shù)據(jù)庫抽象化:應(yīng)用只依賴邏輯數(shù)據(jù)庫,不需要關(guān)心物理數(shù)據(jù)庫的位置和分片
? 服務(wù)器抽象化:應(yīng)用虛擬化部署,不需要關(guān)心實體機(jī)配置,動態(tài)調(diào)配資源
1.2.4 松耦合
? 跨域調(diào)用異步化:不同業(yè)務(wù)域之間盡量異步化解耦。
? 非核心業(yè)務(wù)盡量異步化:核心、非核心業(yè)務(wù)之間,盡量異步解耦
? 必須同步調(diào)用時,需要設(shè)置超時時間和任務(wù)隊列長度
1.2.5 容錯設(shè)計
? 服務(wù)治理:服務(wù)能彼此獨立修改、部署、發(fā)布和管理。避免引發(fā)連鎖反應(yīng)
? 集群容錯:
? 集群容錯:應(yīng)用系統(tǒng)集群,避免單點
? 多機(jī)房容災(zāi):多機(jī)房部署,多活
1.3 數(shù)據(jù)架構(gòu)設(shè)計原則
1.3.1 統(tǒng)一數(shù)據(jù)視圖
? 保證數(shù)據(jù)的及時性、一致性、準(zhǔn)確性、完整性
1.3.2 數(shù)據(jù)、應(yīng)用分離
? 應(yīng)用系統(tǒng)只能依賴邏輯數(shù)據(jù)庫
? 應(yīng)用系統(tǒng)不能直接訪問其他宿主的數(shù)據(jù)庫,只能通過服務(wù)訪問
1.3.3 數(shù)據(jù)異構(gòu)
? 源數(shù)據(jù)和目標(biāo)數(shù)據(jù)內(nèi)容相同時,做索引異構(gòu)。如,商品庫不同維度
? 內(nèi)容不同時,做數(shù)據(jù)庫異構(gòu)。如,訂單買家?guī)旌唾u家?guī)?/p>
1.3.4 數(shù)據(jù)讀寫分離
? 訪問量大的數(shù)據(jù)庫做讀寫分離
? 數(shù)據(jù)量大的數(shù)據(jù)庫做分庫分表
? 不同業(yè)務(wù)域數(shù)據(jù)庫做分區(qū)隔離
? 重要數(shù)據(jù)配置庫
1.3.5 合理使用緩存
? 數(shù)據(jù)庫有能力支撐時,盡量不要引入緩存
? 合理利用緩存做容災(zāi)
1.4 技術(shù)架構(gòu)設(shè)計原則-運(yùn)行時原則
1.4.1 可監(jiān)控
? 服務(wù)的TPS和RT是否符合SLA
? 是否出現(xiàn)超出預(yù)期流量
1.4.2 應(yīng)用可回滾,功能可降級
? 應(yīng)用出現(xiàn)問題時,要求能回滾到上一版本,或做功能開關(guān)或降級。
1.4.3 在線擴(kuò)容
? 超預(yù)期流量時,應(yīng)用系統(tǒng)可選擇在線水平擴(kuò)展
1.4.4 安全保證
? 確保系統(tǒng)保密性和完成性
? 具有足夠的防攻擊能力
1.4.5 可容錯
? 核心應(yīng)用要求多活,避免單點設(shè)計,并且自身有容錯和修改能力。故障時間TTR小
1.4.6 故障轉(zhuǎn)移
? 多機(jī)房部署,發(fā)生故障時,能即時切換
1.5 技術(shù)架構(gòu)設(shè)計原則-部署原則
1.5.1 N+1原則
? 確保為故障多搭一套系統(tǒng),避免單點問題。
? 功能開發(fā)與運(yùn)維分開。系統(tǒng)開發(fā)完成后,交給專業(yè)的運(yùn)維團(tuán)隊管理和運(yùn)營。
1.5.2 D-I-D原則
? 設(shè)計20倍的容量(Design)
? 實現(xiàn)3倍的容量(Implement)
? 部署1.5倍的容量(Deploy)
1.5.3 支持灰度發(fā)布
? 系統(tǒng)新上線,要求支持“灰度發(fā)布,分步切流量,故障回滾”
1.5.4 虛擬化部署
? 虛擬部署:系統(tǒng)采用虛擬機(jī)部署,節(jié)省資源和管理成本
1.5.5 業(yè)務(wù)子網(wǎng)
? 機(jī)房部署以業(yè)務(wù)域劃分:基本服務(wù)和數(shù)據(jù)庫,相同業(yè)務(wù)域的服務(wù)器部署在一起;不同業(yè)務(wù)域的服務(wù)器物理隔離
系統(tǒng)升級選取規(guī)則
對典型的社交類應(yīng)用的架構(gòu)及技術(shù)進(jìn)行分析,目前社交類應(yīng)用一般會包含的
架構(gòu)風(fēng)格有:微服務(wù),EDA、CQRS、前端 SPA,通過這些架構(gòu)風(fēng)格實現(xiàn)系統(tǒng)的可
擴(kuò)展性,高可用,以及在大用戶、高并發(fā)下的高性能等,具體的架構(gòu)風(fēng)格和關(guān)鍵
設(shè)計約束對應(yīng)關(guān)系如下:
總結(jié)
- 上一篇: Redis事务,ACID性质,但是Red
- 下一篇: 系统幂等性设计与实践