小窍门
Azure 平台的云原生 .NET 应用电子书封面缩略图。
可以很好地理解缓存的好处。 此方法的工作原理是暂时将经常访问的数据从后端数据存储复制到离应用程序更近的 快速存储 。 缓存通常实现在...
- 数据保持相对静态。
- 数据访问速度缓慢,特别是与缓存速度相比。
- 数据受到高级别争用的影响。
为什么?
如 Microsoft缓存指南中所述,缓存可以提高单个微服务和整个系统的性能、可伸缩性和可用性。 它减少了处理大量针对数据存储系统的并发请求时的延迟和争用。 随着数据量和用户数的增加,缓存的好处就越大。
当客户端重复读取不可变或不经常更改的数据时,缓存最有效。 示例包括参考信息,例如产品和定价信息,或构造成本高昂的共享静态资源。
虽然微服务应该是无状态的,但当绝对需要时,分布式缓存可以支持对会话状态数据的并发访问。
此外,请考虑缓存以避免重复计算。 如果作转换数据或执行复杂的计算,请缓存后续请求的结果。
缓存体系结构
云原生应用程序通常实现分布式缓存体系结构。 缓存托管为基于云的 后盾服务,独立于微服务。 图 5-15 显示了体系结构。
图 5-15:云本机应用中的缓存
在上图中,请注意缓存是独立于微服务且共享的。 在此方案中, 缓存由 API 网关调用。 如第 4 章所述,网关充当所有传入请求的前端。 分布式缓存通过尽可能返回缓存的数据来提高系统响应能力。 此外,将缓存与服务分离后,缓存可以独立扩展或横向扩展以满足增加的流量需求。
上图显示一种常见的缓存模式,称为旁缓存模式。 对于传入请求,首先查询缓存(步骤 #1)以获取响应。 如果找到,则立即返回数据。 如果缓存中不存在数据(称为 缓存未命中),则会从下游服务(步骤 #2)中的本地数据库检索数据。 然后,它会写入缓存以供将来的请求(步骤 #3),并返回到调用方。 必须注意定期逐出缓存的数据,以便系统保持及时且一致。
随着共享缓存的增长,在多个节点之间对数据进行分区可能很有用。 这样做有助于减少争用并提高可扩展性。 许多缓存服务支持跨分区动态添加和删除节点以及重新平衡数据的功能。 此方法通常涉及聚类分析。 聚类将联合节点集合呈现为无缝的单个缓存。 但是,在内部,数据分散在节点之间,遵循预定义的分布策略,以均衡负载。
适用于 Redis 的 Azure 缓存
Azure Redis 缓存 是一种安全的数据缓存和消息传送代理服务,完全由Microsoft管理。 它作为平台即服务(PaaS)产品/服务使用,可提供对数据的高吞吐量和低延迟访问。 该服务可供 Azure 内部或外部的任何应用程序访问。
Azure Redis 缓存服务管理对跨 Azure 数据中心托管的开源 Redis 服务器的访问权限。 该服务充当提供管理、访问控制和安全性的外观。 该服务原生支持一组丰富的数据结构,包括字符串、哈希、列表和集。 如果应用程序已使用 Redis,它将按原样适用于 Azure Cache for Redis。
Azure Redis 缓存不仅仅是一个简单的缓存服务器。 它可以支持多种方案来增强微服务体系结构:
- 内存数据存储器
- 分布式非关系数据库
- 消息代理
- 配置或发现服务器
对于高级方案,缓存数据的副本可以 保存到磁盘。 如果灾难性事件同时禁用主缓存和副本缓存,则会从最新的快照重新构造缓存。
Azure Redis 缓存可在许多预定义的配置和定价层中使用。 高级层具有许多企业级功能,例如群集、数据持久性、异地复制和虚拟网络隔离。