作者:莫那鲁道链接:https://www.cnblogs.com/stateis0/p/10963171.html

当前的大部分 Java web 容器基于 Bio 线程模型,例如常见的 Tomcat ,默认 200 线程,即 200 连接。由此带来的问题是,如果想提高并发,或者提高资源利用率,就得加大线程数。

如下图:

于是出现了类 Netty 的 Reactor 线程模型。同时,Java 官方也设计了 Servlet 3 异步 API,可以通过返回类 Feature 的方式,实现异步编程。在某些情况下,也可以实现万级别并发。

但是,为什么 Java 社区的异步编程无法推广开来?究其原因,数据库是罪魁祸首,再往上看,其实是 JDBC 的锅,JDBC 定义了一套阻塞式的数据库 IO 通信模型。这导致每次请求,线程都阻塞在等待 DB 结果。进而导致,服务器资源无法充分利用。

有没有一种办法,让 Java web 应用的整个链路都是非阻塞的呢?

答:有。

异步编程是提高生产力的关键。下图是我们今天假设的模型:

其实非常简单。

我们让 Tomcat 支持 Servlet 3 异步编程模型,接口返回 feature 即可,这个功能其实有很多web 容器都实现了。关键的是,我们让 DB 客户端和服务器都支持异步编程模型。让 DB 像 netty 复用 IO 连接,业务线程只需要将 SQL 交给数据库 client 即可返回 feature,然后释放当前线程(再也不用阻塞,这是关键),等 DB 操作结果返回时,只需通知这个 feature 即可。这将极大的提高线程的利用率,不夸张的说,只需 8 条线程,就足以承受万级别的并发。

整个的调用流程如下图:

我们看到,当一个 http 请求过来,整个流程是无阻塞的,不用等待 数据库 返回结果,业务只需添加回调即可,当数据库结果返回时,自动触发回调。

当然,这只是我的一个小设想,Mysql 要重写连接器,我估计是太难了。但是,那些新一代的数据库,是否能够把连接器设计成支持异步、支持多路复用的呢?这样,web 应用的客户端,就能够把整个链路设计成异步的,这将节约很多资源,提高生产力。

希望那一天快点到来。

并发200_一种单机支持 JavaWeb 容器万级并发的设想相关推荐

  1. 家乐福618保卫战二-零售O2O场景中的万级并发交易情况下的极限性能调优

    本系列简介 这个系列可以帮助普通程序员们深刻的意识到平时工作中到底还有什么不足以及如何进一步进化成真正意义上的架构师.CTO以及后面的道路是如何走的: 这个系列可以帮助企业IT管理者深刻意识到,性能安 ...

  2. 【万级并发】电商库存扣减如何设计?不超卖!

    随着中国消费认知的不断升级,网购走近千家万户,越来越被人们所接受.淘宝.唯品会.考拉.京东.拼多多等逐渐成为我们生活的重要组成部分. 除了常规的购物下单外,这些电商平台还经常搞一些双十一活动,秒杀.大 ...

  3. 阿里巴巴高并发架构,到底如何对抗双十一亿级并发流量

    前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验.这些方案好似能操纵流量,让流量更加平稳得被系统中 ...

  4. 万级并发服务器内核调优总结

    问题模型 tcp三次握手建立过程 问题1:当n多个client在极短时间内同时发出多个syn=1请求建立连接时 这时server端内核中的syn队列会发生溢出,部分连接请求会丢失.使用dmesg打印内 ...

  5. linux7 kernel.sem,centos7.4内核调优,tcp单服务器万级并发

    在使用linux的centos7.4遇到的各种坑,其中一个项目采用四层架构,配置层,平台层,逻辑服务器管理层和集体逻辑服务器层的,一个整体的游戏项目,其中,作为整个项目负责人和架构打架着,项目运行一年 ...

  6. nginx 每秒万级并发优化

    socket nginx 1.http连接快速关闭 keep_alivetime:0 2.子进程允许打开的连接 work_connections 10240; 系统 1.最大连接数 somaxconn ...

  7. 多线程导出excel高并发_大牛带你深入java多线程与高并发:JMH与Disruptor,确定能学会?...

    前言 今天我们讲两个内容,第一个是JMH,第二个是Disruptor.这两个内容是给大家做更进一步的这种多线程和高并发的一些专业上的处理.生产环境之中我们很可能不自己定义消息队列,而是使用 Disru ...

  8. GitHub 下载量过百万,阿里 P8 秘密分享的「亿级并发系统设计」

    随着互联网的不断发展,CPU 硬件的核心数也在不断进步,并发编程越来越普及,但是并发编程并不像其他业务那样直接了当.在编写并发程序时,我们常常都会出现各种漏洞,这些问题往往都突然出现,然后又迅速消失, ...

  9. MySQL单机并发量_mysql百万并发量-MySQL集群能支持100万个并发请求吗

    当然支持100万并发. 首先,我们必须做出决定,把阅读和写作分开. 然后,它取决于你需要分配多少个单元用于写作和阅读. 我的SQL集群不建议您使用它,因为有太多的错误. 所有这些都需要先进行压力测试. ...

最新文章

  1. 朱晔和你聊Spring系列S1E7:简单好用的Spring Boot Actuator
  2. ibatis example Class 使用
  3. 坐视——做事——做势
  4. 如何提升蜘蛛的抓取频率?
  5. 阿里巴巴超大规模 Kubernetes 基础设施运维体系
  6. HDU-4417 Super Mario
  7. Jenkins修改管理员密码.
  8. select、poll和epoll
  9. MNIST数据集的下载
  10. adb启动app_ADB 命令大全
  11. 【FPGA与深度学习】基于FPGA的深度学习CNN加速器设计
  12. 《巴菲特的第一桶金》读书笔记
  13. 用C语言写Badapple
  14. 磁盘管理器/磁盘管理工具给电脑硬盘分区
  15. android/IOS NTP 获取在线的GMT 网络时间
  16. SpringBoot项目中post请求,参数丢失,偶尔丢失,发现问题
  17. 看完后,你将离成功不远了...让我们一起奋斗吧!【转】
  18. 3Dmax 三弟单面建模和实体建模的优缺点
  19. win8宽带连接服务器未响应,Win8/Win8.1网络连接故障原因剖析及解决方案
  20. 网文快捕(CyberArticle) 快速保存网页内容,知识文档管理利器

热门文章

  1. 【数据结构与算法】布谷鸟散列表的Java实现
  2. 【算法分析与设计】查找第K大/小元素问题
  3. 洛谷入门题P1008、P1035、P1423、P1424、P1980题解(Java语言描述)
  4. javascript全栈开发实践-web-7
  5. Android 开源框架 ( 二 ) 基于OkHttp进一步封装的okhttp-utils介绍
  6. 【小白学云计算】xmpp开源服务器的配置和安装图文详解
  7. CDateTimeUI类源码分析
  8. [转]CSS浏览器兼容问题总结
  9. 使用JDBC-ODBC桥接方式访问Access数据库(实例)
  10. 汉游天下公司的一些感悟