【赛道解析】针对冷热读写场景的 RocketMQ 存储系统设计思路拆解
今年的云原生編程挑戰賽圍繞“挑戰 Serverless 創新實踐”展開,將繼續深度探索 RocketMQ、Dubbo3、Serverless 三大熱門技術領域,為熱愛技術的年輕人提供一個挑戰世界級技術問題的舞臺。希望選手們能用手中的技術,為全社會創造更大的價值。
賽道一:針對冷熱讀寫場景的 RocketMQ 存儲系統設計
瓜分60萬現金大獎,三大賽道任意選擇,
更有奇葩任務定義拿獎新姿勢,快快點擊報名吧!
https://tianchi.aliyun.com/specials/promotion/cloudnative2021
1、賽題背景
Apache RocketMQ 作為的一款分布式的消息中間件,歷年雙十一承載了萬億級的消息流轉,為業務方提供高性能低延遲的穩定可靠的消息服務。其中,實時讀取寫入數據和讀取歷史數據都是業務常見的存儲訪問場景,而且會在同一時刻同時出現,因此針對這個混合讀寫場景進行優化,可以極大的提升存儲系統的穩定性。同時英特爾? 傲騰? 持久內存作為一款與眾不同的獨立存儲設備,可以縮小傳統內存與存儲之間的差距,有望給 RocketMQ 的性能再次飛躍提供一個支點。
2、題目解析
本次賽題大致有兩個關鍵點:分層存儲如何設計、AEP在場景中扮演的角色。
首先分層存儲并不是一個陌生的概念,也是一個被廣泛應用技術,廣義上講,就是將數據存儲在不同層級的介質中,并在不同的介質之間進行自動或者手動的數據遷移,復制等操作。事實上,分層存儲的設計并沒有唯一最優解的說法,需要具體場景具體設計,并盡可能考慮到極端情況。
- 4 核 8G 規格 ECS,配置 400G 的 ESSD PL1 云盤(吞吐可達到 350MiB/s ref),配置 126G 傲騰?持久內存。從機器配置上看,各個存儲介質速度 8G-DRAM > 126G-AEP > 400G-ESSD。
- 正確性評測中會重啟 ECS,并清空傲騰盤上的數據。重啟 ECS 采用的是模擬斷電的方法,因此需要保證數據至少落盤一份到 ESSD 中。
- 性能評測時,有 50% 的隊列會從當前最大位點消費,剩余的從 0 開始,因此可以對“冷熱數據”進行區分處理,提高系統的穩定性和運行效率。
- 雖然操作系統中有 PageCache,但是它在某種極端情況下表現得“笨笨”的,比如說混合讀寫中,剛寫入的“熱數據”可能會因為內存不足而被換出,消費時的數據又會污染本就搖搖欲墜的 PageCache,最差情況是可能導致其完全失效,全部讀寫都走了 SSD。
其次是如何高效利用這塊 AEP。
- 英特爾? 傲騰? 內存是一款與眾不同的獨立存儲設備,可以縮小傳統內存與存儲之間的差距。
- 對于某一個設備在什么情況下使用、如何使用都是基于其特性出發的,就比如之前的機械硬盤因為物理尋址方式,順序讀寫時吞吐遠大于隨機讀寫,而 DRAM 和固態硬盤則是電路尋址,不考慮硬件和軟件上的緩存優化時是否順序讀寫差距不大;而傲騰內存的特性又不同于其他存儲介質,深入了解它將有助于更靈活更高效的使用。
https://developer.aliyun.com/article/770338?groupCode=aliyundb
3、解題思路
分層存儲:
- 由于存儲介質容量、速度上有較大差異,因此可以將冷熱數據進行區分,新寫入的數據維持在 DRAM 中,冷數據在讀取前及時復制到 AEP 中。
- 由于 ESSD 的帶寬非常有限,冷數據在遷移過程中會占用寶貴資源,因此可以在寫入階段采用雙寫。
- 由于是冷熱讀寫的隊列是隨機指定的,需要程序能自己判斷并區別對待。
- 可以在內存中自己維護一份緩存,減少對 PageCache 的依賴。
4、如何拿好成績
由于成績是取得全部流程時間總和,且各個環節互相影響,因此可以大膽發揮創造,找出最具“性價比”的優化。
例如為了優化后續讀流程對數據進行規整,或者為了優化寫性能在 ESSD 中只 Append 數據順序落盤,在 AEP 或者 DRAM 中構造索引等各種方法,期待選手們都能獲得自己滿意的成績!
5、傲騰技術參考文檔:
- Intel傲騰持久化內存介紹:
https://software.intel.com/content/www/us/en/develop/videos/overview-of-the-new-intel-optane-dc-memory.html
- 傲騰持久化內存(AEP)工作模式:
https://code.aliyun.com/dts_test/dts-contest/blob/master/doc/appdirect-tips.md
- PMEM IO官網:
https://pmem.io/
- 如何模擬PMEM:
https://software.intel.com/content/www/us/en/develop/articles/how-to-emulate-persistent-memory-on-an-intel-architecture-server.html
- PMEM編程指北:
https://code.aliyun.com/dts_test/dts-contest/blob/master/doc/PMEM%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8C%97.md
- PMDK示例程序:
https://github.com/pmem/pmdk-examples
- 評測環境使用PMEM:
https://code.aliyun.com/dts_test/dts-contest/blob/master/doc/fsdax-pmem.md?spm=5176.12281978.0.0.2e7f4154YmlInw&file=fsdax-pmem.md
- JAVA使用PMEMKV:
https://github.com/pmem/pmemkv-java
- Java* Support for Intel? Optane? DC Persistent Memory:
https://software.intel.com/content/www/us/en/develop/articles/java-support-for-intel-optane-dc-persistent-memory.html?spm=5176.12281978.0.0.2e7f4154YmlInw
- JAVA持久內存編程教程(視頻):
https://software.intel.com/content/www/us/en/develop/videos/persistent-memory-programming-with-java.html
原文鏈接:https://developer.aliyun.com/article/788002?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的【赛道解析】针对冷热读写场景的 RocketMQ 存储系统设计思路拆解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云边缘云全新架构升级,助力CDN操控
- 下一篇: AI让边缘更智能,边缘让AI无处不在