CPU、内存、磁盘、网络是很多系统设计时关注的核心资源,也是很多单机系统的瓶颈点。自己这几年一直在做搜索引擎,为了提高单机性能,各种能用的黑科技都用上了,但是面对不断增长的业务体量,优化基本很快被业务吃掉,单机性能基本保持持平。搜索引擎的核心是CPU以及内存,内存不够数据需要分片,分片涉及到merge的问题,所以相对于不分片会有更多的IT资源开销,还有就是冷热分离,把使用频率低的数据放到磁盘上。
在前期的优化过程中,我们的思路一致放在系统本身。假设我们有20台搜索引擎,单机24核心/64G内存,单机容量200qps/秒,总容量20*200=4000qps/秒,假如我们能把程序调到理论上的最优,在业务复杂度不变的情况下单机性能由200qps/秒变成400qps/秒,系统总容量变成8000qps/秒。那我们还有其他可以做的优化么,单机性能已经优化到最优的情况下(当然我们不可能做到最优,这里只是假设),如果沿着优化程序或则业务的思路走下去,你很难找到更好的答案,那如果换一种思路呢,对于一个以盈利为目的商业公司来说系统的本质是啥。当然是赚钱,节省成本也是赚钱!
对于搜索引擎来说决定单机性能的核心资源是CPU核数量,同样的内存,CPU从24核升级到48核,性能是随核心数量线性增长的。问题就在这个地方,两台24核心64GB的机器在搜索引擎这个应用上等效于一台48核心64GB的机器,但是两台24核心的机器肯定比一台48核心的机器贵,因为机器还需要网卡,磁盘,内存,机箱,电源这些东西,实际也这样,在某云上一台48核/256GB的机器每月价格3000,相应的96核/256GB内存的机器每月价格是3500,CPU性能提高一倍,每月支出只增加16%,单位价钱买到的CPU资源提高71%。对于我们前面的20台24核/64GB引擎集群来说,最优的是被一台480核/64GB的机器替代掉,当然目前不存在这种规格的机器,但是这给了我们一个思路,对于一个系统的来说,同样的服务容量部署在不同规格的机器上,使用成本是有差异的(这样的例子有很多,比如kafka核心是网卡和磁盘)。
针对不同的应用选择合适的机器,可以帮助我们节省更多的钱,提高我们的商业竞争力,这也是云计算的理想状态,一台拥有无限核心无限网卡无限内存无限磁盘的完美机器。虽然不存在这样的机器,但是对于一个云计算企业来说,能提供不同规格的机器并帮助客户合理的部署他们的系统,是必须拥有的核心竞争力,因为这意味着帮助客户用更少的钱,完成同样的目标。
网友评论