使用 MicroProfile 开发微服务
Eclipse MicroProfile 定义用于在 Enterprise Java™ 环境中开发微服务应用程序的编程模型。 它是 Eclipse Foundation 下的一个开放式源代码项目,用于将微服务引入 Enterprise Java 社区。 MicroProfile 受 Liberty 支持。
| 规范 | 描述 |
|---|---|
| JSR 346: Contexts and Dependency Injection for Java EE 1.1 | CDI 定义一组服务,用于管理 Enterprise Java 运行时中对象的注入和生命周期。 |
| JSR 339: JAX-RS 2.0: The Java API for RESTful Web Services | JAX-RS 是用于 RESTful Web Service 的 Java API。 |
| JSR 353: Java API for JSON Processing | JSON-P 是用于处理 JSON 的 Java API。 |
| Eclipse MicroProfile Config 1.1 | Config 是用于管理应用程序配置的 Java API 和 SPI。 |
| Eclipse MicroProfile Fault Tolerance 1.0 | 容错提供了在调用外部服务时应对故障的策略。 |
| Eclipse MicroProfile Health Check 1.0 | 运行状况检查允许组件向更广泛的系统报告其喜好。 |
| Eclipse MicroProfile Health Metrics 1.0 | "运行状况度量" 为应用程序提供了统一的方法来公开监视数据。 |
| Eclipse MicroProfile JWT Propagation 1.0 | JWT 传播允许 JSON Web 令牌 (JWT) 用于 Java EE 基于角色的访问控制 (RBAC) 的认证和授权。 |
限制
- CDI 在 MicroProfile API 中广泛使用,但是 Liberty 在打包在企业捆绑软件归档 (EBA) 中的 OSGi Web 应用程序中不支持 CDI。 而是将在 Web 应用程序归档 (WAR) 或企业应用程序归档 (EAR) 中使用 MicroProfile 的应用程序打包。
- MicroProfile Fault Tolerance 1.0 旨在管理对其他服务发出的调用。 它并非旨在管理事务上下文中资源的更新。 不应在注释
@Bulkhead,@CircuitBreaker,@Fallback,@Timeout或@Retry的方法中更新 CICS® 资源。 CICS 无法保证在发生异常时将恢复这些更新,即使在使用 JTA 时也是如此。 - 在 Liberty JVM 服务器的 server.xml 中启用功能部件
mpJwt-1.0时,必须使用 JWT 不记名令牌来完成所有认证。 要使用任何其他形式的认证,必须使用单独的 Liberty JVM 服务器。
CICS Liberty JVM 服务器中的服务体系结构
整体式架构
支持服务
支持服务允许后端数据和程序与主应用程序分离。 通过将数据和程序转换为单独的应用程序,使用平台无关的通信方法(例如 HTTP、套接字、消息队列等)来调用它们。 将一些责任交给这些服务,而不是包含与这些源进行通信的所有逻辑的主应用程序。
在 CICS中, z/OS® Connect 用于通过 REST API 将 CICS 程序公开为支持服务。 在此示例中,应用程序使用 JDBC 与数据库进行通信。 SMTP用于发送电子邮件, HTTP 用于通过 z/OS 调用 CICS。
托管服务
服务在 CICS 中托管,以进一步将主应用程序与各种组件分离。 与支持服务类似,更多功能通过 CICS Web Service 在 CICS 中公开,或者在使用 servlet , JAX-RS 和 JAX-WS 等技术的应用程序的 CICS Liberty 中公开。
微服务
在 CICS 中缩放服务
根据区域拓扑和设置,可以在 CICS中以多种方式扩展服务。 微服务通常隔离在单个容器中。 在 CICS中,可以在区域或 JVM 服务器中隔离服务或服务集。 可通过运行多个托管同一服务或一组服务的 CICS 区域来实现缩放。 您还可以通过增加线程数来扩展 JVM 服务器。
保护微服务
在可能的情况下,应使微服务脱离公共网络。 API 网关可用于提供对微服务的受控访问。 MicroProfile 提供了一种方法,用于将基于 Open ID Connect (OIDC) 的 JSON Web 令牌 (JWT) 用于微服务端点的基于角色的访问控制 (RBAC)。 安全性令牌提供用户身份在不同服务之间的轻量级可互操作传播。
authnToken 的 server.xml 中配置 webTarget 元素来自动传播 JWT ,例如:<webTarget uri="http://microservice.example.ibm.com/protected/*" authnToken="mpjwt" />mapToUserRegistry=”true” 配置属性添加到 server.xml中的 <mpJwt> 元素。微服务中的数据一致性
- 处于暂挂状态的更新
- A 向 B 发送消息
- B 更新进入完整状态
- B 向 A 发送消息
- 进入完整状态的更新
何时使用微服务
在可以将应用程序解构为更小,隔离的服务的情况下,最好应用微服务。 微服务支持受控扩展,独立部署和更自主的开发。 微服务的体系结构可创建额外的复杂性,特殊性部署和数据一致性。 与在内存中调用相比, HTTP进行通信会产生更高的性能成本。 通过允许组件单独扩展,可以提高组件对故障的弹性。 在管理微服务架构时,监控解决方案对于帮助诊断不健康服务变得更为重要。