多集群
大集群一旦发生故障,影响巨大,所以多集群存在必要性
- 从单一集群考虑,多节点保证可用性,使用N+2的方式冗余节点,也就是需要N个节点,那至少部署N+2个节点
- 从单一集群故障带来的影响面考虑冗余多套集群
- 单机房内的故障导致问题
多集群,相当于物理上的多套资源,逻辑上维护cluster的概念
- 多套冗余的集群对应多套独占的缓存,带来更好的性能和冗余能力(重点)。
- 尽量避免业务隔离使用或者 sharding 带来的 cache hit 影响(按照业务划分集群资源,例如a业务用a集群,b业务用b集群,这样会导致某个业务的集群故障切换时,cache miss)。
- 业务隔离集群带来的问题是 cache hit ratio(命中率) 下降,不同业务形态数据正交,可以退而求其次整个集群全部连接,通过负载均衡,理论上可以实现多集群的均匀预热。
- 但是这样同时也会带来问题,全连接会导致连接数倍增,规模大了之后,就算是业务低峰期,也有大量的healthcheck占用内存和cpu
- 采用子集算法,从全部后端中挑选一部分出来,均分给客户端进行链接,同时需要保证重启时,不会触发大面积的重连
多租户
一个系统中允许多版本的服务共存,可以把流量路由到同一个服务的不同版本
- 可很方便的用于线上测试,减少测试环境的维护成本,模拟真实环境,进行全链路压测
- 灰度测试会影响1/N的用户,多租户形式的测试无影响
- B’在隔离的沙箱中启动,可以对外访问,保证流量正常流入C和D,B’只处理测试流量
- 部署B’时,带上特殊的字段注册到服务发现中心,注册成特殊的租户,正常流量默认取空值的节点,测试流量就取特殊值节点,也就是维护两个连接池
- 对服务本身没影响,但是对于数据可能有影响,所以可以redis用不同db,mysql用不同database
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END