【网站架构】5分钟了解后端工作原理。为什么Tomcat长时间运行会崩溃?高并发线程池怎么设置?

【网站架构】5分钟了解后端工作原理。为什么Tomcat长时间运行会崩溃?高并发线程池怎么设置?,第1张

这一期,我们来聊一聊后端部分的工作原理。后端部分的工作原理与开发语言及使用的框架是相关的, 常用的后端开发语言有Java、PHP、Python、C#、Nodejs、Go等 。我们这里不对比这些开发语言的优劣,因为后端程序是比较特殊的, 后端程序是I/O密集型程序,并没有复杂的计算任务, 后端程序的职责其实是协调其他服务。 如数据库、非关系型数据库、调用第三方服务、文件读写 *** 作等 ,所以不同开发语言的运行性能其实差距并不大, 毕竟数据库阻塞的话,后端程序跑得再快也没用。

后面我们以Java为例介绍后端部分的工作原理, 其他开发语言也可作为参考, 毕竟大体上的工作原理都是一致的 。

下面我们将分2个部分介绍后端程序的工作原理

1、后端部分的运行原理

2、后端程序处理接口请求 

1、后端部分的运行原理

java编写的后端部分有两种结构。

(1)一种是Web应用服务器软件+war包的形式, Web应用服务器软件一般是Tomcat、Jetty、Weblogic等。 这里以Tomcat为例 ,后面用Tomcat+war包代指这类形式 ,这种方式适合于生产环境。

(2)另一种是jar包独立运行, 这种方式适合于开发调试。

Tomcat+war包的工作原理是这样的, Tomcat本身是一个Java程序(实际上只有Catalina部分是Java程序), 而war包其实只是一堆文件的压缩包(不是一个独立的Java程序) ,包括编译好的.class文件、依赖包、配置文件等 Tomcat运行后,会自动解压缩war包内容,并加载相关文件。 Tomcat加载这些外部文件其实是利用了Java的反射机制, 通过Java工程中的固定类名ServletInitializer加载的(SpringBoot框架)。Tomcat正常加载war包内容后, 当Tomcat接收到请求时,会调用已加载的.class文件中对应的接口函数, 而这个接口函数一般就是我们写的Controller中的函数(SpringBoot框架)。

Tomcat+war包的工作原理是这样的, Tomcat本身是一个Java程序(实际上只有Catalina部分是Java程序), 而war包其实只是一堆文件的压缩包(不是一个独立的Java程序) ,包括编译好的.class文件、依赖包、配置文件等 Tomcat运行后,会自动解压缩war包内容,并加载相关文件。 Tomcat加载这些外部文件其实是利用了Java的反射机制, 通过Java工程中的固定类名ServletInitializer加载的(SpringBoot框架)。

Tomcat正常加载war包内容后, 当Tomcat接收到请求时,会调用已加载的.class文件中对应的接口函数, 而这个接口函数一般就是我们写的Controller中的函数(SpringBoot框架)。

当多个请求同时来临时 ,Tomcat会启动多个线程同时处理这些请求, 线程启动的上限、超时、最大等待数等配置可以在Tomcat中配置 ,这种同时处理多个请求的场景也就是并发处理 。这里的设置是很重要的,决定着后端的性能, 而且在请求量过大时,也能保证Tomcat正常运行,不至于宕机, 在后续介绍并发调优时,我们会深入讲解。

 Tomcat+war包的工作原理就是这样, 但是我们常常遇到一个问题,当Tomcat长时间运行, 特别是开启了自动解压缩替换war包功能后, 往往Tomcat会因为内存枯竭而崩溃退出 ,这是因为没设置好Tomcat的JVM内存参数 ,才会导致内存枯竭, 内存参数设置在Tomcat中配置即可。

至于另一种jar包独立运行, jar包其实就是一个Java程序, 所以无需依赖Tomcat即可运行 ,它是通过Java工程中的Application类中的main函数启动的(SpringBoot框架), 其工作原理与Tomcat+war基本相同 ,只是没有加载外部文件的动作 。

2、后端接口处理请求的工作原理

这里我们以Tomcat+war的形式介绍 ,发送一个请求时,至少需要明确URL、请求方式、数据格式、请求数据这四个部分 。发送请求到后端程序,实际是3个步骤 :

1、客户端先根据URL中的域名(IP)和端口与Tomcat建立连接 。

2、把请求报文发送给Tomcat,请求报文其实就是文本信息,里面记录了URL、请求方式、请求数据等 。

3、Tomcat根据请求报文中的URL路径和请求方式找到对应的war包中的函数,并把请求报文信息(包括请求数据等)转换成对象后作为参数传入。

当后端程序处理完请求后,Tomcat会自动整理返回报文并发送给客户端(实际是Servlet自动处理的) ,返回的报文中的数据部分是war包中的接口函数返回的 ,至于其他部分(如头信息、状态码等)是自动填充的(Servlet自动处理的)。 当然,也可以在Java代码中通HttpServletRequest对象修改的。

 总结

以上就是后端工作原理的全部内容 ,如果观看的小伙伴还有疑问,可以在评论区留言。另外,虽然本期我们只介绍了Java后端的工作原理 ,但是其他语言的工作原理也是雷同的, 因为后端程序是一种特定的软件形态,无论用什么语言开发 其基本的程序骨架都是一样的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/870891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存