2020年適用於Linux的10個頂級開源緩存工具

可靠的分佈式計算系統和應用程序已成爲傑出業務的基石,尤爲是在自動化和管理關鍵任務業務流程以及向客戶提供服務方面。做爲這些系統和應用程序的開發人員和系統管理員,您應該提供各類信息技術(IT)解決方案,以確保您擁有最高效的系統。linux

這包括爲系統/應用程序性能,可靠性,可用性和可伸縮性設計,測試和實施策略等任務,覺得最終用戶提供使人滿意的服務水平。緩存是您能夠依賴的許多很是基本但有效的應用程序交付技術之一。在繼續進行以前,讓咱們簡要地看一下什麼是緩存,在哪或如何應用緩存以及它的好處?程序員

什麼是緩存或內容緩存?

緩存(或稱爲內容緩存)是一種普遍使用的技術,它將數據的副本存儲在臨時存儲位置(也稱爲緩存)中,所以與從原始存儲中檢索數據相比,能夠輕鬆,快速地訪問數據。根據緩存的類型和目的,存儲在緩存中的數據可能包括文件或文件片斷(例如HTML文件,腳本,圖像,文檔等),數據庫操做或記錄,API調用,DNS記錄等。數據庫

緩存能夠採用硬件或軟件的形式。基於軟件的緩存(這是本文的重點)能夠在應用程序堆棧的不一樣層上實現。編程

緩存能夠在客戶端側被施加(或在應用程序展示層)中,例如,瀏覽器高速緩存或高速緩存的應用程序(或離線模式)。大多數(若是不是所有)現代瀏覽器都附帶有HTTP緩存的實現。當您訪問Web應用程序以使您可以查看網站或應用程序上的最新數據或內容,而不是瀏覽器使用本地存儲的內容的舊副本時,您可能已經據說過流行的短語「 清除緩存 」。後端

客戶端緩存的另外一個示例是DNS緩存,它發生在操做系統(OS)級別。它是有關操做系統或Web瀏覽器之前的DNS查找信息的臨時存儲。瀏覽器

也能夠經過代理在LAN或WAN中的網絡級別上實現緩存。這種緩存的一個常見示例是CDN(內容交付網絡),它是Web代理服務器的全局分佈式網絡。緩存

第三,您還能夠在源服務器或後端服務器上實現緩存。服務器級緩存有不一樣形式,包括:安全

  • Web服務器緩存(用於緩存圖像,文檔,腳本等)。
  • 應用程序緩存或記憶(用於從磁盤讀取文件,從其餘服務或進程讀取數據或從API請求數據等)。
  • 數據庫緩存(提供對經常使用數據(例如請求的數據庫行,查詢結果和其餘操做)的內存訪問)。

請注意,緩存數據能夠存儲在任何存儲系統中,包括數據庫,文件,系統內存等,可是應該是比主要源更快的介質。在這方面,內存緩存是最有效和最經常使用的緩存形式。服務器

爲何要使用緩存?

緩存具備許多優勢,包括:網絡

  • 在數據庫級別,它將緩存數據的讀取性能提升到微秒。您還可使用回寫式高速緩存來提升寫入性能,在這種狀況下,數據以指定的間隔寫入內存中,而後再寫入磁盤或主存儲中。可是它的數據完整性方面可能會帶來災難性的影響。例如,當系統在即將數據提交到主存儲以前崩潰時。
  • 在應用程序級別,緩存能夠在應用程序進程自己中存儲頻繁讀取的數據,從而將數據查找時間從幾秒鐘減小到幾微秒,尤爲是在網絡上。
  • 考慮到整個應用程序和服務器的性能,緩存有助於減小服務器的負載,延遲和網絡帶寬,由於緩存的數據被提供給客戶端,從而提升了響應時間和向客戶端的交付速度。
  • 緩存還容許內容可用性(尤爲是經過CDN),以及許多其餘好處。

在本文中,咱們將回顧一些用於在Linux中實現服務器端緩存的頂級開源工具(應用程序/數據庫緩存和代理服務器緩存)。

1. Redis

Redis(完整的REmote DIctionary Server)是一個免費,開源,快速,高性能,靈活的分佈式內存計算系統,能夠在大多數(即便不是所有)編程語言中使用。

它是內存中的數據結構存儲,用做緩存引擎,內存中的持久磁盤數據庫和消息代理。儘管Redis是在Linux(推薦的部署平臺)和OS X上進行開發和測試的,但它也能夠在其餘POSIX系統(例如* BSD)中運行,而無需任何外部依賴。

