使用 MicroProfile 开发微服务
Eclipse MicroProfile 定义了在 Enterprise Java™ 环境中开发微服务应用程序的编程模型。 它是 Eclipse 基金会下的一个开源项目,旨在将微服务引入企业 Java 社区。 MicroProfile 得到了自由的支持。
MicroProfile 定义了一系列规范,用于构建弹性、安全和易于监控的微服务。 更多信息,请参阅 MicroProfile Liberty 功能。
限制
- CDI 在 MicroProfile API 中得到广泛应用,但在打包到企业捆绑存档(EBA)中的 OSGi 网络应用程序中,Liberty 不支持 CDI。 相反,将使用 MicroProfile 的应用程序打包到网络应用程序存档(WAR)或企业应用程序存档(EAR)中。
- MicroProfile 容错 旨在管理对其他服务的调用。 1.0 它并非旨在管理事务上下文中资源的更新。 CICS® 不应在注释为,,, 或 的方法中更新资源。
@Bulkhead@CircuitBreaker@Fallback@Timeout@RetryCICS 即使使用了 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 提供了一种使用基于开放 ID 连接(OIDC)的 JSON Web 标记(JWT)的方法,用于微服务端点的基于角色的访问控制(RBAC)。 安全性令牌提供用户身份在不同服务之间的轻量级可互操作传播。
webTarget 元素,例如配置 authnToken 来自动传播 JWT:<webTarget uri="http://microservice.example.ibm.com/protected/*" authnToken="mpjwt" />mapToUserRegistry=”true” 配置属性添加到 server.xml中的 <mpJwt> 元素。微服务中的数据一致性
- 处于暂挂状态的更新
- A 向 B 发送消息
- B 更新进入完整状态
- B 向 A 发送消息
- 进入完整状态的更新
何时使用微服务
在可以将应用程序解构为更小,隔离的服务的情况下,最好应用微服务。 微服务支持受控扩展,独立部署和更自主的开发。 微服务的架构会产生额外的复杂性,尤其是在部署和数据一致性方面。 与在内存中调用相比, HTTP进行通信需要更高的性能成本。 通过允许组件单独扩展,可以提高组件对故障的弹性。 在管理微服务架构时,监控解决方案对于帮助诊断不健康服务变得更为重要。