多集群&多租户

多集群

大集群一旦发生故障,影响巨大,所以多集群存在必要性

  • 从单一集群考虑,多节点保证可用性,使用N+2的方式冗余节点,也就是需要N个节点,那至少部署N+2个节点
  • 从单一集群故障带来的影响面考虑冗余多套集群
  • 单机房内的故障导致问题

多集群,相当于物理上的多套资源,逻辑上维护cluster的概念

  • 多套冗余的集群对应多套独占的缓存,带来更好的性能和冗余能力(重点)。
  • 尽量避免业务隔离使用或者 sharding 带来的 cache hit 影响(按照业务划分集群资源,例如a业务用a集群,b业务用b集群,这样会导致某个业务的集群故障切换时,cache miss)。
  • 业务隔离集群带来的问题是 cache hit ratio(命中率) 下降,不同业务形态数据正交,可以退而求其次整个集群全部连接,通过负载均衡,理论上可以实现多集群的均匀预热。
    • 但是这样同时也会带来问题,全连接会导致连接数倍增,规模大了之后,就算是业务低峰期,也有大量的healthcheck占用内存和cpu
    • 采用子集算法,从全部后端中挑选一部分出来,均分给客户端进行链接,同时需要保证重启时,不会触发大面积的重连

image.png

多租户

一个系统中允许多版本的服务共存,可以把流量路由到同一个服务的不同版本

  • 可很方便的用于线上测试,减少测试环境的维护成本,模拟真实环境,进行全链路压测
  • 灰度测试会影响1/N的用户,多租户形式的测试无影响
  • B’在隔离的沙箱中启动,可以对外访问,保证流量正常流入C和D,B’只处理测试流量
  • 部署B’时,带上特殊的字段注册到服务发现中心,注册成特殊的租户,正常流量默认取空值的节点,测试流量就取特殊值节点,也就是维护两个连接池
  • 对服务本身没影响,但是对于数据可能有影响,所以可以redis用不同db,mysql用不同database

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享