微服务实践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
      Ehcache就是Hibernate缓存机制的缓存实现。而Hibernate本身就带有一级缓存、二级缓存功能。

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

    • layering-cache
      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集群实现原理探讨
集群教程

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容