写点什么

MicroProfile 1.2 新增功能介绍

  • 2017-12-03
  • 本文字数:5019 字

    阅读完需:约 16 分钟

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

2017-12-03 18:001611
用户头像

发布了 283 篇内容, 共 107.8 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

jenkins-01 | 安装

Python研究所

持续集成 jenkins CI/CD

“AI赋能”大学计划落地,英特尔联合生态伙伴推进产教融合

E科讯

高可用 | Xenon:后 MHA 时代的选择

青云技术社区

澳鹏Appen:用高质量的训练数据,赋能更好的智能驾驶

澳鹏Appen

人工智能 自动驾驶 训练数据

最新阿里+头条+腾讯大厂Android笔试真题,附详细答案

欢喜学安卓

android 程序员 面试 移动开发

在windows上用Nginx做正向代理

Python研究所

网络 Proxy 正向代理

分布式数据库在抖音春晚活动中的应用

火山引擎开发者社区

数据库 后端

Python——默认字典 (defaultdict)

在即

6月日更

Vue-3-生命周期管理

Python研究所

Vue 大前端 签约计划

技术干货 | macOS桌面端录屏采集实现教程

ZEGO即构

大前端 音视频 WebRTC 屏幕录制

在云原生场景下构建企业级存储方案

青云技术社区

云原生

一次性搞清Java中的类加载问题

华为云开发者联盟

Java

极狐GitLab致力打造DevSecOps 行业标准

极狐GitLab

ci 修复措施 安全扫描器 安全测试

GO database/sql 连接池源码分析

非晓为骁

源码分析 Go 语言 连接池 database

Java进阶 | 泛型机制与反射原理

晨雨听风

Java

继BAT之后,又一头部厂商开始构建低代码生态!=

优秀

低代码

云小课|RDS实例连接又失败?看我祭出杀手锏!

华为云开发者联盟

数据库 关系型数据库 云数据库 RDS GaussDB(for MySQL)

万字长文详解HiveSQL执行计划

五分钟学大数据

sql 大数据 hive Hive SQL

如何基于MindSpore实现万亿级参数模型算法?

华为云开发者联盟

算法 mindspore 万亿级参数 大模型

迷惘的六月份

卢卡多多

生活状态 6月日更

容器化 | MySQL on K8s 开源开放的高可用容器编排方案

RadonDB

MySQL 容器 RadonDB KubeSphere

不管卷不卷,面试还是得问问你G1原理!

艾小仙

Java 编程 程序员

云小课 | 华为云KYON之ELB混合负载均衡

华为云开发者联盟

负载均衡 华为云 云网络 KYON企业级云网络 弹性负载均衡ELB

文件保险箱——用区块链保护文件

趣链科技

区块链 区块链应用

使用 VideoToolbox 探索低延迟视频编码 | WWDC 演讲实录

网易云信

低延时

基于 Kubesphere 的 Nebula Graph 多云架构管理实践

青云技术社区

KubeSphere

和12岁小同志搞创客开发:设计一款亮度可调节灯

不脱发的程序猿

DIY pwm 创客开发

阿里P8架构师(花名:霍州)Java程序性能优化“学习日记”

Java架构追梦

Java 阿里巴巴 架构 面试 性能优化

最新大厂Android校招面试经验汇总,看完没有不懂的

欢喜学安卓

android 程序员 面试 移动开发

详解Java中static关键字和final关键字的功能

华为云开发者联盟

Java static关键字 final关键字 静态变量

有状态应用如何在Kubernetes平台上快速迁移和重建

焱融科技

云计算 Kubernetes 容器 云原生 高性能

MicroProfile 1.2新增功能介绍_Java_Michael Redlich_InfoQ精选文章