提高服务器并发能力的理论

 如何提高服务器并发能力,理论依据、方法是什么

  转载请注明原著:博客园老钟 //www.cnblogs.com/littlecarry/

  呐,一台服务器,到底能处理多少并发?1万,10万,一百一千万?由什么决定呢?

  不用说,最终肯定是由硬件决定!更强的cpu、更大的内存、更高的带宽、更高速的io设备……来一台IBM大型机,再菜的鸟也能整到百万并发

  讨论硬件没有多大意义

  我们要讨论的事,普通固定硬件条件下,如何提升服务器的并发能力

  并发,也就是单位时间里服务器处理的最大请求数,通常定义为1秒时间内。

 

  针对外部访问,服务器的行为概括为:连接请求、处理请求

  1、连接请求

   基于NIO多路复用技术

      NIO多路复用技术,可以让上亿的请求,同时连在一台服务器管理

  2、处理请求

   尽量缩短每一个请求的执行时间

     一个请求执行的时间越短,单位时间内能处理的请求就越多。一个请求的执行,可能涉及网络IO、硬盘IO、内存的读写,缩短或屏蔽这些读写,将大大提升执行速度。

 

   要提升服务器并发能力,就是要提升“连接请求”、“处理请求”的处理能力, 核心是找出他们的性能瓶颈、改善性能瓶颈

        性能瓶颈包括:

  1、操作系统的IO读写能力瓶颈

    涉及:网络IO、硬盘IO、内存等

    提升方法:零拷贝、DMA、缓存等

  2、系统资源瓶颈

    涉及:线程数量、锁竞争、内存申请释放、系统参数配置等

    提升方法:1)线程越多,操作系统切换线程上下文消耗越大,线程少,IO的阻塞可能导致系统空转。通过实际调试分配合适的线程数量

            2)锁的种类很多,悲观、乐观,重入等等,选择合适的锁,能提升资源的竞争率。所有的锁都是悲观锁,是不可取的。

         3)内存合理的申请、释放,能节约资源的消耗

            4)系统参数、jvm参数,很多根据实际情况分配

  3、代码能力瓶颈

    涉及:代码架构、代码逻辑、代码对内存的操作等

    小结:

  性能瓶颈改善,主要针对处理请求的能力的提升连接请求的能力也同步提升。

  很多网上说nginx的并发量是2万、5万、6万……,都是不对的,一是nginx的代码架构,并没有对并发量的约束,二是脱离了硬件。nginx的架构没有约束连接请求,“处理请求”,就看你对性能瓶颈的改善,以及你的硬件了,这两点提升了,并发佰亿可能不是问题

  当然,这里还有一个“单机性能”的问题,不用切换线程的操作系统,执行当然最快。所以需要处理百万级别的并发,分布式处理效率才是最高的

  本文只是提供基本的理论思路,很多具体的方法不细说,得自行查询