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