Redis支持許多數據結構,例如字符串,哈希,列表,集合,排序集合,位圖,流等。這使程序員可使用特定的數據結構來解決特定的問題。它支持對其數據結構進行自動操做,例如追加到字符串,將元素推送到列表,增長哈希值,計算集合交集等。

它的主要功能包括Redis主從複製(默認狀況下是異步的),使用Redis Sentinel提供的高可用性和自動故障轉移,Redis集羣(您能夠經過添加更多集羣節點來水平擴展)和數據分區(在多個Redis實例之間分配數據) )。它還具備對事務,Lua腳本,一系列持久性選項以及客戶端-服務器通訊加密的支持。

做爲一個內存中但持久的磁盤數據庫,Redis在與內存中數據集配合使用時表現最佳。可是,您能夠將其與磁盤數據庫一塊兒使用,例如MySQL,PostgreSQL等。例如,您能夠在Redis中獲取大量寫操做的小數據,並將其餘數據塊保留在磁盤數據庫中。

Redis經過多種方式支持安全性:一種是使用「 保護模式 」功能來保護Redis實例不被外部網絡訪問。它還支持客戶端-服務器身份驗證(在服務器中配置密碼並在客戶端中提供密碼)以及全部通訊通道(例如客戶端鏈接,複製連接和Redis Cluster總線協議等)上的TLS。

Redis有不少用例,包括數據庫緩存,全頁緩存,用戶會話數據管理,API響應存儲,發佈/訂閱消息傳遞系統,消息隊列等等。這些能夠應用於遊戲,社交網絡應用程序,RSS提要,實時數據分析,用戶推薦等。

2. Memcached

Memcached是一個免費,開源,簡單但功能強大的分佈式內存對象緩存系統。它是內存中的鍵值存儲區,用於存儲少許數據,例如數據庫調用,API調用或頁面呈現的結果。它能夠在相似Unix的操做系統(包括Linux和OS X)上運行,也能夠在Microsoft Windows上運行。

做爲開發人員工具,它旨在經過緩存內容(默認狀況下爲最近最少使用(LRU)緩存)來提升動態Web應用程序的速度,從而減小磁盤上的數據庫負載–它充當如下任務的短時間內存應用程序。它提供了最流行的編程語言的API。

Memcached支持將字符串做爲惟一的數據類型。它具備客戶端-服務器體系結構,其中一半邏輯發生在客戶端,另外一半發生在服務器端。重要的是,客戶瞭解如何爲項目選擇要寫入或讀取的服務器。此外,若是客戶端沒法鏈接到服務器,則客戶端很是瞭解該怎麼辦。

儘管它是一個分佈式緩存系統,所以支持羣集,但Memcached服務器彼此斷開鏈接(即,它們彼此之間不知道)。這意味着沒有像Redis這樣的複製支持。他們還了解如何存儲和獲取項目,管理什麼時候驅逐或從新使用內存。您能夠經過添加更多服務器來增長可用內存。

從Memcached 1.5.13開始,它支持經過TLS進行身份驗證和加密,可是此功能仍處於試驗階段。

3. Apache Ignite

Apache Ignite,也是一個免費的開放源代碼,可水平擴展的分佈式內存中鍵值存儲,高速緩存和多模型數據庫系統,它提供了強大的處理API,可用於在分佈式數據上進行計算。它也是一個內存中的數據網格,能夠在內存中使用,也能夠與Ignite本機持久性一塊兒使用。它能夠在相似UNIX的系統(例如Linux和Windows)上運行。

它具備多層存儲,完整的SQL支持以及跨多個集羣節點的ACID(原子性,一致性,隔離性,耐久性)事務(僅在鍵值API級別上受支持),共處一地處理和機器學習。它支持與任何第三方數據庫(包括任何RDBMS(例如MySQL,PostgreSQL,Oracle數據庫等)或NoSQL存儲)的自動集成。

重要的是要注意,儘管Ignite用做SQL數據存儲,但它並不徹底是SQL數據庫。與傳統數據庫相比,它能夠明顯地處理約束和索引。它支持主索引和輔助索引,可是隻有主索引用於強制惟一性。此外,它不支持外鍵約束。

Ignite還經過容許您在服務器上啓用身份驗證並在客戶端上提供用戶憑據來支持安全性。還支持SSL套接字通訊,以在全部Ignite節點之間提供安全鏈接。

Ignite有許多用例,包括緩存系統,系統工做負載加速,實時數據處理和分析。它也能夠用做以圖形爲中心的平臺。

4.Couchbase Server

