實例分析途牛網(wǎng)站的無線架構(gòu)變遷實踐之路
大?。?/span>0.6 MB 人氣: 2017-10-12 需要積分:1
服務(wù)化推進
途牛的服務(wù)化始于2011年,當(dāng)時我們主要進行了會員的服務(wù)化,2012年進行了搜索2.0的服務(wù)化,2013年是服務(wù)化大舉前進的時刻,主要進行了搜索3.0、價格中心、訂單中心、產(chǎn)品基礎(chǔ)數(shù)據(jù)等系統(tǒng)的服務(wù)化,2014年將TSP(途牛服務(wù)治理平臺)、業(yè)務(wù)公共系統(tǒng)、資源搜索系統(tǒng)等進行服務(wù)化,2015年對產(chǎn)類目、開放API進行服務(wù)化。
從上面的過程可以看出,我們的服務(wù)化不是一蹴而就的,而是經(jīng)歷了一個漫長的過程,每一次拆分都相當(dāng)于為高速行駛的汽車更換輪胎的過程??梢宰⒁獾?,在2012年我們拆分了一個搜索2.0,之后很快又在2013年推出了搜索3.0。
這兩個版本的區(qū)別是:做搜索2.0一開始沒有什么經(jīng)驗,雖然采用了Solr這樣非常成熟的開源搜索引擎來搭建搜索平臺,但是沒有明確界定搜索平臺和業(yè)務(wù)系統(tǒng)之間的關(guān)系,導(dǎo)致搜索平臺的邏輯非常重,被當(dāng)成一個數(shù)據(jù)聚合的平臺來使用,網(wǎng)站列表頁數(shù)據(jù)和詳情頁數(shù)據(jù)都從搜索中出來,導(dǎo)致搜索獲取數(shù)據(jù)源部分的邏輯非常復(fù)雜,搜索開發(fā)人員將70%的時間都放在和業(yè)務(wù)系統(tǒng)對接邏輯的處理上,索引效率也比較低,從而導(dǎo)致性能不穩(wěn)定,逐漸退役。吸取教訓(xùn)后,我們搭建了搜索3.0的平臺,僅僅提供列表搜索,統(tǒng)一列表字段,將數(shù)據(jù)推送邏輯移到搜索外部,由各個產(chǎn)品系統(tǒng)來進行數(shù)據(jù)推送,搜索本身專注于性能的提升與穩(wěn)定性,并逐步加入智能排序、人工干預(yù)搜索結(jié)果功能。迄今為止,搜索3.0是我們公司最為穩(wěn)定的系統(tǒng)。
接下來是服務(wù)化過程中,技術(shù)層面做得比較好的兩個服務(wù):價格計算服務(wù)和服務(wù)治理平臺。
價格計算服務(wù)
從技術(shù)上,價格計算服務(wù)有兩個難點:一個是團期價格依賴的因素較多,并且依賴路徑較深;另一個是這些因素價格變動的頻率較高,尤其在旺季。因此從設(shè)計上,價格計算服務(wù)必須要有較大的容量要求,同時具有實時性。
價格計算服務(wù)從13年開始構(gòu)建,架構(gòu)上也經(jīng)歷了四個階段:同步架構(gòu)、異步架構(gòu)、并發(fā)架構(gòu)和分布式架構(gòu),如圖1所示。

圖1 服務(wù)化的推薦 - 價格計算服務(wù)
同步架構(gòu):系統(tǒng)間主要通過接口進行交互,其他系統(tǒng)通過調(diào)用接口通知價格中心發(fā)起運算,價格中心通過接口獲取其他系統(tǒng)價格依賴的所有資源。整個計算流程采用串行模型行,效率低僅能滿足小規(guī)模的計算需求。
異步架構(gòu):系統(tǒng)間通過MQ進行交互,價格中心通過依賴數(shù)據(jù)庫獲取其他系統(tǒng)的數(shù)據(jù),加快了數(shù)據(jù)讀取的效率,并將計算價格變成兩段:先針對一個資源多個供應(yīng)商的情況,將資源的最低成本價計算好,然后再算產(chǎn)品最低價。這種架構(gòu)比同步架構(gòu)數(shù)據(jù)讀取的效率更高,并能通過預(yù)先生成數(shù)據(jù),加快計算的速度,提升3倍整體性能。
并發(fā)架構(gòu):首先將價庫自身的數(shù)據(jù)(資源的成本價,產(chǎn)品團期起價)進行了分庫分表,提升了系統(tǒng)的數(shù)據(jù)容量,然后再根據(jù)產(chǎn)品的訪問頻度區(qū)分冷熱數(shù)據(jù)的計算頻率,冷數(shù)據(jù)降低計算頻率,熱數(shù)據(jù)增加計算頻率——并通過在內(nèi)存中建立團期、行程、資源這三個維度的數(shù)據(jù)結(jié)構(gòu),提升計算過程中數(shù)據(jù)的讀寫效率。整體上性能比異步架構(gòu)提升了3.5倍,每次每個團期的價格計算時間控制在200ms以下。
分布式架構(gòu):通過解析依賴數(shù)據(jù)庫的Binlog,將依賴數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換成適合使用的內(nèi)存數(shù)據(jù)庫結(jié)構(gòu),進一步提升數(shù)據(jù)讀取效率,從而解決計算過度依賴數(shù)據(jù)庫的問題,通過使用Sharding MQ,實現(xiàn)本地訪問、本地計算;通過使用Unix域通信的機制,實現(xiàn)本地通信,將每個計算實例所依賴的資源和通信盡量限制在本地服務(wù)器上,最大化提升I/O能力,降低I/O損耗。整體性能比并發(fā)架構(gòu)提升2倍,每次每個團期的價格計算時間控制在100ms以下。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%