Kubernetes,Istio和Java MicroProfile微服务云原生案例 - heidloff


在过去的几周里,我参与了一个新的示例应用程序,该应用程序演示了如何构建基于微服务的架构。虽然还有一些我想补充的小问题,但我认为这个样本现在非常全面,对于开发人员,特别是Java EE开发人员来说,学习微服务和云原生模式是一个很好的选择。
该示例可用作开源。GitHub repo被称为cloud-native-starter

Kubernetes,Istio和Java
在构建云原生应用程序时,开发人员面临着如何解决流量路由,弹性,分布式监控,服务发现等主题的挑战。幸运的是,大多数这些新挑战都是由业务流程平台Kubernetes和服务网络Istio处理的。此功能通常适用于微服务,无论它们是在何种语言中实现,都不会更改应用程序逻辑。
但是,编排平台和服务网格无法涵盖某些功能。相反,它必须在微服务的业务逻辑中处理,例如特定于应用程序的故障转移功能,指标和细粒度授权。
Java开发人员可以利用Eclipse MicroProfile来实现此功能。MicroProfile是Java EE(企业版)的扩展,用于构建基于微服务的体系结构,并补充了Kubernetes和Istio功能。除了Kubernetes和Istio无法处理的特定于应用程序的逻辑之外,它还具有开发微服务时通常需要的便利功能,例如调用REST API的机制和实现REST API(包括其文档)的功能。

设计原则
示例应用程序遵循以下设计原则:

  • 尽可能地利用平台 - 在语言特定的框架中尽可能少地做
  • 仅将开源组件用于应用程序的核心服务
  • 让第一次体验尽可能简单
  • 能够在不同的环境中运行应用程序

让我更详细地解释一下设计原则。

1. 尽可能地利用平台 - 在语言特定的框架中尽可能少地做
使用Kubernetes和Istio处理流量管理等功能的优点是,这些功能与语言无关。云原生应用程序可以并且通常是多语言。这允许开发人员为特定任务选择最佳语言。

2. 仅将开源组件用于应用程序的核心服务
在我担任开发人员的角色中,我与许多开发人员交谈。几乎每个人都喜欢开源。为了面向尽可能多地开发人员,示例仅在应用程序的核心服务使用开源项目。例如Java堆栈利用OpenJ9,OpenJDK的AdoptOpenJDKOpenLibertyMicroProfile

3.让第一次体验尽可能简单
有许多样本,代码段,文章和教程可用于各种云原生功能,其中许多非常好。但是,我在一个应用程序中一起运行其中一些功能时遇到了问题。有时他们使用不同的Java堆栈,有时使用不同的版本,有时文章已经过时。
示例应用程序显示了多个功能协同工作,详细信息请参见下文。还有一些脚本可以非常轻松地部署服务,基本上每个服务都有一个脚本,类似于Cloud Foundry应用程序的“cf push”体验。

4. 能够在不同的环境中运行应用程序
幸运的是,这是Kubernetes的主要优势之一,因为您可以运行本地,混合或公共云基础架构的工作负载。该repo具有如何将应用程序部署到Minikube和托管IBM Cloud Kubernetes服务的说明

样本申请的功能
该项目演示了以下功能: