摘要
任何应用程序都不是孤立的。如今,开发人员正在采用集成式微服务和云原生的微服务架构。那么在目前的新应用架构中,微服务需要与多语言环境共存。在这个 Code Pattern 中,将学习如何部署一个Java 微服务,并借助服务发现、注册和路由等能力,来与其他多语言微服务并行。
概览
在多语言的世界中,微服务不能只依赖于语言原生框架来完成服务发现、路由和其他任务,它需要与其他多语言服务一起部署。本 Code Pattern 将展示如何在多语言生态系统内部署一个基于 Java 的微服务应用程序,该应用程序名为 “GameOn!”。
该应用程序是一个基于文本的复古冒险游戏,旨在帮助您探索微服务架构和相关概念。该应用程序在 Kubernetes 集群上运行,拥有两种类型的微服务:核心和平台。核心微服务是用 Java 编写的,它还调用了其他多语言服务来获得支持以完成业务。在这种模式下,微服务要么使用 sidecars 作为在同一个微服务容器内的进程,要么使用单独的容器 sidecars 来利用平台服务进行服务发现、注册和路由。所有这些微服务都在一个 Kubernetes 集群管理的 Docker 容器中运行。
流程
- 用户通过一个基于 HAProxy 的代理访问在 Kubernetes 上的 GameOn! 部署,该代理负责将 API 集合呈现为整个应用程序的单一方面。WebApp 是一个简单的 NGINX 进程,用于向客户端设备提供 Web 前端。
- 用户连接到 Player 微服务来玩游戏。该微服务提供了一个公共 API 来执行 CRUD 操作和管理 API 令牌。
- Player 微服务使用 Auth Java 微服务向选定的社交登录服务验证用户,并使用经过验证的玩家的个人资料和进度数据来响应客户端。
- 前端客户端需要建立一个与 Mediator 服务进行通信的 WebSocket,然后才能开始玩游戏。Mediator 服务是在 Java 中使用 WebSphere Liberty 实现的,并通过 WebSocket 将玩家连接到各个房间。
- 用户单击一个逐步解说样本中的一个按钮,创建一个新房间。
- 开发人员在房间实现中使用 Map 微服务,确保已使用最新的连接信息注册了该房间。Map 服务是一个在 WebSphere Liberty 上运行的 Java EE 应用程序,它使用 JAX-RS 提供一个公共 REST API。
- Map 服务查验 Player 服务,根据与开发人员相关的 API 令牌来确保允许开发人员更新房间的信息。
- 当用户导航到有效的房间服务时,Mediator 服务就会与该现场房间服务建立 WebSocket 连接。
操作说明
准备好使用这个 Code Pattern 了吗?有关如何开始运行和使用该应用的完整细节请参阅 README.md。
本文翻译自:Deploy Java microservices on Kubernetes with polyglot support(2018-09-03)