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

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

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