2023年Linux十大开源缓存工具
可靠的分布式计算系统和应用程序已成为重要业务的基石,特别是在自动化和管理关键任务业务流程以及向客户提供服务方面。
作为这些系统和应用程序的开发人员和系统管理员,您需要提供各种信息技术(IT)解决方案,以确保您拥有最高效的系统。
这包括设计、测试和实施针对系统/应用程序性能、可靠性、可用性和可扩展性的策略,以向最终用户提供令人满意的服务级别。
缓存是您可以依赖的许多非常基本但有效的应用程序交付技术之一。在我们进一步讨论之前,让我们先简要了解一下什么是缓存、在哪里和/或如何应用缓存,以及它的好处。
什么是缓存或内容缓存?
缓存(或内容缓存)是一种广泛使用的技术,用于在临时存储位置(也称为快取),以便在从原始存储中检索数据时可以轻松、快速地访问数据。
根据缓存的类型和目的,存储在缓存中的数据可以包括文件或文件片段(例如,HTML文件、脚本、图像、文档等)、数据库操作或记录、API调用、DNS记录等。
高速缓存可以是硬件或软件的形式。基于软件的缓存(这是本文的重点)可以在应用程序堆栈的不同层上实现。
缓存可以应用于客户端(或应用表示层),例如,浏览器缓存或应用缓存(或离线模式)。大多数(如果不是所有的话)现代浏览器都附带了HTTP缓存的实现。
你可能听说过流行的短语“清除您的缓存当访问Web应用程序以使您能够查看网站或应用程序上的最新数据或内容时,而不是使用本地存储的内容的旧副本的浏览器。
客户端缓存的另一个示例是域名系统缓存这发生在操作系统(OS)级别。它是关于以前的信息的临时存储域名系统查询通过操作系统或Web浏览器。
缓存也可以在网络级别实现,可以在局域网或万通过代理。这种类型的缓存的一个常见示例是CDN(内容交付网络),它们是全球分布的Web代理服务器网络。
第三,您还可以在源服务器或后端服务器上实现缓存。有不同形式的服务器级缓存,包括:
- Web服务器缓存(用于缓存图像、文档、脚本等)。
- 应用程序缓存或记忆(用于从磁盘读取文件,从其他服务或进程读取数据,或从API请求数据等)。
- 数据库缓存(提供对常用数据的内存访问,例如请求的数据库行、查询结果和其他操作)。
请注意,缓存数据可以存储在任何存储系统中,包括数据库、文件、系统内存等,但应该是比主源更快的介质。在这方面,内存缓存是最有效和最常用的缓存形式。
为什么要使用缓存?
缓存提供许多好处,包括以下几点:
- 在数据库级别,它可以将缓存数据的读取性能提高到微秒级。您还可以使用回写缓存来提高写入性能,其中数据先写入内存,然后以指定的时间间隔写入磁盘或主存储。但它的数据完整性方面可能会产生灾难性的影响。例如,在将数据提交到主存储之前系统崩溃。
- 在应用程序级别,缓存可以在应用程序进程本身内存储频繁读取的数据,从而将数据查找时间从几秒减少到微秒,特别是在网络上。
- 考虑到应用程序和服务器的整体性能,缓存有助于减少服务器负载、延迟和网络带宽,因为缓存的数据将提供给客户端,从而缩短响应时间并加快客户端的传输速度。
- 缓存还允许内容可用性,特别是通过CDN,以及许多其他好处。
在本文中,我们将回顾一些顶级的开源(应用程序/数据库缓存和缓存代理服务器)在Linux中实现服务器端缓存的工具。
1.瑞迪斯
雷迪斯人(远程词典服务器总之)是一个免费、开源、快速、高性能和灵活的分布式内存计算系统,可以在大多数编程语言(如果不是所有编程语言)中使用。
它是内存中的数据结构存储,充当缓存引擎、内存中的永久磁盘数据库和Message Broker。尽管Redis是在Linux(推荐的部署平台)和OS X上开发和测试的,但它也可以在其他POSIX系统(如*BSD)上运行,而不需要任何外部依赖。
雷迪斯人支持多种数据结构,如字符串、散列、列表、集、排序集、位图、流等。这使程序员能够使用特定的数据结构来解决特定的问题。它支持对其数据结构的自动操作,如附加到字符串、将元素推送到列表、递增哈希值、计算集合交集等。
它的主要功能包括Redis主从复制(默认情况下是异步的)、高可用性和自动故障转移瑞迪斯·哨兵,Redis星系团(您可以通过添加更多集群节点进行横向扩展)、数据分区(在多个Redis实例之间分发数据)。它还支持交易、Lua脚本编写、一系列持久性选项以及对客户端-服务器通信进行加密。
作为内存中但持久存储在磁盘上的数据库,Redis在处理内存中的数据集时提供最佳性能。但是,您可以将其与MySQL、PostgreSQL等磁盘数据库一起使用。例如,您可以在Redis中获取写入非常繁重的小数据,而将其他数据块保留在磁盘数据库中。
Redis在许多方面支持安全性:一种是使用“保护模式“保护Redis实例不被外部网络访问的功能。它还支持客户端-服务器身份验证(在服务器中配置密码,并在客户端提供密码)和所有通信通道上的TLS,如客户端连接、复制链路、Redis集群总线协议等。
Redis有很多用例,包括数据库缓存、全页缓存、用户会话数据管理、API响应存储、发布/订阅消息传递系统、消息队列等等。这些应用可以应用于游戏、社交网络应用、RSS提要、实时数据分析、用户推荐等。
2.Memcached
Memcached是一个免费、开源、简单但功能强大的分布式内存对象缓存系统。它是内存中的键值存储,用于存储数据库调用、API调用或页面呈现等小块数据。它可以在类似Unix的操作系统上运行,包括Linux和OS X,也可以在Microsoft Windows上运行。
作为一个开发工具,它旨在通过缓存内容来提高动态Web应用程序的速度(默认情况下,最近最少使用(LRU)高速缓存),从而减少了磁盘上的数据库负载,它充当应用程序的短期内存。它为最流行的编程语言提供了一个API。
Memcached支持字符串作为唯一的数据类型。它具有客户端-服务器体系结构,其中一半的逻辑发生在客户端,另一半发生在服务器端。重要的是,客户端了解如何为项目挑选写入或读取的服务器。此外,客户端非常清楚在它无法连接到服务器的情况下应该做什么。
虽然它是一个分布式缓存系统,因此支持集群,但Memcached服务器彼此断开连接(即它们彼此不知道)。这意味着没有像Redis中那样的复制支持。他们还了解如何存储和获取项目,以及管理何时驱逐或重新使用内存。您可以通过添加更多服务器来增加可用内存。
从Memcach1.5.13开始,它支持通过TLS进行身份验证和加密,但这一特性仍处于实验阶段。
3.阿帕奇Ignite
阿帕奇Ignite,也是一个免费、开源、水平可扩展的分布式内存中键值存储、缓存和多模型数据库系统,它为计算分布式数据提供了强大的处理API。它也是一个内存中的数据网格,既可以在内存中使用,也可以与Ignite本机持久性一起使用。它在类似于Unix的系统上运行,例如Linux而且还窗口。
它具有多层存储、全面的SQL支持和酸(原子性、一致性、隔离性、持久性)跨多个集群节点的事务(仅在Key-Value API级别支持)、协同处理和机器学习。它支持与任何第三方数据库的自动集成,包括关系数据库管理系统(如MySQL、PostgreSQL、Oracle数据库等)或NoSQL存储。
值得注意的是,尽管引燃作为一个SQL数据存储工作,它不完全是一个SQL数据库。与传统数据库相比,它明显处理约束和索引;它支持主索引和辅助索引,但只使用主索引来强制唯一性。此外,它不支持外键约束。
IGNITE还允许您在服务器上启用身份验证并向客户端提供用户凭据,从而支持安全性。还支持SSL套接字通信,以在所有Ignite节点之间提供安全连接。
引燃有许多使用案例,包括缓存系统、系统工作负载加速、实时数据处理和分析。它还可以用作以图形为中心的平台。
4.Couchbase服务器
Couchbase服务器也是一个开源的、分布式的、面向NoSQL文档的项目数据库,它以键值格式将数据存储为项。它适用于Linux和其他操作系统,如Windows和Mac OS X。它使用一种功能丰富的、面向文档的查询语言N1QL,该语言提供强大的查询和索引服务,以支持亚毫秒级的数据操作。
它的显著特征是具有托管缓存的快速键值存储、专门构建的索引器、强大的查询引擎、横向扩展架构(多维扩展)、大数据和SQL集成、全堆栈安全性和高可用性。
Couchbase服务器附带本机多实例集群支持,其中集群管理器工具协调所有节点活动,并为客户端提供简单的集群范围接口。重要的是,您可以根据需要添加、删除或替换节点,而无需停机。它还支持跨群集节点的数据复制,以及跨数据中心的选择性数据复制。
它通过使用专用Couchbase服务器端口的TLS、不同的身份验证机制(使用凭据或证书)、基于角色的访问控制(以检查分配给每个经过身份验证的用户的系统定义角色)、审计、日志和会话来实现安全性。
它的使用案例包括统一编程接口、全文搜索、并行查询处理、文档管理、索引等,它专门设计用于为大规模交互式Web、移动和物联网应用程序提供低延迟数据管理。
5.Hazelcast IMDG
黑白广播IMDG(In-Memory Data Grid)是一个开源、轻量级、快速且可扩展的内存中数据网格中间件,提供弹性可扩展的分布式内存中计算。黑白广播IMDG还可以在Linux、Windows、Mac OS X和任何其他安装了Java的平台上运行。它支持多种灵活的本机语言数据结构,如Map、Set、List、Multimap、RingBuffer和HyperLogLog。
黑兹卡斯特是点对点的,支持简单的可伸缩性、集群设置(具有收集统计信息、通过JMX协议监视以及使用有用的实用程序管理集群的选项)、分布式数据结构和事件、数据分割以及事务。它也是冗余的,因为它将每个数据条目的备份保存在多个成员上。要扩展您的集群,只需启动另一个实例,数据和备份将自动均衡平衡。
它提供了一组有用的API来访问集群中的CPU,以获得最大的处理速度。它还提供大量Java开发人员友好接口的分布式实现,如Map、Queue、ExecutorService、Lock和JCache。
它的安全特性包括集群成员和客户端身份验证,以及通过基于JAAS的安全特性对客户端操作进行访问控制检查。它还允许截获客户端执行的套接字连接和远程操作、集群成员之间的套接字级通信加密,以及启用SSL/TLS套接字通信。但根据官方文件,大多数这些安全功能都是在企业版中提供的。
它最流行的用例是分布式内存缓存和数据存储。但它也可以部署用于Web会话集群、NoSQL替换、并行处理、轻松消息传递等。
6.麦克路由
麦克路由是一个免费的开源Memcached协议路由器,用于扩展Memcached部署,由开发和维护Facebook。它具有Memcached ASCII协议、灵活的路由、多集群支持、多级缓存、连接池、多哈希方案、前缀路由、复制池、生产流量跟踪、在线重新配置和目标健康监控/自动故障转移。
此外,它还支持冷缓存预热、丰富的统计和调试命令、可靠的删除流服务质量、大值和广播操作,并附带IPv6和SSL支持。
它正在Facebook和Instagram上作为缓存基础设施的核心组件使用,峰值时每秒处理近50亿次请求。
7.清漆缓存
清漆缓存是一个开放源码的、灵活的、现代的、多用途的Web应用程序加速器,位于Web客户端和源服务器之间。它可以在所有现代的Linux、FreeBSD和Solaris(仅限x86)平台上运行。它是一个出色的缓存引擎和内容加速器,您可以将其部署在Web服务器(如恩吉克斯,阿帕奇等,以侦听默认的HTTP端口,以接收客户端请求并将其转发到Web服务器,并将Web服务器的响应传递给客户端。
当充当客户端和源服务器之间的中间人时,清漆缓存提供了几个好处,其中的元素是在内存中缓存Web内容,以减轻您的Web服务器负载并提高向客户端的交付速度。
在收到来自客户端的HTTP请求后,它将其转发到后端Web服务器。一旦Web服务器做出响应,Varish就会将内容缓存到内存中,并将响应传递给客户端。当客户端请求相同的内容时,Varish将从缓存提升应用程序响应中提供该内容。如果它不能提供来自缓存的内容,则请求被转发到后端,响应被缓存并交付给客户端。
清漆特征VCL(清漆配置语言–;一种灵活的域特定语言)用于配置如何处理请求等,清漆模数(VMODS),它们是Varish缓存的扩展。
在安全方面,Varish缓存支持日志记录、请求检查、限制、身份验证和授权,通过VMODS,但它缺乏对SSL/TLS的本机支持。您可以启用HTTPS对于使用SSL/TLS代理的Varish缓存,搭便车或者是恩吉克斯。
您还可以将Varish缓存用作Web应用防火墙、DDoS攻击防御者、防盗链保护器、负载均衡器、集成点、单点登录网关、身份验证和授权策略机制、不稳定后端的快速修复和HTTP请求路由器。
8.Squid缓存代理
Linux的另一个免费、开源、出色且广泛使用的代理和缓存解决方案是鱿鱼。它是一款功能丰富的Web代理缓存服务器软件,可为流行的网络协议(包括HTTP、HTTPS和FTP)提供代理和缓存服务。它还可以在其他的Unix平台和Windows上运行。
就像清漆缓存,它接收来自客户端的请求,并将它们传递到指定的后端服务器。当后端服务器响应时,它会将内容的副本存储在缓存中,并将其传递给客户端。将来对相同内容的请求将从缓存中提供,从而使内容更快地交付到客户端。因此,它优化了客户端和服务器之间的数据流以提高性能,并缓存常用内容以减少网络流量和节省带宽。
Squid提供了一些功能,如在代理服务器的相互通信层次结构中分配负载,生成有关Web使用模式的数据(例如,关于访问次数最多的站点的统计数据),使您能够分析、捕获、阻止、替换或修改被代理的消息。
它还支持丰富的访问控制、授权和身份验证、SSL/TLS支持以及活动记录等安全功能。
9.安吉斯
恩吉克斯(发音为Engine-X)是一个开源、高性能、功能齐全且非常受欢迎的整合解决方案设置Web基础设施。它是一个HTTP服务器、一个反向代理服务器、一个邮件代理服务器和一个通用的TCP/UDP代理服务器。
恩吉克斯提供基本缓存功能,其中缓存的内容存储在磁盘上的永久缓存中。Nginx中关于内容缓存的有趣之处在于,它可以配置为在无法从源服务器获取新内容时从缓存中传递过时内容。
Nginx提供了多种安全功能保护您的Web系统,包括使用SSL终止、限制访问HTTP基本身份验证、基于子请求结果的身份验证、JWT身份验证、限制对代理的HTTP资源的访问、按地理位置限制访问,等等。
它通常部署为应用堆栈中的反向代理、负载均衡器、SSL终结器/安全网关、应用加速器/内容缓存和API网关。它也用于流媒体。
10.阿帕奇流量服务器
最后但同样重要的是,我们有阿帕奇流量服务器,这是一个开源、快速、可伸缩和可扩展的缓存代理服务器,支持HTTP/1.1和HTTP/2.0。它旨在通过在网络边缘缓存频繁访问的内容来提高网络效率和性能,适用于企业、互联网服务器提供商(互联网服务器提供商)、主干提供商等。
它既支持HTTP/HTTPS流量的正向代理,也支持反向代理。还可以将其配置为同时在任一模式或两种模式下运行。它具有持久缓存、插件API、支持互联网缓存协议、ESI(Edge Side Includes)、Keep-Alive等。
在安全方面,流量服务器支持控制客户端访问,方法是允许您配置允许使用代理缓存的客户端、客户端与其自身之间以及客户端与源服务器之间的连接的SSL终端。它还支持通过插件进行身份验证和基本授权、记录(它收到的每个请求和检测到的每个错误)和监控。
流量服务器可用作Web代理缓存、前向代理、反向代理、透明代理、负载平衡器,或在缓存层次结构中使用。
结束语
缓存是最有益且久负盛名的Web内容交付技术之一,主要设计用于提高网站或应用程序的速度。它有助于减少您的服务器负载、延迟和网络带宽因为缓存的数据被提供给客户端,从而提高了应用程序响应时间和向客户端的传输速度。
在本文中,我们回顾了在Linux系统上使用的顶级开源缓存工具。如果你知道这里没有列出的其他开源缓存工具,请通过下面的反馈表与我们分享。您也可以与我们分享您对这篇文章的看法。