MicroProfile 1.2 新增功能介绍

  • Michael Redlich
  • 大愚若智

2017 年 12 月 3 日

话题:JavaRESTDevOps语言 & 开发架构

Eclipse Foundation 最近发布了MicroProfile 1.2 版,该版本提供了下列新增 API:

Health Check API 可以判断计算节点是否即将终或关闭,随后会使用正常运行的新实例替换这样的节点。该 API 包含了内建的类注释@Health,该类必须实现HealthCheck接口并覆盖call()方法。

Health Metrics API 为每个计算进程提供了众所周知的监视端点和度量值,并提供了下列内建注释,可添加到任何类或方法中:

  • @Counted - 将方法、构造函数或类型标记为计数器(Counter)。
  • @Gauge - 将方法标记为计量器(Gauge)。
  • @Metered - 将方法或构造标记为已度量(Metered),并追踪它们的调用频率。
  • @Timed - 将已注释对象的方法或构造标记为已计时(Timed),并追踪这些已注释对象的调用需要花多长时间完成。
  • @Metric - 请求注入或注册某个度量值(Metric)。

Fault Tolerance API 提供的新策略以及相应的注释可添加至任何类或方法:

  • @Timeout - 定义必须的超时时间。
  • @Retry - 定义必须进行重试的条件。
  • @Fallback - 为失败的执行提供了备选解决方案。
  • @Bulkhead - 防止系统超载或无限等待。
  • @CircuitBreaker - 隔离失败,让系统的其余部分可以正常运转。

JSON Web Token(JWT)Propagation API 是一种基于令牌的身份验证 / 授权系统,其中包含一系列互操作标准。

Config 1.1 API 按照设计可在运行时注入配置值,此次更新修复了一些 Bug,并增加了一些原本不具备的重要功能,借此改善了与相关规范的配合效果。

按照官网介绍,这个版本还提供了其他一些收益:

  • 为 Enterprise Java 微服务的实现提供了更多功能
  • 跨越不同 MicroProfile 实现的互操作性使得用户能够在一个应用程序中自由选择使用一个或多个 MicroProfile 实现
  • 为每个 API 提供了一套完备的周边资源,包括测试兼容性工具包(TCK)、Javadoc、PDF 版文档、API Maven artifact coordinate、Git 标签以及可下载内容(规范和源代码)

按照 MicroProfile路线图的未来规划,后续的 MicroProfile 1.3 版计划在 2017 年 12 月 15 日发布,会新增下列 API:

MicroProfile 2.0 计划在 2018 年 3 月 31 日发布,将包含对下列 Java EE 8 API 的升级:

  • JSON-B 1.0
  • JSON-P 1.1
  • CDI 2.0
  • JAX-RS 2.1

MicroProfile 自从 2016 年 9 月发布时,就承诺将在 Java 中采用微服务。有关此次发布最新版的详细信息可参阅 MicroProfile 1.2规范

IBM CDI 和 MicroProfile 开发主管Emily Jiang,以及Payara公司 Java 中间件顾问Michael Croft向 InfoQ 介绍了本次发布的新版本。

InfoQ:你们对于新增的 EE4J 项目有何看法?

Emily Jiang:新增的 EE4J 项目是开源领域一个了不起的创新。所有社区,包括由于许可条款限制而无法使用 Java EE TCK 的社区,都能从中获益。该项目已经尽可能保持敏捷、灵活、开放、兼容,Java 开发者当然是最大的受益者。希望该项目的新版发布节奏可以进一步加快,借此彻底终结 Java EE 四年甚至五年为单位的发布周期。TCK 的开放可以让所有应用程序服务器获益,尤其是原本因为许可费用缘故,未能进行 TCK 认证的程序。

希望能有越来越多的 Java 容器和框架社区以开放和公开为背景展开合作,与 Java 开发者进行更坦率的交流。每个开发者都能对项目做贡献,提出或讨论问题。我很看好新的 EE4J 项目,并且希望继续为项目的发展贡献自己的力量。

Michael Croft:我本人对此很激动,我觉得过去多年来,业界发生的很多事情已经证明了开源软件的力量,尤其是类似 Oracle 和 IBM 这样的重量级选手也开始投身社区工作。对于 JSF,一些专家组成员已经提出要以社区的力量推动相关规范继续发展。对于 EE4J,入门的门槛已经大幅降低,我们已经通过邮件列表和 GitHub 获得了大量的反馈。

