有状态的负载均衡技术需要服务提供者之间共享数据。
缓存是一种在多个消费端或服务端之间共享数据的技术,计算或获取数据都是非常昂贵的.数据存储和检索在一个子系统中。该子系统提供对频繁访问数据副本的快速访问。
缓存是通过一个索引表实现的,其中有一个唯一键用于引用某些数据。消费者首先通过检查(命中)缓存,并从缓存中检索数据来访问数据。如果数据不存在(缓存没有命中),则会发生更昂贵的索引操作,消费者或者子系统会将数据插入缓存。
如果存储设备在不更新缓存的情况下更改, 则缓存可能会变成过期数据。缓存的写入策略定义了如何刷新缓存数据。一些常见的写入策略包括:
一般情况下隐式缓存系统是特定于平台或语言的。例如Terracotta只能运行在Java和JVM-hosted 语言上,例如Groovy或者Kotlin。。显式缓存系统可以同时用于多种编程语言和跨多个平台。
Memcached和Redis与每个主要的编程语言一起工作,并且与Java、.NET和本地C++应用程序一致。
Web缓存用于存储文档或部分文档(更小的数据),以减少Web应用程序的服务器负载、带宽使用和延迟。Web缓存可以存在于浏览器(用户缓存)或服务器上,这是本节的主题。Web缓存对客户端不可见,可以在以下任何类别中分类:
缓存技术可以跨多个系统实现, 这些系统为多个使用者和多个资源的请求提供服务。这些称为分布式缓存, 如图6中的设置所示。Akamai 是分布式 web 缓存的示例, memcached 是分布式应用程序缓存的一个示例。
图 6: 分布式缓存