我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
将 Spring Cloud 微服务应用程序迁移到亚马逊 EKS 的方法
在这篇博客中,我们将探讨企业如何将本地 Spring Cloud 微服务迁移到亚马逊 E
问题陈述
许多在本地数据中心构建微服务的企业都利用 Spring Cloud 库。Spring Cloud 为开发人员提供工具,帮助他们快速构建分布式系统中的一些常见模式(例如,配置管理、服务发现、断路器、智能路由、微代理、领导力选举)。分布式系统的协调导致锅炉板模式。使用 Spring Cloud,开发人员可以快速启动实现这些模式的服务和应用程序。它们在分布式环境中运行良好,包括开发人员的笔记本电脑和裸机数据中心。
企业本地部署的问题是需要管理配置服务器、服务注册表、Spring Cloud Gateway 服务和微服务应用程序。这占用了开发人员交付业务成果的宝贵时间,并减慢了发布速度。Spring Cloud Services 部署模型对您注册、发现和优化服务的资源利用率的方式存在限制。
解决方案概述
该解决方案将涵盖如何使用亚马逊 EKS 和其他 亚马逊云科技 服务在微服务应用程序中替换 Spring Cloud 模块功能。该架构将使用
基本的春季云架构
让我们来看一个虚构的宠物诊所应用程序,它由使用 Spring Cloud 的微服务组成。组件包括:
- 客户服务-列出并管理所有客户及其详细信息
- 兽医服务 — 列出和管理兽医
- 探视服务 — 管理客户与兽医一起探视宠物的情况
所有传入的用户流量都通过 Spring Cloud API 网关进行路由,用于请求路由、限制和安全执行。为了便于发现,微服务在由 Spring Cloud Netflix 实施的服务注册表中注册。使用由 Git 存储库支持的 Spring Cloud Config 服务器对微服务配置进行外部化。服务调用遥测数据生成并导入到 Zipkin 分布式日志服务中。所有微服务和跨领域服务都部署在数据中心的服务器上。
图 1:这是使用 Spring Cloud 构建的微服务示例。Spring Cloud Gateway 用作 API 网关,Spring Cloud Config 用于外部化配置,Zipkin 用于追踪服务,Spring Cloud Netflix 用于发现服务...
亚马逊 EKS 基础架构
为了让企业将微服务迁移到 亚马逊云科技 云,亚马逊云科技 提供的服务将为这一过程提供帮助。当应用程序迁移到 Amazon EKS 时,每个微服务都作为容器进行部署,在 Kubernetes 集群内的容器中运行。通过部署到亚马逊 EKS,亚马逊云科技 管理 Kubernetes 控制平面。传入流量通过负责 API 管理的亚马逊 API Gateway 进行路由。微服务在 Kubernetes 服务注册表中注册。微服务使用
图 2:示例应用程序部署在 Amazon EKS 上。Spring Cloud 组件已被 亚马逊云科技 服务所取代。
迁移到亚马逊 EKS 的好处:
亚马逊 EKS 是一项完全托管的 Kubernetes 服务,可消除安装、配置和管理 Kubernetes 平台的操作负担。好处包括:
- 配置管理和服务发现功能
- 自我修复和自动扩展功能
- 开箱即用支持多种编程语言
- 弹性和高可用性可以通过应用程序部署配置进行配置。
- 丰富的开放工具生态系统,可支持创新。
- Amazon EKS 应用程序可以部署到任何符合条件的 Kubernetes 平台,从而提供可移植性。
接下来,让我们回顾一下 亚马逊云科技 服务如何以及哪些服务提供 Spring Cloud 服务提供的功能。
比较矩阵:
Capability | Spring Cloud | 亚马逊云科技 |
API Management | Spring Cloud Gateway | Amazon API Gateway |
Externalize Configuration | Spring Config Server | 亚马逊 EKS 和
|
Service Registry and Discovery | Eureka | External DNS with
|
Circuit Breaker for Resiliency | Netflix | 亚马逊云科技 App Mesh |
Distributed Tracing | Sleuth | 亚马逊云科技 X-ray, Amazon OpenSearch Service |
API 管理:
Amazon API Gateway 是一项完全托管的服务,可让开发人员轻松创建、发布、维护、监控和保护任何规模的 API。API Gateway 支持容器化和无服务器工作负载以及 Web 应用程序。
通过 API Gateway 控制台,您可以定义 REST API 及其相关的资源和方法、管理 API 生命周期、生成客户端 SDK 以及查看 API 指标。您还可以使用 API Gateway 控制台来定义您的 API 使用计划、管理开发者 API 密钥以及配置限制和配额限制。所有相同的操作都可通过 API 网关 API 执行。
当前的 Spring 应用程序 API 被定义为 Swagger API 定义。你可以使用开源
API Gateway 将 API 调用、延迟和错误率记录到亚马逊 CloudWatch。这些指标也可以通过 API 网关控制台的 REST API 控制面板获得。API Gateway 可测量第三方开发人员的利用率;数据可在 API 网关控制台中通过 API 获得。您可以使用 CloudWatch 控制台来设置自定义警报。默认情况下,API 网关在 REST API 级别上监控流量。或者,您可以从部署配置 API 或控制台屏幕为 REST API 中的每种方法启用详细指标。详细指标也会记录到 CloudWatch,并按照 CloudWatch 费率收费。
外部化配置:
应用程序配置通过 API 密钥和数据库连接详细信息等名称/值对进行管理。应用程序通过 application.yaml 或源代码存储库中带有 Spring Cloud 配置服务的属性文件来引用配置。
Amazon EKS 提供了以配置
应用程序配置作为 YAML 文件定义和管理,位于所选源代码存储库中。出于安全性、合规性和审计目的,在将此配置应用于正在运行的集群之前,可以对其进行版本控制和审查。DevOps 实践是自动执行此过程以将最新配置应用于正在运行的集群的一种流行方式。Kubernetes 提供了一个命令行接口 (kubectl) 来连接集群。您可以使用以下命令应用配置:
kubectl 应用-f。
/sample-app-configmap.yaml
也可以使用现有的应用程序属性文件创建 ConfigMap。以下命令允许您从属性文件生成 ConfigMap:
kubectl 创建 configmap 示例应用程序配置环境文件\--from-env-file=configure-pod-container/configmap/sample-app-env-file.properties
从 Kubernetes v1.23 开始,kubectl 命令支持在使用多个数据源创建 ConfigMap 时多次指定 —from-env-file 参数。使用以下命令在一次执行中加载多个配置属性文件:
kubectl 创建 configmap 配置多环境文件\--from-env-file=configure-pod-container/configmap/sample-app-env-file.properties\--from-env-file.properties
Spring Cloud Kubernetes 库允许在对应用程序进行最少甚至不做任何更改的情况下加载配置。通过将 spring-cloud-starter-kubernetes-config 库添加到 pom.xml,可以从 ConfigMaps 和 Secrets 中加载配置。更改配置后,spring cloud Kubernetes 会重新加载更改后的配置。示例:
有关更多实现细节,请参阅
服务注册和发现:
微服务发现是作为服务发现实现的,其中使用别名定义微服务,并通过在服务注册表中查找它们来调用。Spring Cloud 通过提供服务注册服务来提供此功能。
通过配置 DNS 服务器,Amazon EKS 可以根据创建期间定义的服务名称来查找和调用服务。亚马逊 EKS 提供了使用 Route 53 或 亚马逊云科技 Cloud Map 配置外部 DNS 服务器的选项。更多详情请参阅在 AW
使用原生 Kubernetes 服务发现可确保与其他工具兼容,例如 亚马逊云科技 App Mesh。App Mesh 能够实现负载平衡、断路器、故障转移等。
然后,调用者服务只需要引用在特定 Kubernetes 集群中可解析的名称。一个简单的实现可能使用引用完全限定域名 (FQDN) 的 spring RestTemplate,例如 https://{service-name}。{命名空间} .svc。{集群} .local: {服务端口}。
用于弹性的断路器:
微服务具有支持服务,这些服务可以是数据库、消息服务或其他微服务。在调用后备服务以避免服务降级和级联故障时,通过断路器和重试实现提供弹性。
App Mesh 与 Amazon EKS 结合使用,允许开发人员在集群级别实现弹性。除了弹性之外,还有多个 App Mesh
App Mesh 支持断路器模式,以保护下游服务在部分或完全停机期间不被上游服务调用。App Mesh 提供
通过使用服务网格的连接池配置,您可以限制对应用程序端点的并发连接或请求的数量。您可以使用以下代码在虚拟网关上应用连接池设置:
异常值检测功能允许服务跟踪其每项上游服务中各个主机的运行状况。它将暂时停止将流量路由到出现严重错误的主机。
连接池配置和异常值检测相结合,可以限制应用程序中故障、延迟峰值和网络波动的影响。
重试机制提供了从暂时性问题中恢复的弹性。它有助于克服短暂的网络故障或服务器服务的短期中断。您可以添加使用基于 HTTP 错误代码的 App Mesh 重试服务间连接的功能。
分布式跟踪:
微服务需要能够捕获日志和指标,以提供对服务性能的可见性并查明瓶颈。
亚马逊云科技 X-Ray 提供应用程序跟踪功能,可以深入了解部署的所有微服务。可以通过配置 X-Ray 守护程序启用 X
或者,你可以继续利用 Spring Cloud Sleuth 或 Micrometer 追踪库从应用程序生成轨迹和跨度。
亚马逊 OpenSearch 服务用于执行日志分析和应用程序监控。你也可以使用
关键注意事项
微服务架构需要能够实现双向 TLS 并自动生成、轮换和续订证书。
出于安全考虑,应在安全的保管库中管理带有后备服务访问密钥和密码的微服务。亚马逊云科技 Secrets Manager 集中管理所有密钥的生命周期,可以轻松地与部署到 Amazon EKS 集群的应用程序集成。某些企业应用程序的关键要求是定期轮换密钥以符合监管要求。Secrets Manger 根据定义的策略自动轮换密钥。
对于部署到 Amazon EKS 的 Spring Boot 应用程序,应将应用程序容器化以管理容器依赖关系的生命周期。
App2Container 按照 亚马逊云科技 最佳实践为容器化应用程序生成 Kubernetes 资源文件。亚马逊云科技 A2C 为
结论
将微服务从 Spring Cloud 迁移到亚马逊 EKS 可以消除管理 Kubernetes 的运营负担,同时允许您利用 Kubernetes 丰富的开源工具。与 亚马逊云科技 App Mesh 集成有利于分阶段管理迁移。亚马逊云科技 X-Ray 可帮助您跟踪用户请求并识别瓶颈,从而提高应用程序性能。所有这些服务加在一起使开发人员有时间专注于提供业务功能,这反过来又提高了发布速度。
资源:
浏览
作者简介:
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。