多个微服务容量如何规划。
单体应用的时候根据应用的访问量和实际接口性能来决定要不要给单体应用扩容。
微服务后需要考虑每个服务的容量规划。
待解决的问题
- 服务数量多,人肉运维难以管理。
- 接口表现差异,有的接口访问量大,有的接口响应时间比较短,有的接口访问时间比较长。
- 服务部署的集群规模大小不同,扩容的机器数量差异比较大。有的服务需要几台机器即可,有的需要几十台机器才可以。
- 服务之间还有依赖关系,一个服务扩容,还需要考虑依赖的服务是否也需要进行扩容。
规划
规划实施需要考虑两点:
- 评估集群的最大容量和线上实际运行的符合,做好容量评估。
- 确定弹性扩容的时机以及机器数。
容量评估
一般选择的方案是通过线上实际的压测来确定的。压测需要注意的关键点如下:
- 合适的压测指标
选择压测指标有两类抉择。- 系统类指标,机器的CPU使用率,内存占用率,磁盘IO使用率以及网卡带宽等;
- 服务类指标,接口响应的平均耗时,P999耗时,错误率等
除了观察这些指标之外,还可以观察接口的慢速比,也就是接口响应时间高于某个阈值。
- 压测获取单机的最大容量
集群的最大容量就是单机的最大容量*集群内的机器数量。
两种方式获得单机的最大容量。
- 单机压测: 通过日志回放模拟线上流量对单机进行压测,or,通过TCP-Copy的方式把流量考本过来对单机进行压测。
- 集群压测:不断的把线上集群的节点摘除,减少机器数的方式,来增加线上节点单机的流量,达到压测的目的。集群压测的方式采用平均QPS来作为单机的最大容量,但是不一定合理,可以在计算单机容量的方式上进行区间加权计算。
- 实时获取集群的运行负载
通过压测获取到单机的最大容量,再乘以集群内的机器数量就是集群的最大容量。
然后价计算集群实际运行的负载,来判断是否需要扩容。也需要才去加权的方式进行计算。
调度决策
有了数据然后记性调度策略。利用水位线进行调度决策。
水位线:任何时刻的水位线就是集群的最大容量除以集群的实际运行负荷。
扩缩容机器数量决定
- 扩容: 按照数量或者是按照比例。一般采用比例的方式,继续观察水位线是否达到了致命线以上的位置。
- 缩容:采用逐步的方式进行缩荣,10%、30%、50%等比例缩容。
进行两个操作的时候,防止网络抖动的因素导致水位线进行抖动,根据时间进行采集水位线,满足一半以上的点才开始进行扩容。
网友评论