列一下 Codis 3.x 和 Codis 2.x 的修改:
RPC 不再依赖 zookeeper/etcd 而改为基于 HTTP 的 RESTful API 请求,这是最大的改动:
集群的稳定性会提升,proxy 不会再因为 session expired 导致进程自己退出;
外部存储 zookeeper/etcd 负载降低,无论是连接数还是数据读写操作,数据结构的组织也简单;
RPC 调用过程简单、直观,调试也容易;
要知道 Codis 2.x 的 RPC 都是通过读写 zookeeper/etcd 完成的,相对而言很复杂;
对于 proxy 而言:稳定和可靠了
不再依赖外部存储,内部逻辑变得很简单,其他组件损坏也不会影响正常运行;
Codis 2.x 中,proxy 会自己向外部进行注册,拉取状态,并根据事件自主计算状态并决策;
Codis 3.x 中,所有对外部存储的访问以及状态决策都由 dashboard 负责,并通过状态机,主动同步到每个 proxy 去;
自分配的 ID 设计,集群部署变得容易了一些;
Codis 3.x 中,对 proxy 的操作都对ID 以及 NAME/AUTH 进行验证,误操作的可能性降低;
对 dashboard 而言:变复杂了,但是比之前部署灵活和稳定(稳定待测)
对外部存储的访问,抽象出 CRUD/List 操作,目前仅实现了 zookeeper/etcd,但是扩展很容易;
Codis 2.x 中各个组件都严重依赖外部存储;
Codis 3.x 中仅 dashboard 依赖外部存储的实现,并且 dashboard 是随时可替换的,存在与否不影响服务本身;
在程序内增加了集群状态的缓存,降低存储的访问压力;
更多的检查,和错误处理;
不再提供管理页面,而将其抽出来作为 codis-fe 实现;
单个 codis-fe 监控多个集群,同时 codis-fe 作为反向代理,结合 nginx 部署更容易;