编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Zookeeper&Ehcache打造二级缓存,构建健壮系统

wxchong 2024-08-31 04:08:59 开源技术 6 ℃ 0 评论

简介

redis是高性能的key-value存储系统,可以与关系数据库搭配使用起到很好的补充作用,拥有多样的数据类型(string,list,zset,hash等)、提供丰富的api和完备的部署、容灾运维方案等特性,在数据缓存、消息队列、分布式锁、计数器、数据库等场景,应用广泛。

用过redis的几乎都不想放弃,就是...有点...小贵[白眼],高性能也给软硬件带来更高的要求。

EhCache 是一个纯 Java 的进程内缓存框架[鼓掌],特点主要有:

  1. 快速.
  2. 简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过 RMI、可插入 API 等方式进行分布式缓存
  7. 具有缓存和缓存管理器的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供 Hibernate 的缓存实现
  10. 等等

进程内缓存那就意味着便宜[比心],直接集成到现有项目中即可,简单意味着数据类型相对较少,维护的方式相对较少。

ZooKeeper是一个为分布式应用提供一致性服务的软件[加油],提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

设计及实现

EhCache

  • 作为一级缓存,存储数据量小、变化相对较小、访问频繁的数据,
  • 每一台服务器均接入EhCache相当于有几台业务服务器就有多少台EhCache服务器。
  • 不分主从,每台服务器都可以发起修改缓存值。
  • 设置缓存为永不过期。
  • 每次服务器重启全量加载数据。



ZooKeeper

  • 作为一致性服务器,建立永久节点和临时节点。
  • 在EhCache启动的时候为每个缓存key建立永久节点,并watch节点变化。
  • 节点data可以设置为时间戳,时间戳变更触发监控此key的所有服务器更新缓存。
  • 同时以机器名建立临时节点,建立服务器的监控看盘(维护一个机器名列表并展示在线,掉线状态),方便查看服务器是否掉线及补偿。
  • 添加session监听器,建立重连机制。
  • 掉线后临时节点会消失,重连时需要校验节点是否存在,不存在需要重新建立。


总结

通过建立EhCache一级缓存,可以大大减轻redis二级缓存和db的请求压力,因为直接操作系统的内存,理论上读、写速度都很快,通常的使用就是读EhCache->读redis->读db,无值一级一级往下读,有值一级一级的向上写,难点在于保证所有服务器缓存的一致性[微笑]。

利用zookeeper的watch功能,保证缓存变更时通知所有服务器更新,这里保证服务器一直在线是个难点,我们可以通过创建临时节点,建立服务器看盘,通过定时器、异动消息、预警等保姆措施及时发现问题并重连,幸运的是zookeeper掉线重连后watch功能依然强大,会更新data数据不一致的服务器[赞]。

至此,相信会给你的系统带来不错的用户体验[玫瑰]

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表