天天看點

2020年适用于Linux的10個頂級開源緩存工具

可靠的分布式計算系統和應用程式已成為傑出業務的基石,尤其是在自動化和管理關鍵任務業務流程以及向客戶提供服務方面。作為這些系統和應用程式的開發人員和系統管理者,您應該提供各種資訊技術(IT)解決方案,以確定您擁有最高效的系統。

這包括為系統/應用程式性能,可靠性,可用性和可伸縮性設計,測試和實施政策等任務,以為最終使用者提供令人滿意的服務水準。緩存是您可以依賴的許多非常基本但有效的應用程式傳遞技術之一。在繼續進行之前,讓我們簡要地看一下什麼是緩存,在哪或如何應用緩存以及它的好處?

緩存(或稱為内容緩存)是一種廣泛使用的技術,它将資料的副本存儲在臨時存儲位置(也稱為緩存)中,是以與從原始存儲中檢索資料相比,可以輕松,快速地通路資料。根據緩存的類型和目的,存儲在緩存中的資料可能包括檔案或檔案片段(例如HTML檔案,腳本,圖像,文檔等),資料庫操作或記錄,API調用,DNS記錄等。

緩存可以采用硬體或軟體的形式。基于軟體的緩存(這是本文的重點)可以在應用程式堆棧的不同層上實作。

緩存可以在用戶端側被施加(或在應用程式展現層)中,例如,浏覽器高速緩存或高速緩存的應用程式(或離線模式)。大多數(如果不是全部)現代浏覽器都附帶有HTTP緩存的實作。當您通路Web應用程式以使您能夠檢視網站或應用程式上的最新資料或内容,而不是浏覽器使用本地存儲的内容的舊副本時,您可能已經聽說過流行的短語“ 清除緩存 ”。

用戶端緩存的另一個示例是DNS緩存,它發生在作業系統(OS)級别。它是有關作業系統或Web浏覽器以前的DNS查找資訊的臨時存儲。

也可以通過代理在LAN或WAN中的網絡級别上實作緩存。這種緩存的一個常見示例是CDN(内容傳遞網絡),它是Web代理伺服器的全局分布式網絡。

第三,您還可以在源伺服器或後端伺服器上實作緩存。伺服器級緩存有不同形式,包括:

Web伺服器緩存(用于緩存圖像,文檔,腳本等)。

應用程式緩存或記憶(用于從磁盤讀取檔案,從其他服務或程序讀取資料或從API請求資料等)。

資料庫緩存(提供對常用資料(例如請求的資料庫行,查詢結果和其他操作)的記憶體通路)。

請注意,緩存資料可以存儲在任何存儲系統中,包括資料庫,檔案,系統記憶體等,但是應該是比主要源更快的媒體。在這方面,記憶體緩存是最有效和最常用的緩存形式。

緩存具有許多優點,包括:

在資料庫級别,它将緩存資料的讀取性能提高到微秒。您還可以使用回寫式高速緩存來提高寫入性能,在這種情況下,資料以指定的間隔寫入記憶體中,然後再寫入磁盤或主存儲中。但是它的資料完整性方面可能會帶來災難性的影響。例如,當系統在即将資料送出到主存儲之前崩潰時。

在應用程式級别,緩存可以在應用程式程序本身中存儲頻繁讀取的資料,進而将資料查找時間從幾秒鐘減少到幾微秒,尤其是在網絡上。

考慮到整個應用程式和伺服器的性能,緩存有助于減少伺服器的負載,延遲和網絡帶寬,因為緩存的資料被提供給用戶端,進而提高了響應時間和向用戶端的傳遞速度。

緩存還允許内容可用性(尤其是通過CDN),以及許多其他好處。

在本文中,我們将回顧一些用于在Linux中實作伺服器端緩存的頂級開源工具(應用程式/資料庫緩存和代理伺服器緩存)。

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提要,實時資料分析,使用者推薦等。

Memcached是一個免費,開源,簡單但功能強大的分布式記憶體對象緩存系統。它是記憶體中的鍵值存儲區,用于存儲少量資料,例如資料庫調用,API調用或頁面呈現的結果。它可以在類似Unix的作業系統(包括Linux和OS X)上運作,也可以在Microsoft Windows上運作。

作為開發人員工具,它旨在通過緩存内容(預設情況下為最近最少使用(LRU)緩存)來提高動态Web應用程式的速度,進而減少磁盤上的資料庫負載–它充當以下任務的短期記憶體應用程式。它提供了最流行的程式設計語言的API。

Memcached支援将字元串作為唯一的資料類型。它具有用戶端-伺服器體系結構,其中一半邏輯發生在用戶端,另一半發生在伺服器端。重要的是,客戶了解如何為項目選擇要寫入或讀取的伺服器。此外,如果用戶端無法連接配接到伺服器,則用戶端非常了解該怎麼辦。

