效能竟然再提升一倍!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基本程式碼的下一步版本和未來版本如何,它都可能提供效能提升。
相關文章
- 震精-PostgreSQL10.0preview效能增強-WARM提升一倍效能SQLView
- 如何在多例項基礎上再新增一個mysql的例項MySql
- docker redis 多個例項DockerRedis
- 分享一個SQLite 效能優化例項SQLite優化
- Redis實戰篇(一)搭建Redis例項Redis
- TenSunS監控REDIS:使用一個redis_exporter監控所有的Redis例項RedisExport
- 如何授權一個子賬號管理某個redis例項Redis
- 這兒有一個使你網頁效能提升10倍的工具網頁
- 確保您擁有一個獨一無二的例項:單例模式的建立方式單例模式
- 單例模式 - 只有一個例項單例模式
- Pytext實戰-構建一個文字分類器有多快文字分類
- 推薦 10個 NB的 IDEA 外掛,開發效率至少提升一倍Idea
- 推薦 10 個 NB 的 IDEA 外掛,開發效率至少提升一倍Idea
- Redis 例項分析工具Redis
- redis sentinel哨兵 例項Redis
- dom操作新增一個帶有文字的節點程式碼例項
- RAC環境一個例項何時會歸檔另一個例項的日誌
- 一聲嘆息,jdk竟然有4個randomJDKrandom
- dddsample一個可執行的例項
- Laravel Redis 廣播 例項LaravelRedis
- Redis單例項安裝Redis單例
- 機器學習演算法讓TCP傳輸速度提升一倍機器學習演算法TCP
- 一個例項中,多個synchronized方法的呼叫synchronized
- 第一個jsp例項JS
- 探索Redis設計與實現13:Redis叢集機制及一個Redis架構演進例項Redis架構
- 應用上雲可以有多快?
- 瀏覽器可以有多快?瀏覽器
- oracle一個listener偵聽多個例項的配置Oracle
- 如何建立一個新的SQL Server例項SQLServer
- jafka安裝配置和啟動一個自帶例項和手寫一個例項
- Kafka效能測試例項Kafka
- 一個比 Redis 效能更強的資料庫Redis資料庫
- 再談應用程式的例項問題 (轉)
- zabbix監控單例項redis單例Redis
- 分享一個Laravel中的管道的使用例項Laravel
- 一個 react+redux 工程例項ReactRedux
- javascript如何建立一個物件例項JavaScript物件
- frida 建立一個ArrayList例項