《OpenShift / RHEL / DevSecOps 汇总目录》
JBoss EAP 7/8 是符合 Jakarta EE 8/10 规范的 Java 应用服务器。在运行 Java 应用方面 JBoss EAP 的能力和 Weblogic Server 大致相当,但在功能架构方面,两者有部分稍区别。本文主要介绍 JBoss EAP 在功能架构方面的核心概念,尤其是和 Weblogic Server 差异部分。
Server 运行管理模式
Standalone Server 单机模式
每个 JBoss EAP Server 实例都是单独管理的。虽然在应用运行层面不同的 JBoss EAP Server 实例之间可以构成 HA 集群关系,但是从管理角度,每个以 Standalone 模式运行的 JBoss EAP Server 实例都是各管各的。
Managed Domain 受管域模式
受管域由一个域控制器 (Domain Controller) 进程作为中央管理控制点,所有其他 Server 实例共享一个共同的管理策略。域可以跨越多个主机,特定主机上的所有 JBoss Server 实例都由一个主机控制器 (Host Controller) 进程控制。实际上 Domain Controller 也是一个特殊的 Host Controller 。每台主机上的主机控制器都与域控制器交互,协助域控制器管理对应主机上的服务器实例的配置和生命周期。
- 受管域 Managed Domain - 由中央控制点管理的 JBoss EAP 服务器实例集合。
- 主机 Host - 物理或虚拟机。
- 主机控制器 Host Controller - 只负责管理该主机上的 Server,本身并不处理应用工作负载。Host Controller 负责启动和停止在其主机上运行的服务器进程,向特定机器上的 JBoss EAP 服务器实例传递配置信息、运行状态和管理命令。Host Controller 与 Domain Controller 通信,确保 JBoss EAP 服务器实例按照域策略进行配置。
- 域控制器 Domain Controller(或 Primary Host Controller) - Domain Controller 是一种特殊类型的 Host Controller,作为控制域的中心点。它确保每个 JBoss EAP 服务器都按照特定策略进行配置。
- 服务器组 Server Group - 作为单一单元管理的 JBoss EAP 服务器集合。
- 服务器 Server - 在自己的 JVM 进程中运行的 JBoss EAP Server 实例。在 Managed Domain 中,服务器不是单独管理,而是作为服务器组的一部分。服务器在独立于 Host Controller 的 JVM 进程中运行,Host Controller 负责启动服务器进程。Host Controller 通过组合域范围配置(默认来自 domain.xml )和特定主机配置(默认来自 host.xml )中的元素来合成服务器的配置。
执行进程
单机模式 - Server 进程
当 JBoss EAP 运行在单机模式时,在主机中只有 1 类执行进程:Server 进程。
受管域 - Process Controller、Host Controller 和 Server 进程
当 JBoss EAP 运行在受管域模式时,在主机中有 3 类执行进程:Process Controller、Host Controller 和 Server 进程。
其中 Process Controller 进程负责生成 Host Controller 进程并监控其生命周期。如果 Host Controller 崩溃,Process Controller 将重新启动它。此外,它还会根据 Host Controller 的指示启动 Server 进程,但不会自动重启崩溃的 Server 进程。
Module 和 MSC
JBoss EAP 的所有功能都由 Java 类实现,并在运行时加载到 JVM 中。在 JBoss EAP 中使用 Module 和 MSC(Modular Service Container) 实现并行 Java 类加载。Module 是 JBoss 的类加载机制,用于类加载和依赖管理的类的逻辑分组。每个模块是一个独立的单元,包含代码、配置文件和依赖声明,通过 Module 可以实现依赖管理和类隔离。
- 静态模块
静态模块由 Jboss EAP 统一加载,可以被整个应用服务器及其其上运行的应用所使用。所有应用服务器提供的 API 都以静态模块的形式提供。如果在同一服务器上部署了许多使用相同第三方库的应用程序,那么创建自定义的静态模块会非常有用。JBoss 自带的静态模块全部在 EAP_HOME/modules/ 目录中各自的子目录中,由对应子目录中的 module.xml 文件进行定义。
$ cat EAP_HOME/modules/com/mariadb/main/module.xml
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mariadb">
<resources>
<resource-root path="mariadb-java-client-3.3.2.jar"/>
</resources>
<dependencies>
<module name="javaee.api"/>
<module name="sun.jdk"/>
<module name="ibm.jdk"/>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
- 动态模块
动态模块由应用服务器为每个 JAR 、 WAR 、 EAR (中的每个子部署)创建和加载。动态模块的名称源自部署存档的名称。由于部署是作为模块加载的,因此它们可以配置依赖关系,并被其他部署用作依赖关系。
配置 Server 功能
一个 JBoss EAP Server 具有哪些功能是在 JBOSS_EAP_HOME/standalone/configuration/ 或 JBOSS_EAP_HOME/domain/configuration/ 中的 XML 配置文件中定义的。这其中主要通过 extension、subsystem 和 profile 定义有哪些功能,以及这些功能如何运行。
extension
JBoss EAP 的核心非常轻量级,诸如 Web 容器、EJB 容器、JMS、日志、安全认证等大部分功能都是通过 extension 实现的。配置文件的 extension 中要列出对核心功能进行扩展需要用到的 Module。
subsystem
subsystem 是对 extension 用到的 Module 的定制化配置,以运行一个特定的功能。JBoss EAP 8 包含的 subsystem 可参见:
https://docs.redhat.com/en/documentation/red_hat_jboss_enterprise_application_platform/8.0/html-single/configuration_guide/index#jboss-eap-subsystems
profile
Profile 是一组 subsystem 的集合,它定义了服务器运行时的功能和行为。不同 Profile 可以用来适配不同的场景(如开发、测试、生产),例如单机模式,高可用性配置。
Server 运行配置文件
在 JBOSS_EAP_HOME/standalone/configuration/ 目录下包含常用的配置文件有:
配置文件 | 包含功能 |
---|---|
standalone.xml | 该文件包含 Jakarta EE Web 配置,也是 JBoss EAP 启动独立服务器时使用的默认配置。 此配置不提供消息传递或高可用性所需的子系统。 |
standalone-ha.xml | 该文件包含具备高可用性的 Jakarta EE Web 配置 ,包含所有默认子系统,并添加了高可用性所需的 modcluster 和 jgroups 子系统。不提供消息传递所需的子系统。 |
standalone-full.xml | 该配置文件包含 Jakarta EE 认证配置,包含所有默认子系统,并添加了 messaging-activemq 和 iiop-openjdk 子系统。不提供高可用性所需的子系统。 |
standalone-full-ha.xml | 该配置文件包含 Jakarta EE 全平台认证的配置,包含对所有可能子系统的支持,包括对消息传递和高可用性子系统的支持。 |
standalone-load-balancer.xml | 该配置包含负载均衡功能。负载均衡功能可以用于基于 Domain 运行的 JBoss EAP Server,也可用于基于 Standalone 运行的JBoss EAP Server |
在 JBOSS_EAP_HOME/domain/configuration/ 目录下包含常用的配置文件有:
配置文件 | 包含功能 |
---|---|
domain.xml | 是 Managed Domain 的主要配置文件。只有 Domain Controller 才能读取该文件。该文件包含所有 profiles(默认、ha、full、full-ha、负载平衡器)的配置。 |
host-primary.xml(以前叫 host-master.xml) | 仅包含将服务器作为 domain controller 运行所需的配置信息,而不定义任何其他服务器实例。 |
host-secondary.xml(以前叫 host-slave.xml) | 只包括将服务器作为 host controller 运行所需的配置。它必须包含 domain controller 的地址以便与之连接。 |
host.xml | 包括 host-primary.xml 和 host-secondary.xml 中所有的功能。 |
Managed 部署和 Unmanaged 部署
- Managed 部署:先将部署内容复制到服务器的内容存储库中,然后使用该内容副本部署,而不是用户提供的原始内容。
- Unmanaged 部署:不会将部署内容复制到服务器的内容存储库中,需要指定部署目标的位置。注意,已解压的目录只支持 Unmanaged 部署。
管理方式
JBoss EAP 既支持通过 console, CLI 命令工具进行管理,也可直接修改 XML 配置文件实现各种设置。
JBoss EAP 提供的 CLI 命令工具除了支持交互式操作外还支持非交互执行。
参考
https://docs.wildfly.org/35/Admin_Guide.html
https://access.redhat.com/articles/7018413
https://www.slideshare.net/slideshow/jboss-application-server-7/8357265
https://docs.openmaru.io/en/docs/jboss-eap/JBossEAP6_Module_Architecture/
https://docs.redhat.com/zh-cn/documentation/red_hat_jboss_enterprise_application_platform/7.4/html-single/management_cli_guide/index