微服务实践分布式服务

1.微服务管理-11.缓存-1.分级缓存设计

2020-02-21  本文已影响0人  Wales_Kuo

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

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

背景

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

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

cpu存储特性

分级原因

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

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

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

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

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

关注点

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

同构与异构

业界方案

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

设计

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

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

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

缓存分级

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

总结

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

参考

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读