當前位置:
首頁 > 科技 > 性能竟然再提升一倍!Redis的一個實例有多快?

性能竟然再提升一倍!Redis的一個實例有多快?

性能竟然再提升一倍!Redis的一個實例有多快?

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模塊:

性能竟然再提升一倍!Redis的一個實例有多快?

性能竟然再提升一倍!Redis的一個實例有多快?

在單個機器實例上可以看到最大的收益(不在同一伺服器上運行節點集群 - 儘管這裡仍然可以看到一些增益)。在同一伺服器上或作為計算機集群的一部分運行主/副本也有很大的收益。如果伺服器受CPU限制,則增益可能不高。建議使用具有4個或更多內核的計算機

通過在用戶空間內操作,這些都是可觀的收益。使用此模塊可以在此環境中使用Redis實例,而無需修改基本代碼。Redis將在Unix套接字上運行,從而使dpdk的性能更快。使用環境抽象層(EAL)以及其他堆棧組件,該模塊能夠輪詢和解釋數據,而無需中斷處理的開銷。它能夠在自己的框架內運行,並允許您繼續使用Redis的生產版本或該注釋上的任何其他版本的Redis(包括不穩定版本和新版本)。

這個概念很有意思,它充滿了對內部發生的好奇心。那麼在沒有這些限制的情況下運行Redis實例會是什麼樣子?下面是兩個Flamegraph,可以幫助提供配置軟體的可視化。它們是在使用模塊運行Redis時生成的,並且運行它時沒有:

下面是在未修改的Redis上執行常規基準測試時生成的火焰圖。

性能竟然再提升一倍!Redis的一個實例有多快?

下面是在基準測試期間生成的火焰圖,其中Accelerator模塊在後台運行:

性能竟然再提升一倍!Redis的一個實例有多快?

希望本文有助於展示您的Redis實例可以解鎖的潛力。EQ Alpha與此模塊和KeyDB項目的目標之一是幫助驅動選項,以實現更大,更強大的實例,從而通過能夠處理更多負載來最小化分片和群集的需求。該模塊採用獨立模塊形式,非常有用,因為無論Redis基本代碼的下一步版本和未來版本如何,它都可能提供性能提升。


寫在最後

性能竟然再提升一倍!Redis的一個實例有多快?

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |