网站搜索

2023 年 Linux 最佳开源缓存工具


可靠的分布式计算系统和应用程序已成为知名企业的基石,特别是在自动化和管理关键任务业务流程以及向客户提供服务方面。

作为这些系统和应用程序的开发人员和系统管理员,您需要提供各种信息技术 (IT) 解决方案,以确保您拥有最高效的系统。

这包括设计、测试和实施系统/应用程序性能、可靠性、可用性和可扩展性策略等任务,以便为最终用户提供令人满意的服务水平。

缓存是您可以信赖的众多非常基本但有效的应用程序交付技术之一。在进一步讨论之前,让我们简要了解一下什么是缓存、在何处和/或如何应用缓存,以及它的好处。

什么是缓存或内容缓存?

缓存(或内容缓存)是一种广泛使用的技术,用于将数据副本存储在临时存储位置(也称为缓存)以便从原始存储中检索数据时可以轻松快速地访问数据。

存储在缓存中的数据可以包括文件或文件片段(例如HTML文件、脚本、图像、文档等)、数据库操作或记录、API调用、DNS记录等,具体取决于缓存的类型和目的。

缓存可以是硬件或软件的形式。基于软件的缓存(这是本文的重点)可以在应用程序堆栈的不同层实现。

缓存可以应用于客户端(或应用程序表示层),例如浏览器缓存或应用程序缓存(或离线模式)。大多数(如果不是全部)现代浏览器都附带了 HTTP 缓存的实现。

您可能在访问网络应用程序时听说过流行的短语“清除缓存”,使您能够查看网站或应用程序上的最新数据或内容,而不是使用旧版本的浏览器本地存储的内容。

客户端缓存的另一个示例是 DNS 缓存,它发生在操作系统 (OS) 级别。它是有关操作系统或 Web 浏览器先前 DNS 查找的信息的临时存储。

缓存还可以通过代理在LANWAN网络级别实现。此类缓存的一个常见示例是 CDN内容交付网络),它是全球分布的 Web 代理服务器网络。

第三,您还可以在源服务器或后端服务器上实现缓存。服务器级缓存有多种形式,它们包括:

  • 网络服务器缓存(用于缓存图像、文档、脚本等)。
  • 应用程序缓存记忆(用于从磁盘读取文件、从其他服务或进程读取数据,或从 API 请求数据等)。
  • 数据库缓存(提供对常用数据的内存访问,例如请求的数据库行、查询结果和其他操作)。

请注意,缓存数据可以存储在任何存储系统中,包括数据库、文件、系统内存等,但应该是比主源更快的介质。在这方面,内存缓存是最有效且最常用的缓存形式。

为什么使用缓存?

缓存提供了许多好处,包括:

  • 在数据库级别,它将缓存数据的读取性能提高到微秒级。您还可以使用回写式缓存来提高写入性能,其中数据先写入内存,然后按指定的时间间隔写入磁盘或主存储。但它的数据完整性方面可能会产生潜在的灾难性影响。例如,当系统在数据提交到主存储之前崩溃时。
  • 在应用程序级别,缓存可以存储应用程序进程本身内频繁读取的数据,从而将数据查找时间从秒减少到微秒,尤其是通过网络。
  • 考虑到整体应用程序和服务器性能,缓存有助于减少服务器负载、延迟和网络带宽,因为缓存的数据被提供给客户端,从而提高响应时间和向客户端的传送速度。
  • 缓存还可以实现内容可用性(尤其是通过 CDN)以及许多其他好处。

在本文中,我们将回顾一些用于实现服务器端的顶级开源(应用程序/数据库缓存缓存代理服务器)工具Linux 中的缓存。

1.Redis

Redis(全称为远程字典服务器)是一种免费、开源、快速、高性能且灵活的分布式内存计算系统,可以用于大多数(如果不是全部)编程语言。

它是一种内存数据结构存储,可用作缓存引擎、内存持久磁盘数据库和消息代理。尽管它是在 Linux(推荐部署平台)和 OS X 上开发和测试的,但 Redis 也可以在其他 POSIX 系统(例如 *BSD)上运行,无需任何外部依赖。

Redis 支持多种数据结构,例如字符串、哈希、列表、集合、排序集、位图、流等。这使得程序员能够使用特定的数据结构来解决特定的问题。它支持对其数据结构进行自动操作,例如附加到字符串、将元素推送到列表、递增哈希值、计算集合交集等。

其主要功能包括Redis主从复制(默认情况下是异步的)、使用Redis Sentinel提供的高可用性和自动故障转移、Redis集群(您可以通过添加更多集群节点来水平扩展)和数据分区(在多个Redis之间分配数据)实例)。它还支持事务、Lua 脚本、一系列持久性选项以及客户端-服务器通信加密。