InfoQ:在 EE4J 的贡献中,你们觉得 MicroProfile 扮演了什么角色?

Jiang:MicroProfile 已经诞生多年。在一年时间里,已经成功发布了 MicroProfile 1.0(CDI 1.2、JAX-RS 2.0、JSON-P 1.0)、MicroProfile 1.1(Config 1.0)和 MicroProfile 1.2(Config 1.1、Fault Tolerance 1.0、Health 1.0、Metrics 1.0 和 JWT 1.0)。已经发布的规范为 Java EE 提供了众望所归的微服务开发功能。例如 Config JSR 是 JCP 在十多年前提出的,但提出之后除了两次失败的尝试,从来没被接受过。

与之相对的,MicroProfile Config 只用了几个月就公开发布了,并且获得了大量反馈。MicroProfile 社区很有创新精神,完全是由开发者推动的,一切都维持开放和透明。这里取得的所有成果都为敏捷、开放、灵活和兼容设立了绝佳的典范。在类似目标以及 Eclipse 的推动下,未来的 EE4J 也将能轻松接纳 MicroProfile 技术。

Croft:围绕 MicroProfile 的诸多努力都是为了以更快的节奏实现创新。从最开始,MicroProfile 的目标就在于独立发展,同时依然维持与 Java EE 的密切关系,毕竟 MicroProfile 是基于 Java EE API 发展起来的。

MicroProfile 的角色早已通过 MicroProfile 开发出的第一个 API 彰显出来了:配置(Config),在最初公布了要迁移至 Eclipse 之后,该 API 就以 JSR 的形式顺利提交。很明显,这两个项目可以通过很多方式相互关联,不过目前依然保持了这样的形式。

我觉得,MicroProfile 已经具备继续发展所需的一切。它已经在很大程度上实现了与 Java EE/EE4J 的兼容,而 MicroProfile 发展出的任何规范都会直接提交至 EE4J。

InfoQ:随着 MicroProfile 1.3 的发布,Open Tracing API 1.0 和 Open API 1.0 能为大家带来些什么?

Jiang:MicroProfile Open Tracing 定义了一种追踪微服务请求跨越服务边界流动的模型。请求在多个服务之间流动,这是微服务架构中一种常见的情况。这个规范定义了一种基于opentracing.io的 API,并定义了相关的行为,可以让服务轻松参与到启用了分布式追踪的环境中。该规范还定义了一种更简单的方法,可以让微服务通过注释使用分布式追踪能力。此外该规范还提供了一个很棒的功能,可以让 JAX-RS 应用程序无需更改代码,即可自动参与到分布式追踪工作中。

MicroProfile Open API 主要是为了提供一个统一的 Java API,该 API 由 OpenAPI v3 规范定义,所有 应用程序开发者都可以使用它暴露自己的 API 文档。由于 OpenAPI v3 规范本身是语言中立的,因此基于 Java 的 Open API 也可直接被应用程序服务器所采用。这个规范基于 SmartBear 的 Swagger 库,而 SmartBear 也是 MicroProfile 成员。MicroProfile Open API 规范还将进一步完善 API,以更好地满足微服务开发需求。

除了 MicroProfile Open Tracing API 和 Open API,MicroProfile 最近还创建了另一个规范:MicroProfile REST Client,计划将与 MicroProfile 1.3 一同发布。该规范提供了一种类型安全的方法,可通过 HTTP 调用 RESTful 服务。这个规范主要侧重于 REST 客户端,目的在于简化客户端的创建,而客户端与服务器之间的通信可由服务器应用程序处理。

Croft:在最近一次的“两周电话讨论”中,还真的讨论过这一点。MicroProfile 1.3 目前计划在 12 月发布,并通过状态报告帮助每个项目了解截止期限信息。目前与 OpenAPI 的情况类似,OpenTracing 和 Typesafe REST Client API 很可能会包含在即将发布的新版中。OpenAPI 规范相当庞大,因此主要的挑战还在于 TCK。该规范本身可以兼容由 Swagger 发起的第 3 版 OpenAPI 规范,很多开发者其实已经熟悉它了。

Typesafe REST Client 主要是为了向开发者提供一种类型安全的方法,通过定义到程序的接口来使用远程 REST 服务。具体目的与 OpenAPI 规范有些重合,但围绕这一领域的所有重要讨论都已被延后到 1.0 版发布之后。此外还有一个领域可能有待讨论:需要通过某种方式从 OpenAPI 定义生成 REST 客户端接口,这样才能更自然地融入现有工具中。

最后,OpenTracing 让 MicroProfile 获得了 OpenTracing 标准,并可兼容诸如 Zipkin 或 Jaeger 等追踪方面的实现。

InfoQ:Java SE 新的发布周期是否会影响 MicroProfile 和 / 或 EE4J 的开发?

Jiang:Java SE 提速后的新发布周期会对 MicroProfile 和 EE4J 的开发产生非常积极的影响,这意味着我们新制定或更新的规范也可以快速用上新增的最新版 Java SE 功能。目前 MicroProfile 的编程模型要求至少具备 Java 8,一些很棒的功能,例如 FunctionalInterface、默认的接口实现等已经广泛应用在 MicroProfile 规范中。

Croft:我们的客户围绕 Java SE 有很多问题,但这些问题主要与 Payara Server 或 Payara Micro 有关。我觉得,Java SE 可以通过相同的方式做出改变,并且对 EE4J 和 MicroProfile 的实现产生远大于规范本身的影响。

然而 MicroProfile 最初的目标在于创新,着眼于未来,因此我希望在 2018 年能围绕 Java SE 的变化展开一些讨论,毕竟 Java 8 将于明年 9 月寿终正寝,而 Java 11(目前的叫法)将成为新的 LTS 版本。

InfoQ:你们觉得 Java 9 什么时候可以兼容 MicroProfile?

Jiang:我们还没有在 MicroProfile 的 GoogleGroup 上讨论过这个问题。对于 Java 9,一个重要问题在于,由于发布周期加快为六个月,可能无法获得像 Java 8 那么长的支持时间。因此以后的情况还无法确定。这也会对 MicroProfile 产生一定的影响。MicroProfile 什么时候能够采纳 Java 9,这取决于诸如 Open Liberty、Wildfly Swarm、TomEE 以及 Payara 等应用程序服务器什么时候能支持 Java 9。

Croft:与 Java 9+ 的兼容主要是实现方面的问题,毕竟已经有很多现有的模块系统,例如 Payara Server 中的 OSGi 以及其他一些系统。我怀疑对于 Java 9 可能不会有官方的支持了,因为 Java 9 并不是 LTS 版本,因此对后续 Java 版本的官方支持可能会从 9 月开始选择 Java 11。

InfoQ:您目前在 IBM 主要负责什么?也就是说,您的日常工作具体在做些什么?

Jiang:作为 IBM 的 MicroProfile 开发主管兼 CDI 架构师,我会积极参与有关 MicroProfile 的讨论并从事与各种规范有关的工作。同时我还负责管理该规范在 Open Liberty 中的具体实现方式。我还管理着 MicroProfile Config 和 Fault Tolerance 规范的开发,并参与了其他规范,例如 Metrics、Health、REST Client、Open Tracing 等的相关工作。作为 MicroProfile 社区有影响力的成员,我还尽可能完善整个社区的工作方式,以确保 MicroProfile 保持敏捷和精益。我十分看好 MicroProfile 编程模型,并在很多会议(Devoxx US、Devoxx UK、JAX London、Voxxed Belgrade、EclipseCon Europe)上推广 MicroProfile,并就如何在后续版本中进行改进收集反馈。此外我还是 Configuration JSR 共同规范的负责人,主要负责 MicroProfile Config 现有成果的标准化工作,并确保 Config JSR 和 MicroProfile Config 的同步,借此 Config JSR 的新功能也可以尽快实现到 MicroProfile Config 中。

InfoQ:那么 Croft 您目前在 Payara 主要承担什么职责,日常工作都在做些什么?

Croft:我的职责非常广泛!目前我担任 Payara 支持团队的主管,因此首要职责主要围绕我们的客户,其次是整个社区。我有幸能与我自己团队,以及我们公司开发团队中一些非常天才的人以及专职人员共事。我们会共同为产品提供商业支持,写文档和博客文章,在会议上发言,为 MicroProfile 社区做贡献,提供社区支持,方方面面都包括在内!虽然工作很繁忙,但能获得大量用户的反馈也让我们觉得获益匪浅。

参考资料

阅读英文原文What's New in MicroProfile 1.2

JavaRESTDevOps语言 & 开发架构