按照使用的资源类型划分,我们可以把系统分为三大类型:IO密集型、计算密集型,数据密集型。系统的类型反映了系统的主要瓶颈。现实情况中,大部分系统在由小变大的过程中,最先出现瓶颈的是IO。IO问题体现在两个方面:高并发,存储介质的读写(例如数据库,磁盘等)。随着业务逻辑的复杂化,接下来出现瓶颈的是计算,也就是常说的CPU idle不足。出现计算瓶颈的时候,一般会使用水平扩展(加机器)和垂直扩张(服务拆分)两个方法。随着数据量(用户数量,客户数量)的增长,再接下来出现瓶颈的是内存。
如今,内存的合理使用比以往更加重要。一方面,大数据理论已经非常普及,用数据驱动产品也已经被普遍接受并落地,同时数据分析也促使产品设计的更加精细,因此系统承载的数量比以前有了很大的变化,系统遇到内存瓶颈的时间也比以前大大缩短了。另一方面,内存依然是相对昂贵的硬件,不能无限制的使用。即使在Amazon等云服务上,大内存的实例也是很昂贵的,并且大内存的实例往往伴随着高性能型CPU,这对一些数据密集型系统是一个浪费。因此,本文重点探讨数据密集系统如何应对出现的瓶颈。