小米Notify系統(tǒng)的設(shè)計(jì)及其演化和升級變遷
大?。?/span>0.3 MB 人氣: 2017-10-10 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評論(0)
標(biāo)簽:
摘要:本文首先介紹小米網(wǎng)系統(tǒng)架構(gòu)的發(fā)展變化,然后介紹Notify系統(tǒng)的設(shè)計(jì),最后介紹Notify系統(tǒng)的演化與升級變遷。希望能給各位的工作帶來一些啟發(fā)與指導(dǎo)。為了適應(yīng)業(yè)務(wù)的高速發(fā)展,小米網(wǎng)的系統(tǒng)架構(gòu)經(jīng)歷了很多次變更。在此過程中,為了給各個(gè)子系統(tǒng)解耦合,同時(shí)保證最終一致性原則的實(shí)現(xiàn),我們建立了自己的異步消息系統(tǒng)——
Notify異步消息系統(tǒng)。
小米網(wǎng)架構(gòu)發(fā)展
小米網(wǎng)的發(fā)展大致可以分為三個(gè)階段:初創(chuàng)階段、發(fā)展階段、完善階段。
1. 初創(chuàng)階段
當(dāng)小米推出自己的第一部手機(jī)時(shí),為了減少渠道成本,我們開始推行電商直銷的商業(yè)模式,與此同時(shí),開始建設(shè)小米電商網(wǎng)站。最開始,小米的業(yè)務(wù)特點(diǎn)是:
SKU(商品品類)單一;訂單量巨大;瞬時(shí)訪問量巨大。
后兩點(diǎn)是在最初設(shè)計(jì)系統(tǒng)時(shí)完全沒有想到,因?yàn)楫?dāng)前我們并沒有預(yù)料到小米手機(jī)會如此受歡迎和供不應(yīng)求。
在這個(gè)階段,快速上線是第一目標(biāo),因?yàn)閳F(tuán)隊(duì)需要快速配合公司的手機(jī)銷售計(jì)劃。所以一開始小米網(wǎng)的架構(gòu)設(shè)計(jì)比較簡單,并沒有考慮高并發(fā)和大數(shù)據(jù)的情況。當(dāng)時(shí)系統(tǒng)從立項(xiàng)到上線僅兩個(gè)多月時(shí)間,并且只由三名工程師開發(fā)完成。

圖1 小米電商初期的系統(tǒng)架構(gòu)
從圖中可以看出,系統(tǒng)架構(gòu)只有兩個(gè)Web服務(wù)器與一個(gè)DB服務(wù)器,兩臺Web服務(wù)器互為主備,所有的業(yè)務(wù)功能集成在一個(gè)系統(tǒng)中。當(dāng)時(shí)的架構(gòu)設(shè)計(jì)僅能支持簡單的電商功能,我們預(yù)測每年的手機(jī)銷量能到30萬就已經(jīng)很好了。但是計(jì)劃永遠(yuǎn)趕不上變化,很快小米電商就遇到了第一個(gè)大問題:系統(tǒng)耦合度很高,導(dǎo)致當(dāng)搶購活動開始時(shí),其他業(yè)務(wù)都會受到影響。
2. 發(fā)展階段
為了解決上面的問題,需要對小米網(wǎng)的架構(gòu)進(jìn)行修改,把各種業(yè)務(wù)系統(tǒng)拆成獨(dú)立的子系統(tǒng)。這一時(shí)期小米電商的系統(tǒng)架構(gòu)發(fā)展的特點(diǎn)是:
業(yè)務(wù)系統(tǒng)的拆分,小米負(fù)責(zé)處理搶購請求的大秒系統(tǒng)就是在這一階段誕生的,將搶購業(yè)務(wù)帶來的系統(tǒng)壓力完全隔離開來,確保在搶購活動時(shí)小米的其他業(yè)務(wù)可以不受影響;小米的系統(tǒng)結(jié)構(gòu)SOA(面向服務(wù)的軟件結(jié)構(gòu))化,小米各系統(tǒng)之間的通信采用接口方式來實(shí)現(xiàn),甚至我們開發(fā)了一套通信協(xié)議,叫做X5協(xié)議,來規(guī)范接口的開發(fā)與調(diào)用。
這一階段小米網(wǎng)的架構(gòu)如下圖所示:

圖2 小米電商發(fā)展階段的系統(tǒng)架構(gòu)
從圖2可以看出,前端與后端系統(tǒng)完全獨(dú)立出來,當(dāng)前端進(jìn)行搶購活動時(shí),后端的客服、售后、物流三大服務(wù)系統(tǒng)不會受到任何影響。圖2中所列舉的子系統(tǒng)只是小米網(wǎng)中的一小部分較為主要的系統(tǒng),還有很多業(yè)務(wù)沒有列舉出來。
這種系統(tǒng)架構(gòu)可以確保系統(tǒng)之間不會受到影響,但是接口的穩(wěn)定性就成了一個(gè)至關(guān)重要的問題。這種系統(tǒng)架構(gòu)幾乎所有的接口都是同步接口,意思就是說一個(gè)業(yè)務(wù)調(diào)用這些接口如果不成功,業(yè)務(wù)也無法成功。如果出現(xiàn)網(wǎng)絡(luò)問題或者接口BUG,就會導(dǎo)致大量業(yè)務(wù)失敗。但事實(shí)上,并非所有的接口都必須做成同步性的,有些業(yè)務(wù)比如訂單系統(tǒng)把訂單信息發(fā)給倉儲系統(tǒng)生產(chǎn),就對同步性的要求不是很高,可以考慮使用異步方式來解決。為了解決這個(gè)問題,小米網(wǎng)架構(gòu)下一步的演化就是建立一個(gè)異步消息隊(duì)列系統(tǒng)。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%