目的

作为使用第三方(阿里云)的我司来说,我个人觉得很多钱是浪费了。在知乎上有人讨论自建和上云哪个省钱,其实还是要看在公有云上怎么用,公有云很多资源具有召之即来挥之即去的特性,实际上是可以最大限度的去压榨的。做容量规划的目的,很简单,向规划要资源利用率、投入产出比,算的是笔经济账。对个人而言,替公司节约几十甚至上百万的费用,这种贡献自然会得到丰厚的回报。对企业而言,节约了费用和开支,资源可以使用到其他地方,继而可以提高竞争力。所以,容量规划是必须而且重要的。

容量规划步骤

我个人构思的步骤有如下,虽不成熟,但是独立思考所得。容量规划有个前置条件,即系统的性能瓶颈已经或者大部分都被识别,在做规划的时候尽量保守一些。大致步骤和关键点:

  • 确定系统资源消耗类型(计算密集耗cpu、数据密集吃内存、网络或读写密集吃io),掌握系统在某资源配置情况下,能够支持的并发数。建立各系统的并发模型。
  • 掌握系统当前线上环境日常流量特征,并基于该特征制定一个流量模型。
  • 基于流量模型定制一个资源的基准水位,以达到支持日常访问较合理的资源利用率。
  • 核心服务的流量监控报警方案及自动扩容、缩容方案。

系统并发压测方案

采集线上流量特征,建立流量模型、生成压测模型;

笔者是电商行业,所以对于高频的营销工具也需要单独压测,比如拼团购、限时折扣、拉人应用等。这些工具都是高并发、突发性流量的主要来源。

资源利用率的判定

理论上,在系统不崩溃、响应正常的前提下,资源利用率的平均值在80-90%,是最优的利用率,它最大限度的压榨了机器的价值。但是很明显,人工构建的系统,想要达到这种级别的利用率而系统一切ok的话,可能要投入更多的研发资源来优化,对于中小企业来说,可能就有点缘木求鱼了,毕竟业务才是王道。退而求其次的话,资源利用率降低一个档次,在60-80%,就是一个比较合理的利用率(压榨)了。

利用率% 级别 措施
[0,30] 闲置 缩容减支
[30,50] 适当 观察
[50,70] 合理 观察
[70,90] 充分 警觉和扩容
[90,100] 过量 必须扩容

监控方案

监控指标的确定:

  • TCP连接指标
  • 内存使用率指标
  • cpu使用率指标
  • 磁盘IO指标
  • db的监控指标系列

自动扩缩容方案

核心思路:监控线上流量,指标超过预警范围,自动调用阿里云相关资源的api,上线新的集群节点。同时发出报警,以便人力介入。

这里,资源不可能无节制的加,所以也有个最大阈值。根据流量,节点也应该可以优雅的下线。甚至,在夜深人静无人访问的时间点也可以按最低资源来部署。

其他

  • 涉及jvm内存启动参数如何最优化的进行设置
  • jvm的内存是预分配机制,那么jvm真正的使用率是应该考虑的
  • 已经建立的系统部署架构,必然存在改造成本。
  • 容器化技术在容量规划和管控方面具有天然的优势。

参考:

大型网站服务器容量规划(一)

浅谈容量规划

jvm内存与操作系统内存之间的关系

大型企业使用阿里云或百度云等云服务器真的能比自购服务器省钱吗?