什么是扩容, 什么时候要扩容?
了解Java 内存结构的伙伴应该都知道 , 每个线程都有自己的工作内存, 占用内存大小取决于工作内存里变量的多少与大小 , 单个线程占用内存通常不会很大, 但是随着并发的线程不断的增加 , 从成百上千, 甚至几十万 , 占用的内存就会越来越多.这时候可能就要考虑给系统扩容了 , 简单点的 升级内存, 复杂点的 , 增加服务器 , 分担压力.
- 垂直扩容(纵向扩展) , 比如上面提到的 增加内存垂直扩容的主要是提高系统部件的能力,但会增大单个服务中其他软件设施的依赖与管理、服务内部复杂度
-
水平扩容(横向扩展) , 比如上面提到的 增加服务器水平扩容主要是增加更多的成员来分担压力,但会增加网络、数据库IO开销、管理多个服务器的难度
对数据库的扩容
读操作扩展:
假如网站是读操作比较多,比如博客这类。通过通过mysql进行垂直扩展是个不错的选择,并且结合memcathe、redis、CDN等构建一个健壮的缓存系统。如果系统超负荷运行,将更多的数据放在缓存中来缓解系统的读压力。采用水平扩容没有太大的意义,因为性能的瓶颈不在写操作,所以不需要实时去完成,用更多的服务器来分担压力性价比太低。所以针对单个系统去强化它的读性能就可以了
写操作扩展:
假如写操作比较多,比如大型网站的交易系统,可考虑可水平扩展的数据存储方式,比如Cassandra、Hbase等。和大多数的关系型数据库不同,这种数据存储会随着增长增加更多的节点。也可以考虑垂直扩容提升单个数据库的性能,但会发现资金与硬盘的IO能力是有限的,所以需要增加更多数据库来分担写的压力。