微服务架构下静态数据通用缓存机制
戳蓝字“CSDN云计算”关注我们哦!
作者:Ala6
来源:Docker
业务服务:提供对某种业务数据的操作接口,比如车辆服务,提供对车辆基本信息的增删改查服务。
关系数据库:使用若干表持久化业务数据,比如SQLServer、MySQL、Oracle等。
持久化队列:可独立部署的队列程序,支持数据持久化,比如RabbitMQ、RocketMQ、Kafka等。
缓存处理程序:从队列接收数据,然后写入缓存。
数据一致处理程序:负责检查缓存数据库和关系型数据库中数据是否一致,如果不一致则使用关系数据库进行更新。
缓存数据库(Redis):支持持久化的缓存数据库,这里直接选了Redis,这个基本是业界标准了。
数据生产者:业务静态数据的来源,可以理解为前端APP、Web系统的某个功能或者模块。
数据消费者:需要使用这些业务静态数据的服务或者系统,比如报警系统需要获取车辆对应的用户信息以便发送报警。
缓存数据的大小:进程可以缓存数据的大小受限于系统可用内存,同时如果机器上部署了多个服务,某个服务使用了太多的内存,则可能会影响其它服务的正常访问,因此不适合大量数据的缓存。
缓存雪崩:缓存同时大量过期或者进程重启的情况下,可能产生大量的缓存穿透,过多的请求打到关系数据库上,可能导致关系数据库的崩溃,引发更大的不可用问题。
独立部署,不影响其它业务,还可以做集群,内存扩容比较方便。
支持数据持久化,即使Redis重启了,缓存的数据自身就可以很快恢复。
通过业务服务来包装对数据的操作,不管是操作关系数据库还是缓存数据库,数据消费者其实不需要关心,它只关心业务服务能不能提供高并发实时数据的查询能力。
利用分布式系统中经常使用队列进行解耦的方式,业务服务不干写入缓存的事,增加一个队列订阅数据变更,然后从队列取数据写入缓存数据库。
对于绝大部分正常的情况,通过队列更新缓存数据和业务服务中更新缓存数据,其实时性是差不多的,同时实现了业务操作和写缓存的解耦。
在极端崩溃导致数据不一致的情况下,通过数据一致检查程序进行补救,尽快更新缓存数据。
现在业务服务可以通过访问Redis缓存来提供对静态数据的高并发准实时查询能力,缓存中不存在的数据就是不存在,没有缓存穿透。
推荐阅读
1.微信群:
添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
2.征稿:
投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。