TiKV 在饿了么的大规模应用实践
餓了么從 2008 年創建以來,一直都是飛速的發展。目前,餓了么已覆蓋了 2000 多個城市,擁有 2.6 億的用戶,130 萬的商戶,300萬的騎手。餓了么在配送時間上追求卓越,目前餓了么的準時達訂單平均配送時長已達到 28 分鐘以內。從 2015 年開始,餓了么形成了 2 大業務,在線交易平臺業務和即時配送平臺業務。餓了么的用戶量和訂單量的快速增長,帶來了數據量的快速增長,從而產生對大數據量存儲的強烈需求,并且很多數據都是 KeyValue 格式的數據。之前餓了么沒有統一的 Key-Value 存儲系統,這部分數據被存儲在 MySQL、Redis、Mongo、Cassandra 等不同的系統中,將數據存儲在這些系統中,帶來一些問題,比如數據擴容不方便、內存不可靠、性能不達標、運維不方便等。
我們希望用一套統一的 Key-Value 存儲系統來存儲這些 Key-Value 形式的數據,并且滿足以下所有的技術要求:
- 大數據量,可以存儲至少數十 TB 級別的數據。
- 高性能,在滿足高 QPS 的同時,保證比較低的延時。
- 高可靠,數據被可靠的持久化存儲,少量機器的損壞不會導致數據的丟失。
- 高可用,作為在線服務的底層依賴存儲,要有非常完善的高可用性能力,外賣服務不同于電子商務,對實時性要求非常高,對系統的可用性的要求則是更高的。
- 易運維,可以在不停服的基礎上進行數據遷移,和集群擴容。
從 2017 年下半年開始,餓了么開始基于 TiKV 構建餓了么的 Key-Value 存儲系統,并且取得了很好的應用效果。餓了么對 Key-Value 系統的使用是在線系統,由離線計算集群生成數據,在線服務消費這些數據。這些在線服務覆蓋了餓了么在線交易和即時配送 2 大平臺,在線交易平臺中的首頁搜索、商品品類、商品排序、天降紅包等等,即時配送平臺中的物流旗手智能調度等,各種在線服務都在使用我們的 Key-Value 系統。?
目前,TiKV 的應用會影響餓了么全平臺 80% 的流量,包括從用戶選餐下單到訂單配送整個餓了么流程。
TiKV集群上線情況:
- 目前已在餓了么部署了十幾套? TiKV? 集群,分別位于北京、上海、廣州的四個機房,共計 100+ 機器節點,承載了數十 TB 的數據。
- 配置了完備的監控告警系統,所有集群都已接入,可以在集群出現問題時及時發送告警信息,為集群的正常運行提供了保障。
- 業務高峰期時,最繁忙的一個集群,寫入 QPS 近 5w,讀取 QPS 近 10w。
- 至今已穩定運行大半年,沒有發生過線上事故。?
在 Key-Value 的這個領域中,有著林林總總的開源系統。我們為什么要選擇 TiKV 呢?首先要從 TiDB 的架構說起。TiDB 由 TiKV 存儲層和 TiDB SQL 層組成。TiKV 層是 TiDB 系統的底層存儲層,TiKV 層本身是一個分布式的 Key-Value 存儲系統。而 TiDB 層構建于 TiKV 層基礎之上,實現了無狀態的 SQL 協議層,負責將用戶的 SQL 請求,轉化為 TiKV 的 Key-Value 請求,從而整體上實現分布式的 SQL 存儲。這種架構借鑒了 Google 的 Spanner 系統,Spanner 是一個分布式的 Key-Value 存儲系統,Google 在 Spanner 的基礎之上,構建了一個名叫 F1 的系統,實現了 SQL 協議。
我們也比較推崇這種架構,并且我們認為在 Key-Value 基礎之上,不僅僅可以構建 SQL 協議,也可以構建 Redis 這樣的 Key-Value 協議。
在這種架構中,上層負責協議轉換。TiKV 層則通過數據分片、Raft 協議、MVCC、分布式事務等技術,實現了水平擴展、高可用、強一致性等分布式特性。?
我們的 Redis layer 實現如下:
我們構建了一個 ekvproxy 的服務。在這個服務中,我們封裝了一個 TiKV 的 SDK,對 Redis 的協議進行了解析,并且將 Redis 協議轉成對 TiKV 的調用。并且在這個基礎之上,實現了壓縮和限流等一些擴展功能。由于我們兼容了 Redis 協議,各種語言均可以在不做任何修改的情況下,直接使用官方的 Redis 客戶端訪問我們的 Key-Value 服務。在最大程度上減輕了使用方的負擔。便于 TiKV 的落地推廣。
另外,PingCAP 的工程師還第一時間幫我們實現了 TiKV 的 raw scan 的功能,從而能更好的與 Redis 協議兼容,在此表示感謝。
雖然系統在線上性能表現已經非常不錯,但這仍然沒有達到 TiKV 的最大處理能力,上線前,我們對 TiKV 進行了詳細的性能測試,我們測試環境選在 32 核 CPU,256G 內存,3.5T PCIE SSD 硬盤的機器上, 得到了更好的結果,取其中典型數據如下:
使用 TiKV 的這半年的時間來,在餓了么取得了非常良好的應用效果,應用場景不斷增多,數據量不斷增大,對餓了么業務做了非常好的支撐,這也依賴于 TiKV 技術人員對我們的各種到位的技術支持。未來,TiKV 在餓了么的應用場景會更加豐富。我們也會考慮將我們 Redis Proxy 開源,開放給社區。
作者介紹:陳東明,餓了么北京技術中心架構組負責人,負責餓了么的產品線架構設計以及餓了么基礎架構研發工作。曾任百度架構師,負責百度即時通訊產品的架構設計。具有豐富的大規模系統構建和基礎架構的研發經驗,善于復雜業務需求下的大并發、分布式系統設計和持續優化。總結
以上是生活随笔為你收集整理的TiKV 在饿了么的大规模应用实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在mac上搭建sqli-labs
- 下一篇: Lambda化的一个例子