Couchbase Server仍是一個開放源代碼,分佈式,NoSQL面向文檔的參與數據庫,以鍵-值格式將數據存儲爲項目。它能夠在Linux以及Windows和Mac OS X等其餘操做系統上運行。它使用功能豐富的面向文檔的查詢語言N1QL,該語言提供了強大的查詢和索引服務,以支持對數據的亞毫秒級操做。

它的顯着功能是具備託管緩存的快速鍵值存儲,專用索引器,強大​​的查詢引擎,橫向擴展體系結構(多維擴展),大數據和SQL集成,全棧安全性和高可用性。

Couchbase Server附帶了本機多實例集羣支持,其中集羣管理器工具協調全部節點活動,並僅向客戶端提供集羣範圍的接口。重要的是,您能夠根據須要添加,刪除或替換節點,而無需停機。它還支持跨集羣節點的數據複製,跨數據中心的選擇性數據複製。

它使用專用的Couchbase服務器端口,不一樣的身份驗證機制(使用憑據或證書),基於角色的訪問控制(以檢查每一個通過身份驗證的用戶來檢查分配給他們的系統定義的角色),審計,日誌和會話,經過TLS實現安全性。

它的用例包括統一的編程界面,全文搜索,並行查詢處理,文檔管理和索引等等。它是專門爲大型交互式Web,移動和IoT應用程序提供低延遲數據管理而設計的。

5.Hazelcast IMDG

Hazelcast IMDG(內存中數據網格)是一種開源,輕量級,快速且可擴展的內存中數據網格中間件,可提供彈性可擴展的分佈式內存中計算。Hazelcast IMDG還能夠在Linux,Windows和Mac OS X以及安裝了Java的任何其餘平臺上運行。它支持各類靈活的語言本機數據結構,例如Map,Set,List,MultiMap,RingBuffer和HyperLogLog。

Hazelcast是對等的,支持簡單的可伸縮性,集羣設置(具備用於收集統計信息,經過JMX協議進行監視以及使用有用的實用程序管理集羣的選項),分佈式數據結構和事件,數據分配和事務的功能。這也是冗餘的,由於它能夠將每一個數據條目的備份保留在多個成員上。要擴展羣集,只需啓動另外一個實例,數據和備份就會自動且均勻地平衡。

它提供了一組有用的API來訪問羣集中的CPU,以實現最大處理速度。它還提供了來自Java的大量開發人員友好接口的分佈式實現,例如Map,Queue,ExecutorService,Lock和JCache。

它的安全功能包括羣集成員和客戶端身份驗證,以及經過基於JAAS的安全功能對客戶端操做進行訪問控制檢查。它還容許攔截客戶端執行的套接字鏈接和遠程操做,集羣成員之間的套接字級通訊加密以及啓用SSL / TLS套接字通訊。可是根據官方文檔,其中大多數安全功能都在企業版中提供。

它最流行的用例是分佈式內存中緩存和數據存儲。可是,它也能夠部署用於Web會話羣集,NoSQL替換,並行處理,簡單的消息傳遞等等。

6.Mcrouter

Mcrouter是一個免費的開源Memcached協議路由器,用於擴展由Facebook開發和維護的Memcached部署。它具備Memcached ASCII協議,靈活的路由,多集羣支持,多級緩存,鏈接池,多種哈希方案,前綴路由,複製池,生產流量影子,在線從新配置以及目標運行情況監視/自動故障轉移的功能。

此外,它支持冷緩存預熱,豐富的統計信息和調試命令,可靠的刪除流服務質量,較大的值,廣播操做,並具備IPv6和SSL支持。

它已在Facebook和Instagram中用做緩存基礎結構的核心組件,高峯時每秒處理近50億個請求。

7.Varnish Cache

Varnish Cache是位於Web客戶端和原始服務器之間的開源靈活,現代且多功能的Web應用程序加速器。它能夠在全部現代Linux,FreeBSD和Solaris(僅x86)平臺上運行。它是一個出色的緩存引擎和內容加速器,您能夠將其部署在Web服務器(如NGINX,Apache等)的前面,以偵聽默認的HTTP端口以接收客戶端請求並將其轉發到Web服務器,並交付Web服務器響應客戶端。

在客戶端和原始服務器之間充當中間人的同時,Varnish Cache提供了許多好處,其基本要素是將Web內容緩存在內存中,以減輕Web服務器的負載並提升向客戶端的交付速度。

從客戶端收到HTTP請求後,它將請求轉發到後端Web服務器。Web服務器響應後,Varnish將內容緩存在內存中,並將響應傳遞給客戶端。當客戶端請求相同的內容時,Varnish將從緩存提高應用程序響應中爲其提供服務。若是它不能提供緩存中的內容,則將請求轉發到後端,而後將響應緩存並傳遞給客戶端。

