合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
你好,我是码哥,可以叫我靓仔。是一个拥抱硬核技术和对象,面向人民币编程的男人。友情提示:阅读本文前需要对 Tomcat 有一个全局架构认识,可先翻阅《Tomcat 架构深度解析》。
Tomcat 是 Sun 公司在 1998 年开发的。当时开发 Tomcat 的目标是成为 Sun 公司的 Java Servlet 和 JSP 规范的参考实现。
如今已经成为业务开发首选的 Web 应用服务器,Spring Boot 直接将 Tomcat 内置作为 Web 应用启动,二十五年宝刀未老。其中的架构设计思维值得我们深入学习和借鉴。
码哥今天带你深入探究,学会借鉴 Tomcat 的设计思想在工作中做好架构设计。
在Tomcat 架构解析到设计思想借鉴中我们学到 Tomcat 的总体架构,学会从宏观上怎么去设计一个复杂系统,怎么设计顶层模块,以及模块之间的关系;
Tomcat 实现的 2 个核心功能:
所以 Tomcat 设计了两个核心组件连接器(Connector)和容器(Container),连接器负责对外交流,容器负责内部处理。
Tomcat整体架构
本篇作为 Tomcat 系列的第三篇,带大家体会 Tomcat 是如何构建的?每个组件如何管理组件的?连接器和容器是如何被启动和管理的?
Tomcat 启动流程:startup.sh -> catalina.sh start ->java -jar org.apache.catalina.startup.Bootstrap.main()
Tomcat 启动流程
Bootstrap、Catalina、Server、Service、 Engine 都承担了什么责任?
图片
单独写一篇介绍他们是因为你可以看到这些启动类或者组件不处理具体请求,它们的任务主要是管理,管理下层组件的生命周期,并且给下层组件分配任务,也就是把请求路由到负责干活儿的组件。
他们就像一个公司的高层,管理整个公司的运作,将任务分配给专业的人。
我们在设计软件系统中,不可避免地会遇到需要一些管理作用的组件,就可以学习和借鉴 Tomcat 是如何抽象和管理这些组件的。
当执行 startup.sh 脚本的时候,就会启动一个 JVM 运行 Tomcat 的启动类 Bootstrap 的 main 方法。
先看下他的成员变量窥探核心功能:
public final class Bootstrap {
ClassLoader commonLoader = null;
ClassLoader catalinaLoader = null;
ClassLoader sharedLoader = null;
}
TOP