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/

相关文章
相关标签/搜索