效能竟然再提升一倍!Redis的一個例項有多快?- keydb.dev
Redis被稱為最快的資料庫之一。但是如果刪除了一些限制,那麼獨立例項的速度會變得多快?我們經常聽說Redis可能會在受到CPU效能限制之前受限於網路或記憶體。根據您的設定,它可以是任何這些。
在本文中,我們將討論如何製作一個幾乎使Redis效能提高一倍的模組!
EQ Alpha推出了KeyDB,這是一個Redis的多執行緒,開源的分支,證明多執行緒可以帶來巨大的效能提升。然而,我們總是困擾另一個主要瓶頸的領域。效能通常被固定在核心中的自旋鎖和系統呼叫中。隨著NIC的大發展,Linux成為處理資料包的瓶頸。使用核心資料包複製,中斷和系統呼叫,通過核心處理的資料受到限制,這屬於“Linux核心空間”; 另一方面,我們在應用程式中執行稱為“使用者空間”的應用程式,所以問題變成是沒有辦法繞過核心?
英特爾開發出了資料平面開發套件(DPDK),提供驅動程式和庫以加速資料包處理工作量。繞過核心的想法允許在使用者空間處理資料流,而Linux處理控制流。
將這個想法付諸實踐,並使用EQ Alpha剛剛釋出的模組進行測試。該模組允許Redis在使用者空間中與NIC進行互動,繞過核心。這使得正常的Redis獨立例項從164,000 ops / sec變為超過300,000 ops / sec,Redis 5.0例項的延遲減少約1.8倍。下圖顯示了每秒運算元與資料大小。測試使用最新版本的Redis(5.0)進行,並新增了Accelerator模組:
在單個機器例項上可以看到最大的收益(不在同一伺服器上執行節點叢集 - 儘管這裡仍然可以看到一些增益)。在同一伺服器上或作為計算機叢集的一部分執行主/副本也有很大的收益。如果伺服器受CPU限制,則增益可能不高。建議使用具有4個或更多核心的計算機
通過在使用者空間內操作,這些都是可觀的收益。使用此模組可以在此環境中使用Redis例項,而無需修改基本程式碼。Redis將在Unix套接字上執行,從而使dpdk的效能更快。使用環境抽象層(EAL)以及其他堆疊元件,該模組能夠輪詢和解釋資料,而無需中斷處理的開銷。它能夠在自己的框架內執行,並允許您繼續使用Redis的生產版本或該註釋上的任何其他版本的Redis(包括不穩定版本和新版本)。
這個概念很有意思,它充滿了對內部發生的好奇心。那麼在沒有這些限制的情況下執行Redis例項會是什麼樣子?下面是兩個Flamegraph,可以幫助提供配置軟體的視覺化。它們是在使用模組執行Redis時生成的,並且執行它時沒有:
下面是在未修改的Redis上執行常規基準測試時生成的火焰圖。
下面是在基準測試期間生成的火焰圖,其中Accelerator模組在後臺執行:
希望本文有助於展示您的Redis例項可以解鎖的潛力。EQ Alpha與此模組和KeyDB專案的目標之一是幫助驅動選項,以實現更大,更強大的例項,從而通過能夠處理更多負載來最小化分片和群集的需求。該模組採用獨立模組形式,非常有用,因為無論Redis基本程式碼的下一步版本和未來版本如何,它都可能提供效能提升。
相關文章
- 分享一個SQLite 效能優化例項SQLite優化
- docker redis 多個例項DockerRedis
- Redis實戰篇(一)搭建Redis例項Redis
- TenSunS監控REDIS:使用一個redis_exporter監控所有的Redis例項RedisExport
- Redis 例項分析工具Redis
- redis sentinel哨兵 例項Redis
- 確保您擁有一個獨一無二的例項:單例模式的建立方式單例模式
- 這兒有一個使你網頁效能提升10倍的工具網頁
- 推薦 10個 NB的 IDEA 外掛,開發效率至少提升一倍Idea
- 推薦 10 個 NB 的 IDEA 外掛,開發效率至少提升一倍Idea
- 一個例項中,多個synchronized方法的呼叫synchronized
- Laravel Redis 廣播 例項LaravelRedis
- Redis單例項安裝Redis單例
- frida 建立一個ArrayList例項
- Pytext實戰-構建一個文字分類器有多快文字分類
- Kafka效能測試例項Kafka
- 探索Redis設計與實現13:Redis叢集機制及一個Redis架構演進例項Redis架構
- oracle一個listener偵聽多個例項的配置Oracle
- 分享一個Laravel中的管道的使用例項Laravel
- 一聲嘆息,jdk竟然有4個randomJDKrandom
- 一個馬爾科夫鏈例項馬爾科夫
- 3.1.4 準備啟動一個例項
- 一個pyspark 開發練習例項Spark
- redis應用場景及例項Redis
- python3.10監控redis例項PythonRedis
- 如何區分例項化網格中的每個例項
- 一個比 Redis 效能更強的資料庫Redis資料庫
- 一篇掌握SpringBoot+SpringCache+Redis超詳細例項Spring BootGCRedis
- 重新架構:從 Redis 到 SQLite 效能提升架構RedisSQLite
- 6個提升PostgreSQL效能的小技巧SQL
- 5個介面效能提升的通用技巧
- 應用上雲可以有多快?
- Java的幾種建立例項方法的效能對比Java
- Tee命令的幾個使用例項
- ArcGIS開發(二)——一個基本視窗的例項化
- 利用jstack定位典型效能問題例項JS
- 一文說清FISCO BCOS效能壓測(附例項教程)
- MySQL 拷貝一個InnoDB分割槽表到另一個例項MySql