> 文章列表 > 高并发基础、思路以及普遍的处理方式

高并发基础、思路以及普遍的处理方式

高并发基础、思路以及普遍的处理方式

高并发基础、思路以及普遍的处理方式

场景描述:在极短时间内或者同时,有大量的请求达到服务器,每个请求都需要服务器消耗资源去进行处理。同时开启的进程数、能同时运行的线程数、网络连接数、cpu、io、内存均为服务器资源。服务器资源是有限的,所以服务器端能同时请求的服务数量也是有限的。高并发中我们需要重点解决的问题就是:资源的有限性

高并发带来的问题

  当请求短时间内大量出现,服务端的处理和响应会原来越蛮,甚至会丢弃部分请求不予处理,更严重的情况可能会使服务器崩溃。同时高并发的情况下,也可能由于程序员编写的程序处理逻辑的健壮性的问题,导致业务逻辑出错,进而数据异常。
  目前我们可以考虑从以下几个角度给予考虑:web前端、web服务器、web应用、数据库

处理的基本思路

当遇到高并发的问题的时候,从最基本的请求、响应模式考虑,即两个问题:如何提高“客户端”的能力以及如何提高“服务端”的能力。

1.从客户端(web浏览器和调用端)的角度看
  • 减少请求数量(缓存或者在前端能处理的情况下由前端处理,比如小数据量数据的分页和排序交给前端)。
  • 减少不必要的资源浪费,重复使用某些资源,比如连接池。
2.从服务器端的角度
  • 增加资源数量以及资源供给:网络带宽、高配置服务器、高性能web服务器、高性能数据库。
  • 请求分流:
    (1)使用集群,应用架构的集群方式,通过Ivs、nginx等进行多个集群间的引流。
    (2)分布式系统架构:在一个系统内部,根据业务进行拆分多个服务,对于关键核心业务进行多份部署、高可用处理。
    (3)应用优化:优化业务逻辑、优化SQL

    基本手段

    客户端层面
    • 使用浏览器的缓存功能,减少访问服务器:js、css、图片
    • 压缩文件传输、减少网络流量
    • 异步请求,分批获取数据
    静态服务器接受前端层面
    • 动静分离、部分静态资源从Nginx直接返回。
    • 根据请求不同,分发请求到不同的后端服务:负载均衡或者业务拆分。
    • 对Nginx再做负载均衡,比如Ivs
    • 使用cdn服务
    varnish
    • 动态内容缓存,如jsp
    • 页面片段缓存
    web服务器层面
    • 使用最新的jvm,并进行配置优化
    • 调整web服务器配置,比如调整内存数量、线程数量
    • 后端服务器负载均衡
    • 服务器分类,提供专门的图片、文件、视频
    web应用层面
    • 动态内容静态化
    • java开发优化,合理并正确地使用并发编程模型
    • 优化业务逻辑
    • 合理高效利用缓存
    • 优化访问数据库的sql
    • 使用内存数据库
    • 避免远程调用和大量i/o
    • 合理规划事务等较为消耗资源的操作
    • 合理使用异步处理
    • 减少实时计算
    数据库层面
    • 合理选择数据库的引擎
    • 进行配置优化
    • 合理的数据库设计
    • 分库分表
    • 合理使用nosql,不需要强事务的数据,存储到nosql中。

    总结

    分而治之(外功),提高单个处理的速度(内功)