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