缓存系统

【原创】公司自研缓存系统UPU的总结

蓝咒 提交于 2020-04-08 07:32:49
公司自主研发了这样一个缓存系统(名为 UPU),规格如下: 同机房间的两个 UPU 互为主备,但同一时刻只有一个 UPU 通过 keepalived 虚地址对外提供服务,主备切换也是通过 keepalived 实现; 同一(逻辑)域内的全部 UPU 形成集群,集群间通过 Erlang/OTP 内置的 Mnesia 数据库完成数据同步; UPU 集群不存在主的概念,故可以在集群中的任意节点上进行数据更新操作; 可以进行多级域的 UPU 级联; 业务的数据更新均在本地进行,但数据会向顶级域同步; 业务的数据查询均在本地进行,但会根据具体的请求类型决定是否还向顶级域查询; UPU 服务器部署架构图 UPU 服务器内部结构(Erlang 监督树结构 ) libupu(客户端库)的结构设计 这套系统存在的部分问题 : UPU 本身不支持针对缓存消息的超时控制,而是依赖于业务程序自己的控制。在业务自身发生异常的情况下,可能出现数据的不一致或残留(已通过其他方法规避); UPU 的数据同步功能依赖于 Erlang/OTP 内置的 Mnesia 数据库,官方明确说明在发生网络分区时,可能会导致数据不一致, 原开发人员本来打算采用 环形复制 来解决集群数据多写问题,但最终没有实现 ; 在 UPU 级联情况下,级联相关配置是手动写死在配置文件中的,在出现异常时,只能通过修改配置并重启服务的方式进行恢复