今天看啥  ›  专栏  ›  小灬琦哥

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

小灬琦哥  · 掘金  ·  · 2021-02-13 19:25
阅读 100

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

何为高并发

在同时或者极短时间内,有大量的请求到达服务端,每个请求都需要服务端消耗资源去进行处理。同时开启的进程数、能同时运行的线程数、网络连接数、cpu、io、内存均为服务端资源,由于服务端资源是有限的,所以服务端能同时处理的请求也是有限的。则从这个角度看,高并发中我们需要去解决的问题就是:资源的有限性。本篇文章是从整体系统架构演进和设计上进行概述,并不是仅仅从java的并发编程谈起。

一个系统中客户端访问服务端的一个示例图,在真实的场景中,其实client不仅仅包括浏览器、移动端、pc端等,其实还有服务端之间通过api接口进行的调用,此时的调用者已不再是服务端,而是一个客户端。

高并发带来的问题

当请求短时间内大量出现,服务端的处理和响应会越来越慢,甚至会丢弃部分请求不予处理(某种情况下是合适的),更严重的可能会服务器崩溃。服务器的崩溃进而导致的就是经济损失已经客户的流失。同时高并发的情况下,也可能由于程序员编写的程序处理逻辑的健壮性问题,导致业务逻辑出错,进而数据异常。

高并发问题的处理层面

个人认为高并发处理问题,需要从以下几个方面进行考虑:web前端、web服务器、web应用、数据库等。由于个人能力有限,暂时只能考虑到这些,仅供参考。

处理的基本思路

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

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

基本手段

综合方案需要将手段按需要进行组合。不应盲目使用。

客户端层面

  • 使用浏览器的缓存功能,减少访问服务器,js、css、图片
  • 压缩文件传输,减少网络流量
  • 异步请求,分批获取数据

静态服务器接受前端层面

  • 动静分离,部分静态资源直接从nginx返回。
  • 根据请求不同,分发请求到不同的后端服务:负载均衡或者业务拆分
  • 对nginx再做负载均衡,比如lvs
  • 使用cdn服务

varnish

  • 动态内容缓存,如jsp
  • 页面片段缓存

web服务器层面

  • 使用最新的jvm,并进行配置优化
  • 调整web服务器配置,比如调整内存数量、线程数量
  • 后端服务器负载均衡。
  • 服务器分类,提供专门的图片、文件、视频

web应用层面

  • 动态内容静态化
  • java开发优化,合理并正确的使用并发编程模型
  • 优化业务逻辑
  • 合理高效利用缓存
  • 优化访问数据库的sql
  • 使用内存数据库
  • 避免远程调用和大量io
  • 合理规划事务等较为消耗资源的操作
  • 合理使用异步处理
  • 减少实时计算

数据库层面

  • 合理选择数据库的引擎
  • 进行配置优化
  • 合理的数据库设计
  • 分库、分表
  • 合理使用nosql,不需要强事务的数据,存储到nosql中

原则:分而治之(外功)、提高单个处理的速度(内功)。外功是最容易提高的,内功是需要实打实的能力。




原文地址:访问原文地址
快照地址: 访问文章快照