參考當(dāng)當(dāng)網(wǎng),京東,海爾等電商峰值策略,不考慮hadoop等高級框架,整理資料如下提供參考。
首先,設(shè)計和部署大流量、高并發(fā)系統(tǒng)的技術(shù)方案通常要面對以下幾大難點。
1. 應(yīng)用架構(gòu)復(fù)雜,業(yè)務(wù)發(fā)展快,迭代速度快,各系統(tǒng)之間盤根錯節(jié),歷史包袱重。不僅有牽一發(fā)而動全身的風(fēng)險,更有邊緣case出錯影響主流程處理、耗盡過多資源的隱患。
2. 從前臺到后臺的業(yè)務(wù)流程長,用例多。在能承受的最大峰值上,存在短板效應(yīng)。設(shè)計實現(xiàn)時要面面俱到。
3. 通常促銷活動的持續(xù)時間短而集中,前期推廣活動已經(jīng)啟動,在活動期間,短暫的系統(tǒng)不可用,也會帶來慘重的銷售損失與負(fù)面影響,沒有亡羊補(bǔ)牢的機(jī)會。要確保系統(tǒng)的穩(wěn)定性,平時的工作就要做足。
針對這些難點,有以下應(yīng)對策略。
1. 基于SOA架構(gòu)理念,降低系統(tǒng)耦合性,接口定義清晰明確,保證獨立子系統(tǒng)的健壯性高,降低故障跨系統(tǒng)擴(kuò)散風(fēng)險,從而將伸縮性的困難逐步分解到各個系統(tǒng)。
2. 對系統(tǒng)進(jìn)行分級,集中力量,突出重點系統(tǒng)。從賣場到交易流程均屬于一級系統(tǒng),這部分系統(tǒng)直接關(guān)乎用戶體驗和訂單量。在系統(tǒng)穩(wěn)定性和可靠性等指標(biāo)上,設(shè)計標(biāo)準(zhǔn)高于后臺系統(tǒng)。
3. 優(yōu)先考慮用異步處理代替同步處理,做好系統(tǒng)異常的降級方案,保證有限的合格服務(wù)。
前端頁面系統(tǒng)是電商業(yè)務(wù)的流量入口,需解決的核心問題是保證大流量高并發(fā)情況下的快速展示可用,這方面業(yè)界已有較為成熟的解決方案,如CDN、緩存、靜態(tài)化、異步加載、與依賴的數(shù)據(jù)源解耦、同機(jī)部署、數(shù)據(jù)庫讀寫分離等。通過這樣的設(shè)計使前端無狀態(tài)頁面應(yīng)用可以水平擴(kuò)展,增加Web服務(wù)器即可提升系統(tǒng)能力。
商品的關(guān)鍵數(shù)據(jù)包括商品基本信息、庫存和價格,庫存和價格都依賴于商品基本信息,對于不同類型的數(shù)據(jù),根據(jù)應(yīng)用場景區(qū)別對待。平臺化之后,每個商品都?xì)w屬于一個商家,以商家ID為維度進(jìn)行散列,將商品基本信息保存在數(shù)據(jù)庫中,支持水平擴(kuò)展,可以滿足商品數(shù)據(jù)不斷增長的需要。對于歷史版本的商品信息,則遷移至歷史版本庫,作為訂單交易快照供用戶查詢。庫存數(shù)據(jù)在前端展示只關(guān)注是否有貨,并不需要將每一次庫存變化同步,在庫存變?yōu)?或從0變?yōu)檎麛?shù)時觸發(fā)狀態(tài)同步,交易下單時實時查詢當(dāng)前庫存即可,此種變數(shù)量為狀態(tài)的方式極大地減少了同步數(shù)據(jù)量,提高了數(shù)據(jù)一致性。
即便已經(jīng)對不同類型的商品信息數(shù)據(jù)流進(jìn)行了差異化處理,仍然不能排除短時間內(nèi)會發(fā)生大量數(shù)據(jù)造成系統(tǒng)同步阻塞,影響正常業(yè)務(wù)運(yùn)營操作的及時發(fā)布。極端情況下,超出系統(tǒng)處理能力還可能導(dǎo)致系統(tǒng)崩潰。為解決此類問題,采用批量、異步、分流、限流等手段進(jìn)行處理。
批量、批次操作:
限制API調(diào)用頻次的同時,提供批量API供商家對商品信息進(jìn)行更新,批量更新方式減少了各環(huán)節(jié)交互次數(shù),提高了系統(tǒng)吞吐量,更好地貼合營銷活動中批量處理的需求。在系統(tǒng)內(nèi)部,批量方式能夠有效降低系統(tǒng)資源開銷,并能對頻繁更新的商品數(shù)據(jù)進(jìn)行合并處理,提高處理速度,使數(shù)據(jù)更新及時準(zhǔn)確。
增加異步處理,減少同步處理:
信息流同步經(jīng)過多個系統(tǒng),每個系統(tǒng)處理邏輯和吞吐能力不同,采用同步機(jī)制可能導(dǎo)致上游系統(tǒng)將下游系統(tǒng)拖垮,因此采用異步機(jī)制最為穩(wěn)妥。異步方式有兩點好處:一方面起到緩沖的作用,下游系統(tǒng)依據(jù)自身能力控制處理數(shù)據(jù)量,避免遭受超負(fù)荷的沖擊,保證系統(tǒng)穩(wěn)定運(yùn)行;另一方面實現(xiàn)系統(tǒng)隔離解耦,一旦下游系統(tǒng)出現(xiàn)異常,上游系統(tǒng)仍然能正常處理數(shù)據(jù),不至于引發(fā)連鎖反應(yīng)。
分流:
不同的信息對處理時效的要求也不同,庫存、價格、商品上下架狀態(tài)同步及時性要求很高,而商品基本信息,如名稱、副標(biāo)題、詳情則相對較低。拆分不同的同步路徑,對及時性要求高的數(shù)據(jù)配置更多的系統(tǒng)資源,既保障了敏感數(shù)據(jù)的及時性,又避免了數(shù)據(jù)積壓相互干擾。同理,針對三種不同的數(shù)據(jù)來源渠道(ERP、數(shù)字業(yè)務(wù)系統(tǒng)、開放平臺),也可通過分流方式保證自營實物、電子書和商家商品信息的及時同步。
限流:
多數(shù)的商品數(shù)據(jù)來源于商家,商家會通過一些第三方系統(tǒng)與開放平臺對接,調(diào)用API進(jìn)行數(shù)據(jù)同步。一些不合理的同步機(jī)制設(shè)置會頻繁發(fā)起大量的數(shù)據(jù)同步請求,而多數(shù)請求屬于無效數(shù)據(jù),這類數(shù)據(jù)難以識別,會浪費大量的系統(tǒng)資源,干擾有效數(shù)據(jù)的處理。在開放平臺對每個商家調(diào)用API的頻次進(jìn)行限制,根據(jù)商家商品數(shù)量合理分配,有效地抑制了無效數(shù)據(jù)的泛濫。
分布式:
分布式的交易系統(tǒng)是電商的未來。分布式系統(tǒng)解決兩大難題:提高用戶體驗和增強(qiáng)容錯能力。由于分布式系統(tǒng)設(shè)計時就會留有相當(dāng)?shù)牧髁吭鲩L空間,所以當(dāng)一處數(shù)據(jù)中心飽和時,可以將其余的流量切入其他相對寬松的數(shù)據(jù)中心去,從而達(dá)到互為備份、互相支持的目的。與此同時,由于為提供用戶就近服務(wù),所以減少了網(wǎng)絡(luò)延時,頁面反應(yīng)速度加快了。
邏輯優(yōu)化、算法優(yōu)化和代碼優(yōu)化:
1.優(yōu)化算法,選擇合適高效的算法,降低不必要的遞歸、循環(huán)、多層循環(huán)嵌套等計算。用簡單的算法完成大部分情況,不要為少數(shù)特例而將算法復(fù)雜化。特例由特殊的分支處理。
2.避免申請過多不必要的內(nèi)存開銷。
3.及時釋放資源,降低資源占用時間,包括內(nèi)存、I/O、網(wǎng)絡(luò)和數(shù)據(jù)庫等。
4.善用緩存:緩存常用的、不易變化的;偶有變化,可以考慮緩存依賴機(jī)制。
5.慎用數(shù)據(jù)庫鎖。
6.恰當(dāng)?shù)厥褂檬聞?wù),事務(wù)要細(xì)粒度。
7.選擇適當(dāng)?shù)耐ㄐ欧绞剑篠ocket、Remoting、Web Services(REST和SOAP)、WCF、 Named Pipes等,要特別注意長連接和短連接的恰當(dāng)使用。
8.計算并行化。
9.降低系統(tǒng)或模塊之間的通信次數(shù),例如工作流服務(wù)和數(shù)據(jù)庫服務(wù)。
10.降低系統(tǒng)或模塊之間的傳輸數(shù)據(jù)量,不必要傳輸?shù)牟粋骰蛏賯鳌?br>11.異步計算,降低等待時間。
12.考慮延遲加載和提前加載兩種方式。
13.分離原則:分離業(yè)務(wù)模塊,如分離大I/O模塊、分離高耗內(nèi)存模塊和分離高耗寬帶模塊。
14.統(tǒng)籌使用計算資源,如尋求內(nèi)存計算、數(shù)據(jù)庫計算和網(wǎng)絡(luò)開銷三者之間的最佳平衡。
最后,為了保障系統(tǒng)性能和伸縮性,不少時候需要犧牲或者完全拒絕某些功能,或者降低系統(tǒng)的靈活性和擴(kuò)展性等。
在數(shù)據(jù)庫層允許復(fù)雜的產(chǎn)品存儲結(jié)構(gòu)設(shè)計,以細(xì)粒度、深度優(yōu)化的關(guān)系模型充分實現(xiàn)產(chǎn)品數(shù)據(jù)模型的通用性、可擴(kuò)展性。在數(shù)據(jù)模型設(shè)計時完全不用關(guān)心客戶端檢索查找的復(fù)雜性和性能問題。
產(chǎn)品查詢引擎將復(fù)雜的數(shù)據(jù)存儲模型封裝成一個簡單的邏輯模型。這個邏輯模型實現(xiàn)的效果,完全等同于產(chǎn)品的所有屬性都存儲在同一張數(shù)據(jù)庫表中,邏輯模型的每 個屬性對應(yīng)數(shù)據(jù)庫表中的一個字段。在這個邏輯模型的基礎(chǔ)上實現(xiàn)了一個簡潔的DSL,供客戶端進(jìn)行檢索查詢。客戶端工作在邏輯模型和DSL之上,檢索查詢簡單、靈活,同樣完全不用關(guān)心產(chǎn)品數(shù)據(jù)存儲模型的復(fù)雜性和性能問題。
產(chǎn)品服務(wù)分不同集群進(jìn)行部署,面向Web應(yīng)用和其他服務(wù)的集群在運(yùn)行期間幾乎不會產(chǎn)生數(shù)據(jù)庫請求,因此不管網(wǎng)站訪問量和交易量多高,數(shù)據(jù)庫都不會產(chǎn)生壓力瓶頸。只需為Web和服務(wù)添加服務(wù)器,實現(xiàn)了高伸縮目標(biāo)。