• 百万并发设计


                  百万并发架构

    一 单个机器的并发

    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台机器可以满足需求

  • 相关阅读:
    计算机的基础知识
    齐博x1二次开发实例分享:二次开发的灵魂fun函数
    数据结构基础7:二叉树【链式结构】实现和递归思想。
    python-Template字符串模板的使用
    第三十六章 在 UNIX®、Linux 和 macOS 上使用 IRIS(一)
    从积木式到装配式云原生安全
    【BAT-表姐御用03MD(ren)命令】文件夹批量创建/命名/改名
    Java 修饰符 private、default、protected、public 的应用实例 (方法)
    Q3营收同比翻三倍,踩猛“油门”零跑必将领跑?
    CDN,P2P,PCDN的区别?
  • 原文地址:https://blog.csdn.net/gamezouni/article/details/126301345