• 百万并发设计


                  百万并发架构

    一 单个机器的并发

    1. Linux系统系统级的最大文件描述符

          1.1 系统级最大文件描述符

    理论上系统内存有多大就能打开多少的文件描述符,实际上内核会处理,一般最大打开文件数是系统内存的10%(以KB来计算),比如16G的内存,最大文件数大约是16*1000*1000*10%=1.6million, 可以通过 cat /proc/sys/fs/file-max 或者 sysctl -a | grep fs.file-max 命令查看

          1.2 更改系统级限制有临时更改和永久更改两种方式:

    临时更改:session断开或者系统重启后会恢复原来的设置值。使用命令 sysctl -w fs.file-max=xxxx,其中xxxx就是要设置的数字。

    永久更改:vim编辑 /etc/sysctl.conf 文件,在后面添加 fs.file-max=xxxx,其中xxxx就是要设置的数字。保存退出后还要使用sysctl -p 命令使其生效。

          2.Linux系统用户级的最大文件描述符

         2.1 用户级最大文件描述符

    同时为了控制每个进程消耗的文件资源,内核也会对单个进程最大打开文件数做默认限制,即用户级限制。32位系统默认值一般是102464位系统默认值一般是65535,可以使用 ulimit -n 命令查看。

          2.2 更改用户级限制也有临时更改和永久更改两种方式:

    临时更改:session断开或者系统重启后会恢复原来的设置值。使用命令 ulimit -SHn xxxx 命令来修改,其中xxxx就是要设置的数字。

    永久更改:vim编辑 /etc/security/limits.conf 文件,修改其中的 hard nofile xxxx  soft nofile xxxx,其中xxxx就是要设置的数字。保存后退出。关于hardsoft的区别,参照下面参考链接中的第5个。

         3. Nginx并发数

    nginx官方说nginx能支撑6万多并发性能最好,那么这里我们设置nginx进程最大能打开60,000fd,假如是4核的CPU(内存我们假设足够大32G64G等等),我们设置worker数量为4,那么worker_connection数量为15,000。那么nginx对外能提供多少并发数呢?你以为是60,000?那么你答错了,因为nginx作为反向代理,一个用户的请求实际上占了2fd,一个fd是用户请求,一个fd是连接后台服务的。所以一个nginx在我们这样配置参数下,可以支持30,000并发

         4. tomcat并发数

          4.1 acceptCount 最大连接数

    默认是100。当http请求数达到tomcat的最大线程数时,还有新的http请求到来,tomcat会把请求数放到队列中。acceptCount就是最大的等待数,超过这个,tomcat会拒绝。

          4.2 maxThreads最大线程数

    每一个HTTP请求,tomcat都会创建一个线程来处理请求,最大线程数决定了tomcat能同时处理多少个请求。默认是200

           4.3 maxConnections最大连接数

    同一时间能接受的最大连接数。

            4.4 最大并发

    响应时间在50ms,则每个线程1秒可以处理20个请求,tps20*maxThreads

            5 数据库

    数据库的最大连接数。SHOW GLOBAL STATUS LIKE '%max _connections%'

            6 Dubbo

    Dubbo的默认线程是200.

            7 Redis

    Redis的默认线程是10000.

            8 Jedis

    JedismaxActive8.修改为1000.

    综上所述,单个机器的默认并发200,通过配置,增加tomcatdubbo的线程数可以达到1000并发

    二 百万并发

    1. 2LVS集群(一主一备+keepalived
    2. nginx30000并发,40nginx服务器
    3. tomcat1000并发,1000tomcat服务器,实际上大部分场景不可能每秒都是1百万并发。比如10秒有100万个请求,实际上可以用kafka接受,然后分摊到每秒10万个请求,这样tomcat需要100台机器可以满足需求

  • 相关阅读:
    12.从架构设计角度分析AAC源码-Room源码解析第1篇:当前demo为主线查看涉及的Room源码解析
    Linux下解压tar.xz文件的命令
    地下管线探测仪 光电缆路由探测仪 管线仪 定位仪 探测0-6米 操作简捷 高精度
    PCL 点云按时间进行分段
    Oracle JDK 和 OpenJDK 有什么区别?
    Camtasia mac版怎么加字幕 Camtasia mac版怎么打马赛克
    多版本并发控制 mvcc
    yolov5剪枝实战2:网络剪枝原理介绍
    【linux】重要目录介绍
    【Vue 基础篇】监听路由的变化和跳转404页面
  • 原文地址:https://blog.csdn.net/gamezouni/article/details/126301345