開發與維運

已經觸碰到Redis的性能邊緣? 看看久經考驗的Redis企業版(Tair)吧

Redis作為NoSQL最受歡迎的數據庫之一,在國內市場長期佔據Key-Value NoSQL市場的榜首。它的高性能,易用性和提供的常用數據結構極大的簡化了開發人員和用戶的開發和使用,能夠更好更快的構建出客戶系統。

Redis在使用時也有一些短處,經常遇到的有:

  1. 沒有管控系統。Redis只提供一個存儲核心,無論是生存週期管理還是參數配置都需要自己開發。
  2. 單線程模型,容易卡住。Redis使用了無鎖的單線程模型來工作,但是如果有一個特別慢的查詢,那麼就會整體卡住Redis本身,使判活失敗導致實例不可用。
  3. 集群版和擴縮容不完善。Redis本身提供了集群版功能,但是在大集群下並不完善;用戶更習慣使用proxy代理來管控集群。變配和擴縮容的難度非常大。
  4. 監控和審計缺失。對於高速NoSQL數據庫而言,需要有更完善的基礎設施來支撐。不僅包括完善的監控,告警系統,還有日誌、診斷及審計等,完整得搭建服務平臺非常繁瑣。

由於Redis經常作為高速內存存儲和緩存使用,一般用於用戶數據鏈路的關鍵在線業務。如果Redis有了問題會直接影響用戶的產品功能和用戶體驗。缺乏必要的管理和監控,沒有對Redis核心引擎做增強,一旦遇到問題用戶的業務就很難快速發現,快速處理和恢復。

簡而言之,Redis很難做到“開箱即用”,要在引擎核心和管控系統做大量工作。

雲Redis社區版

正如上文中提到的Redis的不足,阿里雲最早將Redis放到公有云的最基本出發點就是解決“有”和“無”的問題,提供完善的開箱即用的功能,和平滑擴縮容的能力。社區版Redis無論是主備版本還是集群版本都完全兼容Redis所有命令,用戶能夠很快的遷移並快速部署自己的業務服務。

阿里雲是國內最早將Redis商業化的公司之一,也是國內對Redis社區貢獻最大的實體。如在新發布的Redis-6.0RC中,aliyun的commit貢獻僅次於作者。其中很多核心的改進如短鏈接優化,正則匹配效率等已經發布至官方。
技術-01.png
對於小型應用服務來說,阿里雲Redis社區版已經足夠。
技術-02.png

雲Redis企業版(Tair)

阿里在內部大型系統諸如電商(淘寶,天貓)、優酷、高德等使用Redis非常早,但發現Redis在支撐大型或者超大型服務上的能力還是有所欠缺的,主要問題有:

• 單線程Redis有很明顯的C10K問題,即在大鏈接狀態下抗衝擊能力很差。大型和超大型應用動輒就有一萬或者幾萬進程連接Redis,一個衝激響應或者一個慢查詢就可能導致連接數雪崩。
• 要求單分片有更強的服務能力。Redis社區版的一個很大的問題是一個Redis進程在O(1)的操作大致有10~13w OPS的服務能力,在極端和突然場景下仍舊不夠,常用的一些命令和數據結構如String、List、Hash等。
• 數據結構模塊(Module)。Redis提供的基礎的Hash、List、Set等是通用的是對通用互聯網環境的總結,而在阿里和大型企業有著更多的模塊的需求。引入新的特定的數據結構模塊能夠極大的簡化用戶開發,並大幅提升用戶系統的性能。
• 混合存儲。針對大容量低訪問但對RT(latency)不敏感的應用,使用混合存儲不但能大幅降低用戶的成本,還能提供更優秀的持久化能力和數據可靠性。
• 另外,與Redis社區版不同,客戶也需要一個長期維護的穩定版本,保證用戶業務的持續被集成的能力。
技術-03.png
對於企業版來講,在完全繼承社區版能力上,著重解決應用運行得“好”,用戶開發得“爽”的問題,解決用戶在深度使用Redis的痛點和瓶頸。

Tair和Redis

Tair團隊是阿里集團最核心的團隊之一,負責整個阿里的緩存和高速存儲體系。MemCache/Redis/圖數據庫GDB都是Tair團隊將阿里內部成熟的產品孵化到雲上,服務公有云和專有云客戶。

雲Redis企業版就是Tair3.0。它將阿里多年來在高速存儲技術再次輸出到雲上,打造對內對外一致的服務,使得我們雲上客戶也能夠享受到阿里技術的紅利,再次突破技術的桎梏,為用戶業務的高速發展保駕護航!
技術-04.png

