跳过正文
  1. 博客/
  2. 后端/
  3. 网络/

Tomcat高并发浅析

3 分钟· ·
后端 网络
作者
Allen
一个强大、轻量级的 Hugo 主题。
目录

Tomcat作为Java老牌web服务器,所以研究Tomcat就能搞懂高并发,本文是查阅大量资料总结的自己对于web高并发服务器的理解,有可能部分理解是错误的,欢迎来纠错,本文尽量不使用代码,网上查到的都是一大段一大段代码,让人看的头痛

一个最简单的web服务器长啥样呢,就是一个echo服务期

  • 监听端口
  • 新TCP请求进来,建立TCP链接
  • 向TCP链接发送响应

所以我们扩展一下,一台高并发服务器最重要的就是接受成千上万的新请求,以及管理已经建立的请求,虽然说起来很简单,虽然说起来很简单,但是做起来很复杂

首先我们从用户端看一次完整的HTTP请求是咋样的,我们用吃饭来打比方,首先用户先想好他去哪里吃饭(构建url,比如abc.com),然后他通过百度去查这个饭店在哪(查询DNS abc.com 的IP地址是什么),百度告诉他这家餐馆搬到他家附件2公里外(得到IP地址 127.0.0.1),然后用户就按照地图找到了这家店,然后他想了半天决定吃鱼(发起HTTP请求/fish

现在用户已经决定好了他要干什么了,接下来就是看这家餐馆的操作了,首先用户会发起一个TCP请求建立连接,因为他得确定这家店今天开不开张,不开张人家也不会卖他鱼吃,接下来我们来看看Tomcat是怎么把这家餐馆给经营好的

首先他要根据他自己后厨的规模,也就是同时可以做多少个菜(并发线程数),以及做一个菜要花多少时间(TPS性能),来决定他餐馆可以放多少椅子(最大连接数),因为这个餐馆一直有人吃饱就走,所以他也特意搞了个叫号系统,允许顾客来了排个队等一等(也就是Tomcat的排队队列来控制)

那我们来分几种情况来讨论一下,第一种今天没多少顾客,那么大家来了之后就有椅子做(建立好TCP链接),第二种做满了但是门口还有地方站一站(也建立链接TCP放进排队队列),最后一种是门口都站不下了,为了不影响其他顾客,我们只能说客满了,您不一定能吃上,您去别处看看吧,那么用户就会得到一个拒绝连接的错误(Connection refused)

接下来我们再看看坐在店里的顾客了(建立好了TCP连接),这个时候顾客都知道今天能吃上就安安静静的等了,餐馆呢就把顾客点好菜发给后厨(Tomcat把HTTP请求发给Servlet容器),有的菜烧得快有的菜烧得慢(每个请求耗时不同),菜好了就端上去了,客户呢觉得吃饱了那就走了(关闭TCP连接),觉得没吃饱就继续叫(继续发送HTTP请求),假如有时候叫了一道特别难的菜,后厨做了很久都没端上来,假如你不急那就慢慢等,假如你急的化那你可以直接走(抛出一个Read timed out错误)

现在我们总结一下,从用户角度上来看,他碰到的问题就是两种,第一种就是餐馆人太多了,没法吃(拒绝连接),第二种就是餐馆上菜太慢(读取超时)。从餐馆角度上来看,为了服务好用户他首先得安排好足够的椅子,第二个就是要让后台上菜速度要快,上菜快可以通过增加厨师(增大最大线程数),你也可以针对做菜某些步骤慢的地方多派人手(SQL调优、缓存优化等等)

PS: 这篇文章还有一个重要的问题没有提,用户进了餐馆(建立了TCP连接),他什么时候叫菜(发送HTTP请求)我们是不知道,我们怎么来实现一个高效的系统来服务客户,来满足成千上万的顾客有求必应,我会在另外一篇博客来专门谈这个东西【Select和epoll浅析】

资料
#

https://qiankunli.github.io/2019/11/26/tomcat_source.html

相关文章

Select和epoll浅析
2 分钟
后端 网络
从子网到“互联网”
8 分钟
后端 网络
代理的前世今生
5 分钟
后端 网络
HTTP复用
10 分钟
后端 网络
大数据架构小结
4 分钟
后端 框架 大数据
TB级数据存贮经验总结
8 分钟
后端 框架 大数据