• 高并发之扩容思路


    什么是扩容, 什么时候要扩容?

    了解Java 内存结构的伙伴应该都知道 , 每个线程都有自己的工作内存, 占用内存大小取决于工作内存里变量的多少与大小 , 单个线程占用内存通常不会很大, 但是随着并发的线程不断的增加 , 从成百上千, 甚至几十万 , 占用的内存就会越来越多.这时候可能就要考虑给系统扩容了 , 简单点的 升级内存, 复杂点的 , 增加服务器 , 分担压力.

    • 垂直扩容(纵向扩展) , 比如上面提到的 增加内存垂直扩容的主要是提高系统部件的能力,但会增大单个服务中其他软件设施的依赖与管理、服务内部复杂度
    • 水平扩容(横向扩展) , 比如上面提到的 增加服务器水平扩容主要是增加更多的成员来分担压力,但会增加网络、数据库IO开销、管理多个服务器的难度

    对数据库的扩容

    读操作扩展:

    假如网站是读操作比较多,比如博客这类。通过通过mysql进行垂直扩展是个不错的选择,并且结合memcathe、redis、CDN等构建一个健壮的缓存系统。如果系统超负荷运行,将更多的数据放在缓存中来缓解系统的读压力。采用水平扩容没有太大的意义,因为性能的瓶颈不在写操作,所以不需要实时去完成,用更多的服务器来分担压力性价比太低。所以针对单个系统去强化它的读性能就可以了

    写操作扩展:

    假如写操作比较多,比如大型网站的交易系统,可考虑可水平扩展的数据存储方式,比如Cassandra、Hbase等。和大多数的关系型数据库不同,这种数据存储会随着增长增加更多的节点。也可以考虑垂直扩容提升单个数据库的性能,但会发现资金与硬盘的IO能力是有限的,所以需要增加更多数据库来分担写的压力。

  • 相关阅读:
    C the basics (DMA)
    穷举子集
    排序算法(1)
    C the basics (array, complex)
    Linux中date命令的各种实用方法
    syntaxhighlight实现帝国cms代码高亮/语法高亮(一)
    帝国cms修改评论表情每行显示个数
    java 中hashcode 与 equals的关系
    Java 远程调用与分布式通信的区别
    帝国CMS的phomenewspic/ecmsinfo标签详解
  • 原文地址:https://www.cnblogs.com/xiangkejin/p/9277326.html
Copyright © 2020-2023  润新知