与 WildFly 项目经理 Jason Greene 谈 WildFly 8

  • Charles Humble
  • 梅雪松

2014 年 2 月 14 日

话题:Java语言 & 开发

Red Hat JBoss 部门今天宣布 WildFly 8 正式发布,其前身是 JBoss Application Server,我们对此进行了报道。Jason Greene 是 Red Hat JBoss 部门的 WildFly 项目经理和 JBoss EAP 平台架构师。InfoQ 采访了 Jason Greene,以了解这个新产品的更多信息。由于 WildFly 包含了一个全新的 Web 服务器(Undertow),这是个很重要的产品,我们的采访从这开始,为什么会有这样一个决定?

嗯,正如你所知,最近几年,Web 应用取得了显著的发展,对 Web 服务器的需求远超以往。由于计算设备的增长,Web 应用现在面对巨大数量的客户端,对富界面的需求已经导致更频繁的、更多面向数据的流量。使用 WebSocket 一类的技术进行全双工通讯已经成为普通应用。面对这些挑战,我们觉得最好的解决方案是重新设计一个高性能的服务器。

此外为了满足现代应用的需求,我们也希望解决一些通常使用替代原生 Web 服务器解决的基础服务问题。举例来说,通过 Undertow,WildFly 现在不需要 Apache 或者 Nginx 就能够扮演高效的非阻塞反射代理角色。

另一个因素是在云环境中减少端口数量的需求。在云环境中,一个系统可能运行了几百个甚至几千个 WildFly 实例。基于 HTTP 使用 HTTP Upgrade 可以升级成多种协议,Undertow 提供了复用这些协议的能力。

最后,这也给了我们一个机会来构建一个超越 Servlet 规范、对开发人员非常友好的系统。最终产出的系统非常小,而且只有很少的依赖、很少的内存占用并且是可嵌入的。其易于使用的 API 同时支持非阻塞式和更传统的面向阻塞流的 Web 开发。

InfoQ:你能谈谈 WildFly 8 中审计日志的详细信息吗?

WildFly 的审计日志功能之前是在 EAP 6.2 中增加的,后来我们把它引入到了上游产品中。如果启用 RBAC,只有审计员或超级管理员角色能够修改审计日志配置。任何针对管理模型的操作都会被记录在日志中。由于像 CLI 的 tab-completion(译注:按 tab 键自动完成填充)功能会导致大量的读操作,因此你可以配置只记录那些模型状态发生变化的操作。同时,在 MBeanServer 内部或者在核心控制器中,当我们的 JMX 门面调用核心管理模型时,我们记录所有的 JMX 访问。

我们支持日志写到本地文件或者写到系统日志服务。系统日志服务可以是本地的,也可以是远程的,我们支持通过 UDP 和 TCP 协议发送日志。同时还支持 TLS(对 rsyslog 测试),包括可选的客户端授权认证。作为对我们社区和客户需求的回应,现在 Syslog 记录只以 JSON 格式输出,这样就可以更容易地增加日志字段。但是,按照它现在的写入方式,将来也可能增加其它输出格式。

日志记录的信息包括:

- 该操作是否修改了管理模型

- 该操作是否在服务完全启动后立即执行。

- 认证的用户名

- 操作的来源接口,也就是说它是来自 Web 接口、JMX 接口还是原生接口

- 调用者的地址

- 操作是否成功

- 操作本身

- 域模式下的 UUID,用于跟踪其从域控制器到主机控制器然后到管理服务器的操作。

示例记录

- - - - - - - - - - ----

  2014-01-23 10:30:16 - {
   "type" : "core”,                      
   "r/o" : false,
   "booting" : false,
   "version" : "8.0.0.Final-SNAPSHOT",
   "user" : "$local",
   "domainUUID" : null,
   "access" : "NATIVE",
   "remote-address" : "127.0.0.1/127.0.0.1",
   "success" : true,
   "ops" : [{
       "address" : [{
           "system-property" : "xxx"
       }],
       "operation" : "remove",
       "operation-headers" : {
           "caller-type" : "user",
           "access-mechanism" : "NATIVE"
       }
   }]
}

InfoQ:你能介绍一下补丁系统吗?它是否能向一个正在运行的系统打补丁?

补丁功能是我们最早为 JBoss EAP 用户开发的,但我们开源模型的一个关键元素是,我们为企业产品开发的所有主要功能,都要移植到上游产品中。因此 JBoss EAP 6.2 和 WildFly 8 都有这个功能。该功能包括一组新的管理操作和 CLI 中一个名为“patch”的新命令。你可以使用此命令将 JBoss 产品补丁更新到一个单独的本地或远程服务器实例中。你可以对运行中的系统执行该命令,但它只是补丁阶段,必须重新启动才能让补丁生效。如果发现有问题,你可以回滚补丁。只要你愿意,系统能够保存所有的补丁历史记录,因此你可以回到任意时间点。如果你对其内部感到好奇,补丁基础服务建立在 WildFly 加载的模块类之上,本质上是通过增加额外的模块文件夹,扩展或替换那些初始安装时包含的模块。

我们计划在将来的版本中,继续开发此功能,包括提供界面,以向导方式更新这些补丁。

InfoQ:哪些 LDAP 目录可以用于保存 RBAC 凭据?活动目录可以吗?

可以。我们对 LDAP 的支持非常灵活,你可以调整过滤器来匹配目录提供者的 Schema。因此理论上它支持包括活动目录在内的任意 LDAP 服务器。举例来说,对于活动目录,你可以设置用户名过滤器指向 sAMAccountName。

InfoQ:除了品牌的变化,使用 WildFly 与 JBoss EAP 有什么不同?EAP 是否更加保守一些?

WildFly 倾向于以小步快跑的方式交付最新的技术。我们的目标是每年至少发布一个大版本,在大版本之间频繁地发布里程碑版本。WildFly 采用社区支持模型,开发者和用户在论坛中互相帮助,分享代码。但是他们关注的、感兴趣的,通常都是当前的产品和技术。

另一方面,EAP 更加保守,它关注的是长期运行的分支,会维护 7-10 年并保持补丁更新。这些分支上的功能更新是渐近式的,且更易于使用。(我们从上游树反向移植功能到老版本,重点是保持兼容性。)EAP 还有许多其它好处,除了订购中包含的分发外,还包括供应商认证和一致性、庞大的知识库和有保障的服务水平协议。

InfoQ:我们多久能看到满足 Java EE 7 规范的 JBoss EAP?

我现在还不能确定具体的日期,但我确定下一个将要发布的大版本 EAP 7 准备提供 Java EE 7 的支持。因为最终的 EAP 是继承自 WildFly,因此它会兼容 WildFly 8(以及 WildFly 的后续版本)。

InfoQ:对于 Oracle 决定停止 GlassFish 的商业支持,你认为会对 JBoss EAP 更广泛的应用产生多大影响?

我不想推测最终会发生什么,但我们已经注意到从 GlassFish 转到 WildFly 和 EAP 的兴趣在增加。尽管选择什么样的应用服务器需要考虑很多因素,但我们觉得致力于开源和社区是一个重要的因素。而这些一直是 Red Hat 基因的组成部分,我们写的每一行代码都是 100% 开源的。

更多信息请访问WildFly 网站

原文英文链接:Interview with WildFly Lead Jason Greene on WildFly 8

Java语言 & 开发