天天看點

[筆記]微信紅包訂單存儲架構變遷的最佳實踐

前言

微信紅包在2017年又是一波大火,官方資料:除夕夜當天共142億個紅包,峰值76w/s個紅包,作為技術菜鳥,更關注其背後強大的支援體系,與高可用之道,正好看到“微信紅包訂單存儲架構變遷的最佳實踐”這篇文章,從前端開始到存儲層做了一系列講解,故做下筆記。

我的筆記

前端流量控制

主要思路是縮短關鍵業務流程,分離可以通過異步、緩存等方式解決的問題,減輕系統壓力,加快響應速度,在存儲層前面建上一座大壩。
           

CGI無狀态

接入層無狀态,邏輯層也無狀态,可以友善地水準擴充,但依賴MySQL事務保證交易完整,保證紅包系統的精簡,減少瓶頸的存在。
           

資源靜态化

盡量将動态資源轉為靜态資源。靜态資源和CGI分離,靜态資源通過CDN就近接入,減少使用者和CGI的互動,減少内網、通路延遲和資料請求。
           

業務流程異步化

紅包的發、搶、拆背後的多個内部環境,關鍵流程精簡,非關鍵流程和後續業務進入異步隊列進行處理。
           

過載保護

前端保護後端,能在前端處理的就不傳到後端。前端按照後端的能力做削峰限流;用戶端、接入層、邏輯層每一次都做流量控制;
微信用戶端預埋的政策:在連接配接失敗或者逾時情況下會有相應的提示,減少重複請求的次數。
接入層:針對頻繁送出請求的用戶端限制響應速度,并對系統負載劃出若幹個等級,達到不同閥值時引導用戶端使用不同的限速速率;
在異常情況出現時,異步限流降速減輕伺服器壓力防止過載
           

多級讀緩存

搶的請求量遠大于發。故邏輯層增加緩存,若已經搶過了則緩存起來直接傳回。
           

訂單寫緩存

系統會有很多請求不會真正的完成全流量,建立這些廢單不但浪費存儲資源,還會占用邏輯層和存儲層的處理能力,影響其他的交易。
訂單在完成支付前先放在緩存,付款後再進行持久化。
           

存儲層的高可用設計

讀寫分離

水準切分

分庫分表
           

垂直切分

行内資料按照屬性進一步分開。核心表隻保留最關鍵的字段,保證資料檔案短小緊湊。
以紅包為例,昵稱和祝福語這類較長的資訊不屬于核心資料,完全可以切分到别的機器上進一步提升核心資料庫的容量。
不同資料适合存儲類型也不一樣,這類重複率高的長字元串更适合nosql存儲,對存儲空間和性能都是節約極大
           

空間換時間

按不同次元組織表,比如訂單屬性和使用者屬性次元;适合不同的請求場景,不同次元的表可以通過對賬對齊,非核心表可以适當備援資料,減少請求次數。
           

鎖的優化

多人搶紅包的時候必然資料庫會發生行鎖,核心事務必須盡量精簡防止死鎖。
同一個訂單的所有請求,盡量在邏輯層程序預排序之後再通過一個連接配接發送請求到資料庫。
           

冷熱分離

核心資料庫存放高頻資料,其他資料可以定時移到成本低的冷資料庫中。
這樣可以為核心資料庫使用最好的SSD裝置,快速裝置容量較小較貴,不可能在全量資料上使用。
同時可以保證資料庫表容量不會一直積累,大表也會導緻性能下降。
           

異地多活

當系統足夠大的時候必須考慮異地部署的問題,讓資料盡可能離使用者近。
而且進一步的高可用不能局限在同一地域,必須跨資料中心跨城多活才能抵禦系統性風險。
跨城會有幾十毫秒延遲,微信紅包的異地活動設計多為資料中心互相獨立。
非災難灰階不會将其他資料中心的資料導入線上。
           

就近接入

就近接入,減少跨城穿越流量。
           

資料分離

網絡技術限制,光纖也無法保證跨城資料的同步延遲問題。是以跨城資料中心不進行互相實時同步。
不同區域各自承擔業務流量,地域上實作平衡,各地的訂單資料各自獨立。
           

異地容災

當出現地域性故障,則将請求根據容量承擔情況直接分散請求到臨近的資料中心,跨地域分流。
           

有損服務和柔性降級

根據CAP原理無法同時保證一緻性和高可用,必須有取舍。故選擇首先保證高可用,同時實作最終一緻性。
           

有損服務

要追求高可用,可以犧牲一些一緻性和完整性進而保證核心功能。在請求超過設定閥值,必須立即降級防止雪崩。但是要保證資料能最終一緻。
           

柔性可用

柔性可用是在有損服務價值觀支援下的方法,結合具體場景提供不同級别的使用者體驗,保證盡可能成功傳回關鍵資料。
系統首先要實作容災和自動切換;其次邏輯資源應該隔離;服務過載時必須自動快速隔離。
           

微信紅包訂單存儲架構變遷的最佳實踐,原文,請點選這裡

如果你覺得有收獲~可以關注我的公衆号【咖啡色的羊駝】~第一時間收到我的分享和知識梳理~
[筆記]微信紅包訂單存儲架構變遷的最佳實踐