可靠的分布式计算系统和应用程序已成为杰出业务的基石,尤其是在自动化和管理关键任务业务流程以及向客户提供服务方面。作为这些系统和应用程序的开发人员和系统管理员,您应该提供各种信息技术(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脚本,一系列持久性选项以及客户端-服务器通信加密的支持。