盡管它是一個分布式緩存系統,是以支援群集,但Memcached伺服器彼此斷開連接配接(即,它們彼此之間不知道)。這意味着沒有像Redis這樣的複制支援。他們還了解如何存儲和擷取項目,管理何時驅逐或重新使用記憶體。您可以通過添加更多伺服器來增加可用記憶體。

從Memcached 1.5.13開始,它支援通過TLS進行身份驗證和加密,但是此功能仍處于試驗階段。

Apache Ignite,也是一個免費的開放源代碼,可水準擴充的分布式記憶體中鍵值存儲,高速緩存和多模型資料庫系統,它提供了強大的處理API,可用于在分布式資料上進行計算。它也是一個記憶體中的資料網格,可以在記憶體中使用,也可以與Ignite本機持久性一起使用。它可以在類似UNIX的系統(例如Linux和Windows)上運作。

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

重要的是要注意,盡管Ignite用作SQL資料存儲,但它并不完全是SQL資料庫。與傳統資料庫相比,它可以明顯地處理限制和索引。它支援主索引和輔助索引,但是隻有主索引用于強制唯一性。此外,它不支援外鍵限制。

Ignite還通過允許您在伺服器上啟用身份驗證并在用戶端上提供使用者憑據來支援安全性。還支援SSL套接字通信,以在所有Ignite節點之間提供安全連接配接。

Ignite有許多用例,包括緩存系統,系統工作負載加速,實時資料處理和分析。它也可以用作以圖形為中心的平台。

Couchbase Server還是一個開放源代碼,分布式,NoSQL面向文檔的參與資料庫,以鍵-值格式将資料存儲為項目。它可以在Linux以及Windows和Mac OS X等其他作業系統上運作。它使用功能豐富的面向文檔的查詢語言N1QL,該語言提供了強大的查詢和索引服務,以支援對資料的亞毫秒級操作。

它的顯着功能是具有托管緩存的快速鍵值存儲,專用索引器,強大​​的查詢引擎,橫向擴充體系結構(多元擴充),大資料和SQL內建,全棧安全性和高可用性。

Couchbase Server附帶了本機多執行個體叢集支援,其中叢集管理器工具協調所有節點活動,并僅向用戶端提供叢集範圍的接口。重要的是,您可以根據需要添加,删除或替換節點,而無需停機。它還支援跨叢集節點的資料複制,跨資料中心的選擇性資料複制。

它使用專用的Couchbase伺服器端口,不同的身份驗證機制(使用憑據或證書),基于角色的通路控制(以檢查每個經過身份驗證的使用者來檢查配置設定給他們的系統定義的角色),審計,日志和會話,通過TLS實作安全性。

它的用例包括統一的程式設計界面,全文搜尋,并行查詢處理,文檔管理和索引等等。它是專門為大型互動式Web,移動和IoT應用程式提供低延遲資料管理而設計的。

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替換,并行處理,簡單的消息傳遞等等。

Mcrouter是一個免費的開源Memcached協定路由器,用于擴充由Facebook開發和維護的Memcached部署。它具有Memcached ASCII協定,靈活的路由,多叢集支援,多級緩存,連接配接池,多種哈希方案,字首路由,複制池,生産流量影子,線上重新配置以及目标運作狀況監視/自動故障轉移的功能。

此外,它支援冷緩存預熱,豐富的統計資訊和調試指令,可靠的删除流服務品質,較大的值,廣播操作,并具有IPv6和SSL支援。

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

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請求路由器。

Squid是另一個針對Linux的免費,開源,傑出且廣泛使用的代理和緩存解決方案。它是功能豐富的Web代理緩存伺服器軟體,可為流行的網絡協定(包括HTTP,HTTPS和FTP)提供代理和緩存服務。它還可以在其他UNIX平台和Windows上運作。

就像Varnish Cache一樣,它接收來自用戶端的請求并将它們傳遞到指定的後端伺服器。後端伺服器響應時,會将内容的副本存儲在緩存中,然後将其傳遞給用戶端。将來對相同内容的請求将從緩存中得到處理,進而将内容更快地傳遞到用戶端。是以,它可以優化用戶端和伺服器之間的資料流以提高性能,并緩存常用内容以減少網絡流量并節省帶寬。

Squid具有一些功能,例如在代理伺服器的互相通信的層次結構上配置設定負載,生成有關Web使用模式的資料(例如,有關通路量最大的站點的統計資訊),使您能夠分析,捕獲,阻止,替換或修改正在代理的消息。

它還支援安全功能,例如豐富的通路控制,授權和身份驗證,SSL / TLS支援以及活動日志記錄。

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

NGINX提供基本的緩存功能,其中緩存的内容存儲在磁盤上的持久性緩存中。NGINX中有關内容緩存的有趣之處在于,當它無法從原始伺服器擷取新鮮内容時,可以将其配置為從其緩存中傳遞陳舊的内容。

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

它通常被部署為應用程式堆棧中的反向代理,負載平衡器,SSL終結器/安全網關,應用程式加速器/内容緩存和API網關。它還用于流媒體。

最後但并非最不重要的一點是,我們有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/

繼續閱讀