作为内存中但持久的磁盘数据库,Redis 在与内存数据集配合得最好时可提供最佳性能。但是,您可以将其与磁盘数据库(例如 MySQL、PostgreSQL 等)一起使用。例如,您可以在 Redis 中获取写入量很大的小数据,并将其他数据块保留在磁盘数据库中。

Redis 通过多种方式支持安全性:其中之一是使用“保护模式”功能来保护 Redis 实例不被外部网络访问。它还支持所有通信通道(例如客户端连接、复制链接、Redis 集群总线协议等)上的客户端-服务器身份验证(其中在服务器中配置密码并在客户端中提供密码)和 TLS。

Redis 有很多用例,包括数据库缓存、全页缓存、用户会话数据管理、API 响应存储、发布/订阅消息系统、消息队列等等。这些可以应用于游戏、社交网络应用、RSS 源、实时数据分析、用户推荐等。

2. 内存缓存

Memcached 是一个免费、开源、简单但功能强大的分布式内存对象缓存系统。它是内存中的键值存储,用于存储小数据块,例如数据库调用、API 调用或页面渲染的结果。它可以在类 Unix 操作系统(包括 Linux 和 OS X)以及 Microsoft Windows 上运行。

作为一种开发工具,它旨在通过缓存内容(默认情况下,最近最少使用 (LRU) 缓存)来提高动态 Web 应用程序的速度,从而减少磁盘数据库加载——它充当应用程序的短期内存。它为最流行的编程语言提供了 API。

Memcached 支持字符串作为唯一的数据类型。它具有客户端-服务器架构,其中一半逻辑发生在客户端,另一半发生在服务器端。重要的是,客户了解如何选择要写入或读取某个项目的服务器。此外,客户端非常清楚在无法连接到服务器时该怎么做。

虽然它是一个分布式缓存系统,因此支持集群,但 Memcached 服务器彼此断开连接(即它们彼此不知道)。这意味着不存在像 Redis 那样的复制支持。他们还了解如何存储和获取项目,以及管理何时驱逐或重用内存。您可以通过添加更多服务器来增加可用内存。

从 Memcached 1.5.13 开始,它支持通过 TLS 进行身份验证和加密,但此功能仍处于实验阶段。

3.阿帕奇点燃

Apache Ignite 也是一个免费开源、水平可扩展的分布式内存键值存储、缓存和多模型数据库系统,为计算分布式数据提供强大的处理 API。它也是一个内存数据网格,可以在内存中使用,也可以与 Ignite 本机持久性一起使用。它运行在类 UNIX 系统上,例如 LinuxWindows

它具有多层存储、完整的 SQL 支持以及跨多个集群节点的 ACID(原子性、一致性、隔离性、持久性)事务(仅在键值 API 级别支持)、协同定位处理、和机器学习。它支持与任何第三方数据库自动集成,包括任何RDBMS(例如 MySQL、PostgreSQL、Oracle 数据库等)或 NoSQL 存储。

值得注意的是,虽然Ignite作为一个SQL数据存储来工作,但它并不完全是一个SQL数据库。与传统数据库相比,它明显地处理约束和索引;它支持主索引和辅助索引,但只有主索引用于强制唯一性。此外,它不支持外键约束。

Ignite 还允许您在服务器上启用身份验证并向客户端提供用户凭据,从而支持安全性。还支持 SSL 套接字通信,以在所有 Ignite 节点之间提供安全连接。

Ignite 有许多用例,包括缓存系统、系统工作负载加速、实时数据处理和分析。它还可以用作以图为中心的平台。

4.Couchbase服务器

Couchbase Server 也是一个开源、分布式、面向 NoSQL 文档的参与数据库,以键值格式将数据存储为项目。它适用于 Linux 以及 Windows 和 Mac OS X 等其他操作系统。它使用功能丰富、面向文档的查询语言(称为 N1QL),该语言提供强大的查询和索引服务以支持对数据的亚毫秒级操作。

其显着特点是具有托管缓存的快速键值存储、专用索引器、强大的查询引擎、横向扩展架构(多维扩展)、大数据和 SQL 集成、全栈安全性和高可用性。

Couchbase Server 附带本机多实例集群支持,其中集群管理器工具协调所有节点活动,并向客户端提供简单的集群范围接口。重要的是,您可以根据需要添加、删除或替换节点,而无需停机。它还支持跨集群节点的数据复制,以及跨数据中心的选择性数据复制。

