zoukankan      html  css  js  c++  java
  • 浅谈WEB中的高并发

    转载:https://www.cnblogs.com/guan-520/p/9575848.html

    何谓高并发

      高并发指的是:在同时或极短时间内,有大量的请求到达服务端,每个请求都需要服务端耗费资源进行处理,并做出相应的反馈。

      从服务端视角看高并发服务端处理请求需要耗费服务端的资源,比如能同时开启的进程数、能同时运行的线程数、网络连接数、

      cpu、I/O、内存等等,由于服务端资源是有限的,那么服务端能同时处理的请求也是有限的;

      高并发问题的本质就是:资源的有限性

      高并发带来的问题  

      服务端的处理和响应会越来越慢,甚至会丢弃部分请求不予处理,更严重的会导致服务端崩溃。高并发问题并不是互联网应用独有。

      高并发问题的层面比如:前端请求、Web服务器、Web应用、数据库等。

      高并发处理的基本思路

      一:从客户端看
        1:尽量减少请求数量,比如:依靠客户端自身的缓存或处理能力
        2:尽量减少对服务端资源的不必要耗费,比如:重复使用某些资源,如连接池
      客户端处理的基本原则就是:能不访问服务端就不要访问

      二:从服务端看
      1:增加资源供给,比如:
        (1)更大的网络带宽;
        (2)使用更高配置的服务器;
        (3)使用高性能的Web服务器;
        (4)使用高性能的数据库;

      2:请求分流,比如:
        (1)使用集群;
        (2)分布式的系统架构;

      3:应用优化,比如:
        (1)使用更高效的编程语言
        (2)优化处理业务逻辑的算法
        (3)优化访问数据库的SQL
      服务端的处理基本原则是:分而治之,并提高单个请求的处理速度。

      高并发处理的基本手段

      客户端发出请求层面,常见的手段有:
      1:尽量利用浏览器的缓存功能,减少访问服务端,比如:js、css、图片等;
      2:可以考虑使用压缩传输的功能,减少网络流量,也会提高传输速度;
      3:考虑使用异步请求,分批获取数据;

      前端接收客户端请求层面,常见的手段有:

      1:动静分离,部分静态资源可以直接从Nginx返回;
      2:按请求的不同,分发到不同的后端进行处理,比如:负载均衡、业务拆分访问等;
      3:前面再加上一层来做多个Nginx的负载均衡,比如:LVS、F5等;
      4:还可以在更前面使用CDN服务;

      5:还可以对动态内容进行缓存,尽量减少访问后端服务;
      6:使用页面片断缓存技术,比如ESI(Edge Side Includes );

      Web服务器层面,常见的手段有:
      1:使用最新的JVM,并进行配置优化;
      2:合理选择服务器的运行模式,比如有些服务器有Client和Server之分;
      3:对Web服务器进行配置优化,比如:调整内存数量、线程数量等;
      4:提供多个能提供相同服务的Web服务器,以实现负载均衡;
      5:仔细规划Web服务器上部署的应用规模;
      6:对Web服务器进行集群;
      7:提供专门的图片、文件、视频等静态资源服务器; 

      Web应用层面,常见的手段有:
      1:动态内容静态化;
      2:Java开发优化;
      3:优化处理业务逻辑的算法;
      4:合理高效的利用缓存;
      5:优化访问数据库的Sql,可以考虑利用存储过程等数据库的能力;
      6:合理使用多线程,加快业务处理;
      7:部分业务可以考虑内存数据库,或者是进行纯内存处理;
      8:尽量避免远程调用、大量I/O等耗时的操作;
      9:合理规划事务等较为耗资源的操作;
      10:合理使用异步处理;
      11:对部分业务考虑采用预处理或者预计算的方式,减少实时计算量;
      12:内部系统间的业务尽量直接调用、直接处理,减少WebService、工作流等;

      数据库层面,常见的手段有:
      1:合理选择数据库的引擎,比如Mysql的InnoDB与MyISAM引擎;
      2:进行配置优化;
      3:可以考虑使用存储过程来处理复杂的数据逻辑;
      4:数据库集群,进行读写分离;
      5:合理设计数据库的表结构、索引等;
      6:分库、分表,降低单库、单表的数据量;
      7:合理使用NoSql;

  • 相关阅读:
    2018-8-10-win10-uwp-读取保存WriteableBitmap-、BitmapImage
    2018-8-10-win10-uwp-读取保存WriteableBitmap-、BitmapImage
    字节流与字符流的区别详解
    Java线程之 InterruptedException 异常
    java 线程的几种状态
    C++中 引用&与取地址&的区别
    百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)
    CodeForces
    CodeForces
    训练记录
  • 原文地址:https://www.cnblogs.com/-wenli/p/11391361.html
Copyright © 2011-2022 走看看