性能增強版

性能增強版Redis即RDB3.0,旨在為用戶提供更強大的服務能力和靈活的構建能力,主要包括:
• 多線程Redis可以突破Redis單機性能極限,對於常用的數據結構加速可達三倍(400-450K OPS)。支持高達數萬連接的衝擊,足以應對大型的活動如熱播,秒殺等場景。
• 社區高版本Redis6.0 RC雖然也支持多線程,但是IO架構上與性能增強版不同,但仍未解決C10K和大鏈接衝擊問題
技術-05.png

混合存儲版

混合存儲版Redis即PDB3.0,它使用磁盤來存儲用戶的數據,並提供了高度的Redis兼容力。它特別適合訪問量並不大但有大量數據存儲的應用場景。
• 混合存儲Redis很好解決了存儲成本與性能的的平衡問題:經常訪問的數據緩存在內存中,這樣做既提升了存儲的經濟型,也保證了對熱數據的訪問效率。
• 高效的換入換出通道,能夠將用戶的熱請求數據前置到內存中,能夠讓業務應用獲得更好的時延體驗。
技術-06.png
由於新硬件的引入,存儲和高速NoSQL數據庫正處於變革期。混合存儲將持續將業內最先進的設備如NVM,RDMA等加速至系統引擎,能夠讓雲上用戶儘快享受到最新技術帶來的產品優勢,從容的應對未來的挑戰。

數據結構模塊(modules)

•數據結構模塊(Module)提供了更多常見的新數據類型,能夠讓用戶更靈活快速的構建出高效服務。這些模塊已經在阿里內部廣泛使用多年,非常具有代表性和特色,其中包括:
•CAS/CAD:提供原redis string命令的compare-and-swap/compare-and-delete能力,可用於原子交換、分佈式鎖等場景。尤其是分佈式鎖這個場景,阿里集團的大多數分佈式鎖都是使用SETND/CAD/CAS來實現的
技術-07.png
•TairString:支持併發訪問的String類型,每個String都攜帶version版本號,可用於併發更新,和樂觀鎖等場景
•TairHash:大幅改良了Redis hash類型的不足,為每個field(子key)都攜帶了超時(TTL)和版本號(version),用戶可以非常方便的構建賬號系統,安全審計規則、流控器等場景
技術-08.png
•TairBloom:完全兼容RedisBloom,提供高性能的可伸縮的布隆過濾器(bloomfilter),可用於機器學習、爬蟲系統等。
技術-09.png
•TairDoc:完全兼容reJSON模塊,提供JSON格式的結構化存儲。TairDoc具備更強大的功能,諸如同時支持JSON Pointer和JSON Path兩種語法、支持JSON到XML/YAML格式的轉換等。特別適合在前端和配置中心類應用中使用。
技術-10.png
•TairGis: 重量級的專業GIS模塊,提供了點、線、面之間的相交、包含等關係運算,彌補了Redis原生geo數據結構只能做點位置運算的不足。可以用戶替換PostGIS+緩存場景,特別適合地圖、物流、電子圍欄(點和多邊形的地理位置關係)、地理勘探等應用場景,高德菜鳥等很多高性能地理位置業務很多都是構建於TairGIS之上。比如最近的疫區檢測,通過輸入疫區的地理位置圍欄,就可以判斷路線是否經過(線段與多邊形是否相交)
技術-11.png

總結

隨著雲上客戶的高速發展,用戶已經逐步發展並觸摸到了社區Redis的能力的邊緣。同時,Tair作為阿里原創的高性能內存數據庫產品,也已經逐步完成了“企業版Redis應該是什麼形態”這個問題的探索,並在阿里集團的各個部門進行了研發與充分的驗證。
從2016年起的雙11大促和每次促銷活動以及線上的各項互動遊戲、優酷世界盃、高德出行節,歷次大麥的搶購、推薦與推送、菜鳥的每一次大數據路線仿真運算都與企業版Redis的高性能和極高的可靠性息息相關。

值得一提的是,Redis在國內的使用方式與國際市場並不完全相同。在國際市場上,它更多的被當作“緩存”來使用,這是它的定位。而在國內,更多的被當作內存數據庫來使用。這本身就對企業版Redis提出了更高的要求。這也是阿里雲Redis後續持之努力的方向。

請大家持續的關注企業版Redis(Tair),我們也希望大家給我們更多的反饋和使用建議。謝謝大家!

發佈會視頻鏈接:https://developer.aliyun.com/live/2146
瞭解產品詳情:https://www.aliyun.com/database/redistair

Leave a Reply

Your email address will not be published. Required fields are marked *