它使用专用 Couchbase Server 端口、不同的身份验证机制(使用凭据或证书)、基于角色的访问控制(检查每个经过身份验证的用户是否分配了系统定义的角色)、审核、日志和会话,通过 TLS 实现安全性。

其用例包括统一编程接口、全文搜索、并行查询处理、文档管理、索引等等。它专门为大规模交互式 Web、移动和物联网应用程序提供低延迟数据管理。

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 是一个免费的开源 Memcached 协议路由器,用于扩展 Memcached 部署,由 Facebook 开发和维护。它具有 Memcached ASCII 协议、灵活路由、多集群支持、多级缓存、连接池、多种哈希方案、前缀路由、复制池、生产流量阴影、在线重新配置和目标运行状况监控/自动故障转移。

此外,它还支持冷缓存预热、丰富的统计和调试命令、可靠的删除流服务质量、大值和广播操作,并支持 IPv6 和 SSL。

它在 Facebook 和 Instagram 上用作缓存基础设施的核心组件,峰值时每秒处理近 50 亿个请求。

7.清漆缓存

Varnish Cache 是一种开源、灵活、现代且多用途的 Web 应用程序加速器,位于 Web 客户端和源服务器之间。它可以在所有现代 Linux、FreeBSD 和 Solaris(仅限 x86)平台上运行。它是一个优秀的缓存引擎和内容加速器,您可以将其部署在 NGINX、Apache 等 Web 服务器前面,监听默认 HTTP 端口,接收客户端请求并将其转发到 Web 服务器并交付 Web服务器响应客户端。

在充当客户端和源服务器之间的中间人的同时,Varnish Cache 提供了多种优势,该元素将 Web 内容缓存在内存中,以减轻 Web 服务器负载并提高向客户端的交付速度。

接收到来自客户端的 HTTP 请求后,将其转发到后端 Web 服务器。一旦 Web 服务器响应,Varnish 会将内容缓存在内存中并将响应传递给客户端。当客户端请求相同的内容时,Varnish 将从缓存增强应用程序响应中提供服务。如果无法提供缓存中的内容,则请求将转发到后端,响应将被缓存并传递到客户端。

Varnish 功能 VCLVarnish 配置语言 - 一种灵活的特定于域的语言),用于配置请求的处理方式等,Varnish模块 (VMODS),是 Varnish Cache 的扩展。

在安全方面,Varnish Cache 通过 VMODS 支持日志记录、请求检查、限制、身份验证和授权,但缺乏对 SSL/TLS 的本机支持。您可以使用 SSL/TLS 代理(例如 Hitch 或 NGINX)为 Varnish 缓存启用 HTTPS

您还可以使用 Varnish Cache 作为 Web 应用程序防火墙、DDoS 攻击防御器、热链接保护器、负载均衡器、集成点、单点登录网关、身份验证和授权策略机制、不稳定后端的快速修复以及 HTTP 请求路由器。

8.Squid 缓存代理

另一个免费、开源、出色且广泛使用的 Linux 代理和缓存解决方案是 Squid。它是一款功能丰富的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流量服务器

最后但并非最不重要的一点是,我们有 Apache Traffic Server,这是一个开源、快速、可扩展且可扩展的缓存代理服务器,支持 HTTP/1.1 和 HTTP/2.0。它旨在通过在网络边缘缓存经常访问的内容来提高网络效率和性能,适用于企业、ISP(互联网服务器提供商)、骨干提供商等。

它支持 HTTP/HTTPS 流量的正向和反向代理。它还可以配置为同时在任一模式或两种模式下运行。它具有持久缓存、插件 API;支持ICP(互联网缓存协议)、ESI(边缘端包含);保持活力等等。

在安全性方面,Traffic Server 支持控制客户端访问,允许您配置允许使用代理缓存的客户端、客户端与其自身之间以及自身与源服务器之间的连接的 SSL 终止。它还支持通过插件进行身份验证和基本授权、日志记录(它收到的每个请求和它检测到的每个错误)和监控。

Traffic Server 可以用作 Web 代理缓存、正向代理、反向代理、透明代理、负载均衡器或缓存层次结构中。

结束语

缓存是最有益且历史最悠久的网络内容交付技术之一,主要旨在提高网站或应用程序的速度。它有助于减少服务器负载、延迟和网络带宽,因为缓存的数据会提供给客户端,从而提高应用程序响应时间和向客户端的交付速度。

在本文中,我们回顾了在 Linux 系统上使用的顶级开源缓存工具。如果您知道此处未列出的其他开源缓存工具,请通过下面的反馈表与我们分享。您也可以与我们分享您对本文的看法。