共计 7948 个字符,预计需要花费 20 分钟才能阅读完成。
可靠的分布式计算系统和应用程序已成为杰出业务的基石,尤其是在自动化和管理关键任务业务流程以及向客户提供服务方面。作为这些系统和应用程序的开发人员和系统管理员,您应该提供各种信息技术(IT)解决方案,以确保您拥有最有效的系统。
这包括诸如为系统 / 应用程序性能,可靠性,可用性和可伸缩性设计,测试和实施策略的任务,以为最终用户提供令人满意的服务水平。缓存是您可以依赖的许多非常基本但有效的应用程序交付技术之一。在进一步介绍之前,让我们简要地看一下什么是缓存,在何处和 / 或如何应用缓存及其好处?
什么是缓存或内容缓存?
缓存(或内容缓存)是一种广泛使用的技术,用于将数据副本存储在临时存储位置(也称为缓存)中,因此与从原始存储中检索数据相比,可以轻松,快速地访问数据。根据缓存的类型和目的,存储在缓存中的数据可以包括文件或文件片段(例如 HTML 文件,脚本,图像,文档等),数据库操作或记录,API 调用,DNS 记录等。
缓存可以采用硬件或软件的形式。基于软件的缓存(这是本文的重点)可以在应用程序堆栈的不同层上实现。
可以在客户端(或应用程序表示层)应用缓存,例如,浏览器缓存或应用程序缓存(或脱机模式)。大多数(如果不是全部)现代浏览器都附带有 HTTP 缓存的实现。即在访问 web 应用程序时,使您能够查看网站或应用程序上的最新数据或内容,而不是在浏览器中使用本地存储的内容的旧副本。
客户端缓存的另一个示例是 DNS 缓存,它发生在操作系统(OS)级别。它是有关操作系统或 Web 浏览器以前的 DNS 查找信息的临时存储。
也可以通过代理在 LAN 或 WAN 中的网络级别上实现缓存。这种缓存的一个常见示例是 CDN(内容交付网络),它是 Web 代理服务器的全局分布式网络。
第三,您还可以在源服务器或后端服务器上实现缓存。服务器级缓存有多种形式,包括:
Web 服务器缓存(用于缓存图像,文档,脚本等)。
- 应用程序缓存或存储(用于从磁盘读取文件,从其他服务或进程读取数据或从 API 请求数据等)。
- 数据库缓存(提供对常用数据(例如请求的数据库行,查询结果和其他操作)的内存访问)。
请注意,缓存数据可以存储在任何存储系统中,包括数据库,文件,系统内存等,但是应该是比主要源更快的介质。在这方面,内存中缓存是最有效且最常用的缓存形式。
为什么要使用缓存?
缓存具有许多优点,包括:
在数据库级别,它将缓存数据的读取性能提高到微秒。您还可以使用回写式高速缓存来提高写入性能,在这种情况下,数据以指定的间隔写入内存中,然后再写入磁盘或主存储中。但是它的数据完整性方面可能会带来灾难性的影响。例如,当系统在将数据提交到主存储之前崩溃时。
在应用程序级别,缓存可以在应用程序进程本身中存储频繁读取的数据,从而将数据查找时间从几秒钟减少到几微秒,尤其是在网络上。
考虑到整个应用程序和服务器的性能,缓存有助于减少服务器的负载,延迟和网络带宽,因为缓存的数据被提供给客户端,从而提高了响应时间和向客户端的交付速度。
缓存还允许内容可用性(尤其是通过 CDN),以及许多其他好处。
在本文中,我们将回顾一些用于在 Linux 中实现服务器端缓存的顶级开源(应用程序 / 数据库缓存和缓存代理服务器)工具。
1、Redis
Redis(完整的远程字典服务器)是一种免费,开源,快速,高性能,灵活的分布式内存计算系统,可以从大多数(即使不是全部)编程语言中使用。
它是内存中的数据结构存储,用作缓存引擎,内存中的持久磁盘上数据库和消息代理。尽管 Redis 在 Linux(推荐的部署平台)和 OS X 上进行了开发和测试,但 Redis 还可在其他 POSIX 系统(例如 * BSD)中运行,而无需任何外部依赖。
Redis 支持大量数据结构,例如字符串,哈希,列表,集合,排序集合,位图,流等。这使程序员可以使用特定的数据结构来解决特定的问题。它支持对其数据结构进行自动操作,例如追加到字符串,将元素推送到列表,增加哈希值,计算集合交集等。
它的主要功能包括 Redis 主从复制(默认情况下是异步的),使用 Redis Sentinel 提供的高可用性和自动故障转移,Redis 集群(您可以通过添加更多集群节点来水平扩展)和数据分区(在多个 Redis 实例之间分配数据))。它还具有对事务,Lua 脚本,一系列持久性选项以及客户端 - 服务器通信加密的支持。
作为一个内存中但持久的磁盘数据库,Redis 在与内存中数据集配合使用时表现最佳。但是,您可以将其与磁盘数据库一起使用,例如 MySQL,PostgreSQL 等。例如,您可以在 Redis 中获取大量写操作的小数据,并将其他数据块保留在磁盘数据库中。
Redis 通过多种方式支持安全性:一种是使用“保护模式”功能来保护 Redis 实例不被外部网络访问。它还支持客户端 - 服务器身份验证(在服务器中配置密码并在客户端中提供密码)和所有通信通道(例如,客户端连接,复制链接和 Redis Cluster 总线协议等)上的 TLS。
Redis 有很多用例,包括数据库缓存,全页缓存,用户会话数据管理,API 响应存储,发布 / 订阅消息传递系统,消息队列等等。这些可以应用于游戏,社交网络应用程序,RSS 提要,实时数据分析,用户推荐等。
相关:
- 高频 Redis 面试题解析:Redis 事务是否具备原子性?https://www.linuxidc.com/Linux/2020-04/163058.htm
- Redis 数据库简介与 CentOS 7 下编译安装步骤 https://www.linuxidc.com/Linux/2020-04/162999.htm
- Redis 6.0 发布,内存键值数据库的重大更新 https://www.linuxidc.com/Linux/2020-05/163088.htm
2. Memcached
Memcached 是一个免费,开源,简单但功能强大的分布式内存对象缓存系统。它是内存中的键值存储区,用于存储小块数据,例如数据库调用,API 调用或页面呈现的结果。它可以在类似 Unix 的操作系统(包括 Linux 和 OS X)上运行,也可以在 Microsoft Windows 上运行。
作为开发人员工具,它旨在通过缓存内容(默认情况下为最近最少使用(LRU)缓存)来提高动态 Web 应用程序的速度,从而减少磁盘上的数据库负载–它充当以下任务的短期内存应用程序。它提供了最流行的编程语言的 API。
Memcached 支持将字符串作为唯一的数据类型。它具有客户端 - 服务器体系结构,其中一半逻辑发生在客户端,另一半发生在服务器端。重要的是,客户了解如何为项目选择要写入或读取的服务器。此外,如果客户端无法连接到服务器,则客户端非常了解该怎么办。
尽管它是一个分布式缓存系统,因此支持群集,但 Memcached 服务器彼此断开连接(即,它们彼此之间不知道)。这意味着没有像 Redis 这样的复制支持。他们还了解如何存储和获取项目,管理何时驱逐或重新使用内存。您可以通过添加更多服务器来增加可用内存。
从 Memcached 1.5.13 开始,它支持通过 TLS 进行身份验证和加密,但是此功能仍处于试验阶段。
相关:
如何在 Ubuntu 18.04 和 16.04 LTS 上安装 Memcached 缓存系统 https://www.linuxidc.com/Linux/2020-03/162742.htm
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 有许多用例,包括缓存系统,系统工作负载加速,实时数据处理和分析。它也可以用作以图形为中心的平台。
相关:
GridGain 确认 Apache Ignite 性能是 Hazelcast 的 2 倍 http://www.linuxidc.com/Linux/2016-02/128745.htm
4、Couchbase Server
Couchbase Server 还是一个开源,分布式,面向文档的 NoSQL 数据库管理系统,以键 - 值格式将数据存储为项目。它可以在 Linux 以及 Windows 和 Mac OS X 等其他操作系统上运行。它使用功能丰富,面向文档的查询语言称为 N1QL,该语言提供强大的查询和索引服务,以支持对数据的亚毫秒级操作。
它的显着特征是具有托管缓存的快速键值存储,专用索引器,强大的查询引擎,横向扩展体系结构(多维扩展),大数据和 SQL 集成,全栈安全性和高可用性。
Couchbase Server 带有原生多实例集群支持,集群管理器工具可协调所有节点活动,并仅向客户端提供集群范围的接口。重要的是,您可以根据需要添加,删除或替换节点,而无需停机。它还支持跨集群节点的数据复制,跨数据中心的选择性数据复制。
它使用专用的 Couchbase 服务器端口,不同的身份验证机制(使用凭据或证书),基于角色的访问控制(以检查每个经过身份验证的用户来检查分配给他们的系统定义的角色),审核,日志和会话,通过 TLS 实现安全性。
它的用例包括统一的编程界面,全文本搜索,并行查询处理,文档管理和索引等等。它是专门为大型交互式 Web,移动和 IoT 应用程序提供低延迟数据管理而设计的。
相关:
在 Linux CentOS 上安装 Couchbase Server http://www.linuxidc.com/Linux/2014-10/107715.htm
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 请求路由器。
相关:
- Varnish4.0 缓存代理配置 https://www.linuxidc.com/Linux/2018-11/155177.htm
- 缓存服务器 Varnish 概念篇 https://www.linuxidc.com/Linux/2014-05/101389.htm
- Varnish 缓存实现动静分离 https://www.linuxidc.com/Linux/2016-11/137152.htm
- Linux 中 Varnish 基础应用 https://www.linuxidc.com/Linux/2016-08/134025.htm
- Varnish 缓存代理服务器简介及主要特性 https://www.linuxidc.com/Linux/2018-09/1542.htm
8、Squid 缓存代理
Squid 是另一个针对 Linux 的免费,开源,出色且广泛使用的代理和缓存解决方案。它是功能丰富的 Web 代理缓存服务器软件,可为流行的网络协议(包括 HTTP,HTTPS 和 FTP)提供代理和缓存服务。它还可以在其他 UNIX 平台和 Windows 上运行。
就像 Varnish Cache 一样,它接收来自客户端的请求并将它们传递到指定的后端服务器。后端服务器响应时,会将内容的副本存储在缓存中,然后将其传递给客户端。将来对相同内容的请求将从缓存中得到处理,从而将内容更快地传递到客户端。因此,它可以优化客户端和服务器之间的数据流以提高性能,并缓存常用内容以减少网络流量并节省带宽。
Squid 具有一些功能,例如通过代理服务器的相互通信的层次结构分配负载,生成有关 Web 使用模式的数据(例如,有关访问量最大的站点的统计信息),使您能够分析,捕获,阻止,替换或修改代理的消息。
它还支持安全功能,例如丰富的访问控制,授权和身份验证,SSL/TLS 支持以及活动日志记录。
相关:
如何在 Ubuntu 18.04 上安装和配置 Squid 代理 https://www.linuxidc.com/Linux/2019-08/159960.htm
9、NGINX
NGINX(发音为 Engine-X)是一种开放源代码,高性能,功能齐全且非常流行的整合解决方案,用于设置 Web 基础结构。它是 HTTP 服务器,反向代理服务器,邮件代理服务器和通用 TCP/UDP 代理服务器。
NGINX 提供基本的缓存功能,其中缓存的内容存储在磁盘上的持久性缓存中。NGINX 中有关内容缓存的有趣之处在于,当它无法从源服务器获取新鲜内容时,可以对其进行配置以从其缓存中传递陈旧的内容。
NGINX 提供了多种安全功能来保护您的 Web 系统,包括 SSL 终止,使用 HTTP 基本身份验证限制访问,基于子请求结果的身份验证,JWT 身份验证,限制对代理 HTTP 资源的访问,按地理位置限制的访问,以及更多。
它通常被部署为应用程序堆栈中的反向代理,负载平衡器,SSL 终结器 / 安全网关,应用程序加速器 / 内容缓存和 API 网关。它还用于流媒体。
开发人员和管理员必须掌握的 25 个 Nginx 命令 见 https://www.linuxidc.com/search.aspx?where=nkey&keyword=65544
10、Apache Traffic Server
最后但也重要的一点是,我们有 Apache Traffic Server,这是一种开源,快速,可扩展且可扩展的缓存代理服务器,支持 HTTP/1.1 和 HTTP/2.0。它旨在通过为企业,ISP(Internet 服务器提供商),骨干网提供商等在网络边缘缓存经常访问的内容来提高网络效率和性能。
它支持 HTTP/HTTPS 通信的正向和反向代理。它还可以配置为同时以一种或两种模式运行。它具有持久性缓存,插件 API;支持 ICP(Internet 缓存协议),ESI(Edge Side Includes);Keep-Alive 等。
在安全性方面,Traffic Server 支持控制客户端访问,方法是允许您配置允许使用代理缓存的客户端,客户端与自身之间以及自身与原始服务器之间的连接的 SSL 终止。它还通过插件支持身份验证和基本授权,记录(接收到的每个请求以及检测到的每个错误)以及进行监视。
Traffic Server 可用作 Web 代理缓存,正向代理,反向代理,透明代理,负载均衡器或在缓存层次结构中使用。
相关:
CentOS 7.4 下 Apache Traffic Server 安装部署 https://www.linuxidc.com/Linux/2020-05/163160.htm
总结
缓存是最有用和历史悠久的 Web 内容交付技术之一,其主要目的是提高网站或应用程序的速度。由于将缓存的数据提供给客户端,因此它有助于减少服务器负载,延迟和网络带宽,从而提高了应用程序响应时间和向客户端的交付速度。
在本文中,我们回顾了可在 Linux 系统上使用的顶级开源缓存工具。如果您知道此处未列出的其他开源缓存工具,请通过下面的留言与我们分享。您也可以与我们分享您对本文的看法。谢谢阅读。
: