微服务实践01--微服务管理11--缓存02--分级缓存设计

简介: 微服务实践01--微服务管理11--缓存02--分级缓存设计

微服务实践目录,可以参见连接。

缓存系列包括:
1.微服务管理-11.缓存概述
1.微服务管理-11.缓存-0.技术
1.微服务管理-11.缓存-1.多级缓存设计
1.微服务管理-11.缓存-2.典型缓存架构设计
1.微服务管理-11.缓存-3.实践
[1.微服务管理-11.缓存-4.总结]()

背景

通过前面的文章说明了缓存的基本内容,但对于缓存来说可以在网络服务中的分层架构中的任意一点都存在。从网络服务分层架构的最前端浏览器到最后端数据库都使用了缓存技术。简单的看在网络服务中的每一层中都有缓存,那就是多级缓存。

像CPU的Cache系统的缓存层级的划分是因为CPU在做着几方面的权衡:速度、容量、晶体管体积、发热量等。L1为了更快的访问,用了更多/更大/更复杂的晶体管。而L2为了更大容量,选择了更小/更简单的晶体管来实现。而在互联网系统中应该考虑哪些权衡点来设计不同级别的缓存就成了问题。
cpu存储特性

分级原因

经典和通用型的互联网系统就是一个分层系统,按照互联网系统的分层概念在每一层上都有不同的缓存技术与处理方式。互联网分层缓存技术可以参见:一篇文章让你明白你多级缓存的分层架构。我们这里不讨论分层架构中每层中缓存技术,这里讨论从服务(业务)接收到用户请求后到服务(业务)端作出响应的这部分的缓存分级。

  • 分级场景

那么在互联网系统中为什么做缓存分级?答案就是解决“缓存雪崩”问题。缓存雪崩就是指缓存由于某些原因(混存宕机、大面积数据过期),导致大量请求到达后端数据库。进一步促成数据库崩溃,整个系统崩溃,发生灾难。

通过多级缓存解决缓存雪崩的问题。一方面可以提高缓存的稳定性,另一方面可以将分级缓存看作有一个更大的缓存。这个缓存池内缓存着所有的数据,只要通过缓存击穿的各种机制将数据一级一级的提调到最高级缓存中以达到像CPU分级缓存一样的要求。

除了缓存雪崩这个场景外,还有用户分群,地域分群等业务数据缓存可能会用到缓存分级的方式处理。

  • 与分布式缓存不同

分布式缓存是将缓存镜像同步到其他的缓存服务上。而缓存分级是将缓存划分为不同的层次,每一层存储的都是下层数据的子集。一个是镜像一个是子集,以这样的方式实现缓存在不同场景下不同的解决方案。

关注点

缓存分级主要解决缓存雪崩的问题。那么在解决这个问题的过程中就需要对分级缓存的需要设计的点或着需要重点关注的点进行梳理,并根据这些点进行有针对行的设计工作。

  • 同构或者异构

在《1.微服务管理-11.缓存概述》已经说明缓存的数据应该是越靠近响应的最终结果越好。这样可以最大限度的减少因为业务代码处理造成的延时问题。每级缓存应该保存同样的数据还是保存不同的数据就成了问题,最靠近业务服务的缓存是不是应该最应该是最终结果,而越靠近数据源的缓存是不是就应该更倾向于结构化数据。
同构与异构

  • 透明化

缓存分层后对于研发人员来说应该是透明的。不应牵扯到过多的业务代码。使业务代码和缓存代码耦合的分层缓存。

  • 自动化

各级缓存间的数据的同步应该最好能够自动化。可以从缓存更新的方式中直接获取缓存映射逻辑,并根据逻辑自行更新与失效缓存。缓存击穿后更新缓存需要有自动化方法。

业界方案

从业务分级缓存设计到的技术方面来看,分级缓存可以在客户端分级缓存和服务端分级缓存两种方式。下面分别说明这两种方式的内容:

  • 客户端分级缓存(Java)

Ehcache就是Hibernate缓存机制的缓存实现。而Hibernate本身就带有一级缓存、二级缓存功能。

J2Cache是一个Java的二级缓存框架。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的缓存冷启动后对后端业务的冲击。

layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似,主要目的是在使用注解的时候支持配置过期时间。layering-cache其实是一个两级缓存,一级缓存使用Caffeine作为本地缓存,二级缓存使用redis作为集中式缓存。并且基于redis的Pub/Sub做缓存的删除,所以它是一个适用于分布式环境下的一个缓存系统。

  • 服务端分级缓存

    Redis ReplicationCodisTwemproxy都是服务端分布式缓存技术,但通过调查发现所有的服务器缓存技术都不支持服务端分级缓存的。本想借助于Redis的Replication自行实现Redis的多级缓存支持,但是调查发现Redis的Miss事件是没有对外公布的,无法使用Lua,watch进行Miss事件获取。所以,不能通过Miss事件进行下一集缓存查询。

设计

根据业界对于缓存的解决方案来说,对于服务端的缓存分级来说场景不多。故这里就不进行服务端缓存分级的考量。在这样的前提下对缓存进行分级。像CPU的缓存的方式一样,作者将缓存距离业务服务的远近对缓存服务进行分级。并说明这些分级下一般的实现技术。第一级缓存是服务的本地缓存,第二季缓存是服务外缓存服务器协助缓存。

第一级缓存应该存储数据量不是很大,数据更新频率较低的数据。一般情况下使用本地缓存作为第一级缓存。使用本地缓存的与微服务设计原则中的无状态服务有相互冲突。这种冲突在分级缓存的实现中必须解决,解决这个问题需要定义更好的缓存过期和缓存更新策略来解决。并分布式服务中每个服务都有多个实例,实例之间的缓存数据也需要进行同步保证数据的一致性。

第二级缓存使用缓存服务的方式实现就会增加缓存获取与操作过程中的进程间通信时间,所以缓存与最好处于同一个网络中,以减少网络通信的消耗。

缓存分级

回顾上面所说到的缓存分级注意事项:同构或者异构、透明化、自动化,通过对Ehcache可以解决上述说有的注意点。不过所有的跟缓存相关的代码都需要自行实现,实现过程中操作异构问题、解决缓存代码与业务代码隔离问题、解决自动化更新问题。

总结

分级缓存在一定等读上解决系统可靠性,可用性问题。并在此基础上可以解决在地域IDC中对于地域用户的数据的缓存与处理概念。以地域性划分IDC以使用户可以得到就近服务,就近处理用户的请求。分级缓存可以应用解决技术问题也可以解决业务数据问题,可以在适用的场景中适用

参考

多级缓存——原理
多级缓存设计详解 | 给数据库减负,刻不容缓!
有赞透明多级缓存解决方案(TMC)
千万级并发!如何设计一个多级缓存系统?
你所不知道的堆外缓存
一篇文章让你明白你多级缓存的分层架构

Cache为什么有那么多级?为什么一级比一级大?是不是Cache越大越好?

深入理解Redis Master-Slaver/Sentinel/Cluster原理
深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
复制(Replication)
如何基于 Redis Replication 设计并实现 Redis-replicator?
Redis集群实现原理探讨
集群教程

如何优雅的设计和使用缓存?

目录
相关文章
|
3月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1739 10
|
7月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
197 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
|
6月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
261 0
|
8月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
476 12
|
10月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
723 17
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
250 32
|
10月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
231 1
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
219 0

热门文章

最新文章