Varnish具備VCL(Varnish配置語言,一種靈活的域特定語言),用於配置請求的處理方式以及Varnish模塊(VMODS),它們是Varnish Cache的擴展。

在安全方面,Varnish Cache支持經過VMODS進行日誌記錄,請求檢查以及限制,身份驗證和受權,但它缺少對SSL / TLS的本機支持。您可使用Hitch或NGINX 等SSL / TLS代理爲Varnish Cache 啓用HTTPS。

您還能夠將Varnish Cache用做Web應用程序防火牆,DDoS***防護程序,熱連接保護程序,負載平衡器,集成點,單點登陸網關,身份驗證和受權策略機制,用於不穩定後端的快速修復程序以及HTTP請求路由器。

8.Squid Caching Proxy

Squid是另外一個針對Linux的免費,開源,傑出且普遍使用的代理和緩存解決方案。它是功能豐富的Web代理緩存服務器軟件,可爲流行的網絡協議(包括HTTP,HTTPS和FTP)提供代理和緩存服務。它還能夠在其餘UNIX平臺和Windows上運行。

就像Varnish Cache同樣,它接收來自客戶端的請求並將它們傳遞到指定的後端服務器。後端服務器響應時,會將內容的副本存儲在緩存中,而後將其傳遞給客戶端。未來對相同內容的請求將從緩存中獲得處理,從而將內容更快地傳遞到客戶端。所以,它能夠優化客戶端和服務器之間的數據流以提升性能,並緩存經常使用內容以減小網絡流量並節省帶寬。

Squid具備一些功能,例如在代理服務器的相互通訊的層次結構上分配負載,生成有關Web使用模式的數據(例如,有關訪問量最大的站點的統計信息),使您可以分析,捕獲,阻止,替換或修改正在代理的消息。

它還支持安全功能,例如豐富的訪問控制,受權和身份驗證,SSL / TLS支持以及活動日誌記錄。

9.NGINX

NGINX(發音爲Engine-X)是一種開放源代碼,高性能,功能齊全且很是流行的整合解決方案,用於設置Web基礎架構。它是HTTP服務器,反向代理服務器,郵件代理服務器和通用TCP / UDP代理服務器。

NGINX提供基本的緩存功能,其中緩存的內容存儲在磁盤上的持久性緩存中。NGINX中有關內容緩存的有趣之處在於,當它沒法從原始服務器獲取新鮮內容時,能夠將其配置爲從其緩存中傳遞陳舊的內容。

NGINX提供了多種安全功能來保護您的Web系統,這些功能包括SSL終止,使用HTTP基自己份驗證限制訪問,基於子請求結果的身份驗證,JWT身份驗證,限制對代理HTTP資源的訪問,按地理位置限制的訪問,以及更多。

它一般被部署爲應用程序堆棧中的反向代理,負載平衡器,SSL終結器/安全網關,應用程序加速器/內容緩存和API網關。它還用於流媒體。

10. Apache Traffic Server

最後但並不是最不重要的一點是,咱們有Apache Traffic Server,這是一種開源,快速,可擴展且可擴展的緩存代理服務器,支持HTTP/1.1和HTTP/2.0。它旨在經過爲企業,ISP(Internet服務器提供商),骨幹網提供商等在網絡邊緣緩存常常訪問的內容來提升網絡效率和性能。

它支持HTTP / HTTPS通訊的正向和反向代理。它也能夠配置爲同時以一種或兩種模式運行。它具備持久性緩存,插件API;支持ICP(Internet緩存協議),ESI(包括邊);Keep-Alive等。

在安全性方面,Traffic Server支持控制客戶端訪問,方法是容許您配置容許使用代理緩存的客戶端,客戶端與自身之間以及自身與原始服務器之間的鏈接的SSL終止。它還經過插件支持身份驗證和基本受權,記錄(接收到的每一個請求和檢測到的每一個錯誤)以及進行監視。

Traffic Server能夠用做Web代理緩存,正向代理,反向代理,透明代理,負載均衡器或在緩存層次結構中使用。

總結

緩存是最有益且歷史悠久的Web內容交付技術之一,其主要目的是提升網站或應用程序的速度。因爲將緩存的數據提供給客戶端,所以它有助於減小服務器負載,延遲和網絡帶寬,從而提升了應用程序響應時間和向客戶端的交付速度。

做者:Aaron Kili 譯者:Yue Yong
原文來自:https://www.tecmint.com/open-source-caching-tools-for-linux/

相關文章
相關標籤/搜索