精品项目

  • 首页 精品项目 亚马逊 EC2 和 HashiCorp Consul 进行微服务发现 架构博客

亚马逊 EC2 和 HashiCorp Consul 进行微服务发现 架构博客

2026-01-27 12:21:14
8

微服务发现:使用 Amazon EC2 及 HashiCorp Consul

作者:Marine Haddad Tom Palmer Tony Phan 和 George Agiasoglou发布于 2023年6月30日类别:Amazon EC2 Amazon VPC Architecture AWS Systems Manager AWS Transit Gateway

分享链接

重点摘要

在当今大型组织中,微服务环境通常跨越多个云平台、内部数据中心和托管设施。由于系统复杂,需要高效的服务发现和配置管理机制以支持大规模的操作。本篇文章共享了为 Nomura 开发的解决方案,使用基于层级规则的算法构建服务发现机制,结合了 Amazon EC2 灵活性与第三方软件如 SpringBoot 和 Consul。文章详细介绍了如何实现服务的自动发现、连接及故障转移机制。

近年来,大型组织通常会拥有跨越多个云平台、内网数据中心及托管设施的微服务环境。造成这种现象的原因多种多样,通常包括延迟、当地支持结构和历史架构决策。然而,这些环境的复杂性使得必须实施高效的服务发现和配置管理机制,以支持大规模的运营。 Nomura 也面临着这一问题。

Nomura 是一家全球性的金融服务集团,网络覆盖超过30个国家和地区。通过连接东西方市场,Nomura 通过零售、投资管理和批发全球市场和投资银行三个业务部门,满足个人、机构、企业及政府的需求。其电子交易策略外汇部门隶属于全球市场,专注于电子外汇流动的所有定量分析和技术层面。该团队为客户构建了一系列创新解决方案,这些方案需在超低延迟的环境中运行以保持竞争力。其目标是构建高质量的工程平台,能够处理 Nomura 的 24 小时、每周 55 天的外汇业务的各个方面。

在本文中,我们将分享为 Nomura 开发的解决方案,以及如何利用层级规则算法构建服务发现机制。我们借助 Amazon Elastic Compute CloudAmazon EC2及第三方软件如 SpringBoot 和 Consul提供的灵活性,使得该算法支持服务名称的服务发现、域名系统DNS延迟及自定义标签等功能。通过自动发现与其他服务连接,客户能够借此实现自动化部署。基于提供的标签,客户可以实施环境边界,以防止服务连接到不应连接的其他服务。最后,我们构建了故障转移机制,以便在服务不可用时,能够按照指定标准提供备选服务。

阅读完本文后,您可以使用提供的资源在您的沙盒环境中部署该解决方案。文中附带的 Terraform 和 Java 代码可根据实际需求进行修改。

解决方案概述

该解决方案由分布在两个不同数据中心的微服务平台和每个数据中心的一个 Consul 集群组成。我们使用两个 Amazon Virtual Private CloudVPC来模拟地理分布式的 Consul “数据中心”。这些 VPC 通过 AWS Transit Gateway 连接。通过允许不同数据中心之间的通信,使得 Consul 集群形成广域网WAN,并能够看到部署在其中的服务实例。SpringBoot 微服务使用 Spring Cloud Consul 插件连接到 Consul 集群。我们构建了一个自定义配置提供程序,使用 Amazon EC2 实例元数据服务 检索配置。该配置提供机制具有高度扩展性,因此任何人都可以构建自己的配置提供程序。

该解决方案的主要组成部分包括:

使用 Java 和 SpringBoot 构建的示例微服务,部署在 Amazon EC2 上,每个 EC2 实例一个微服务实例每个区域一个 Consul 集群,每个 EC2 实例一个 Consul 代理一个自定义服务发现算法

图 1 多 VPC 基础设施架构

微服务的典型流程是:1/ 启动;2/ 从 EC2 元数据服务检索相关信息如标签;3/ 使用该信息向 Consul 注册自己。一旦服务向 Consul 注册成功,就可以发现可与之集成的服务,也可以被其他服务发现。

该服务发现机制的一个重要组成部分是使用自定义算法进行服务发现,这一算法根据在向 Consul 注册服务时创建的标签进行服务发现。

图 2 服务发现流程

图 2 展示的服务流程如下:

部署在实例上的 Consul 代理注册到本地的 Consul 集群,服务向其 Consul 代理注册。交易服务通过 API 调用查找可用的定价服务。Consul 代理返回可用的定价服务列表,以便交易服务可以调用定价服务。

部署步骤

以下是部署该解决方案所需的步骤:

使用 Terraform 配置基础设施。应用程序的 jar 文件及 Consul 配置将作为此过程的一部分进行部署。测试解决方案。清理 AWS 资源。

具体步骤在下一节中详细说明,代码可在此 GitHub 仓库 找到。

先决条件

安装 Git安装 Terraform安装 Packer安装 AWS CLI一个 AWS 帐号Consul 企业许可证 如果您没有企业许可证,可以联系 Hashicorp 支持团队 请求试用许可证。

部署过程

注意:此部署中使用的默认 AWS 区域为 apsoutheast1。如果您在不同的 AWS 区域工作,请确保更新这一设置。

克隆仓库

首先,克隆包含所有部署资产的仓库:

git clone https//githubcom/awssamples/geographicalhierarchicalservicelookupwithconsulonaws

构建 Amazon 机器映像 (AMIs)在 AWS 中构建 Consul 服务器 AMI

进入 /deployment/scripts/amis/consulserver/ 目录并运行以下命令以构建 AMI:

packer build

输出应类似于:

==gt Builds finished The artifacts of successful builds aregt amazonebsubuntu20ami AMIs were created apsoutheast1 ami12345678910

记下 AMI ID,这将在 Terraform 部署中使用。

在 AWS 中构建 Consul 客户端 AMI

进入 /deployment/scripts/amis/consulclient/ 目录并运行以下命令以构建 AMI:

packer build

输出应类似于:

==gt Builds finished The artifacts of successful builds aregt amazonebsubuntu20ami AMIs were createdapsoutheast1 ami12345678910

记下 AMI ID,这将在 Terraform 部署中使用。

准备部署

在应用 Terraform 配置前,还需完成以下几个步骤。

更新部署变量

在文本编辑器中,进入 /deployment/ 目录

编辑变量文件 templatevartfvarsjson,添加这些变量的值,包括前面构建的 Consul 服务器和客户端的 AMI IDs

注意:密钥对名称应输入时不带“ pem”后缀。

将应用程序文件 jar 放入根目录 /deployment/部署解决方案

要部署此解决方案,请从终端运行以下命令:

bashexport VARFILE=templatevartfvarsjson

terraform init ampamp terraform plan varfile=VARFILE out planout

terraform apply planout

验证部署

所有 EC2 实例均已部署好并具备 AWS Systems Manager 访问权限,因此您可以使用 AWS Systems Manager Session Manager 功能私密地连接到终端。

要连接到某个实例:

亚马逊 EC2 和 HashiCorp Consul 进行微服务发现 架构博客选择一个实例点击连接转到 Session Manager 选项卡

使用 Session Manager 连接到其中一台 Consul 服务器,并运行以下命令:

bashconsul members

一元云.cn

此命令显示与该集群连接的所有 Consul 服务器和客户端的列表。

bashconsul members wan

此命令显示所有连接到此 WAN 环境的 Consul 服务器的列表。

要查看 Consul 用户界面:

打开终端并运行:

bashaws ssm startsession target ltinstanceIDgt documentname AWSStartPortForwardingSession parameters {portNumber[8500]localPortNumber[8500]} region ltregiongt

其中,instanceID 是其中一台 Consul 服务器的 AWS 实例 ID,地区是 AWS 区域。

使用 系统管理器端口转发 功能,您可以通过浏览器私密地连接到实例。

打开浏览器并访问 http//localhost8500/ui在 AWS Secrets Manager 的 AWS 管理控制台 中找到管理令牌 ID使用管理令牌 ID 登录到 Consul UI测试解决方案

连接到交易实例并查询不同服务:

bashcurl http//localhost9090/v1/discover/service/pricercurl http//localhost9090/v1/discover/service/staticdata

该部署假设交易服务查询定价和静态数据服务,并根据优先级顺序返回服务见下表 1:

服务优先级客户集群位置环境TRADING1ACMEALPHADC1DEVPRICER1ACMEALPHADC1DEVPRICER2ACMEALPHADC2DEVPRICER3ACMEBETADC1DEVPRICER4ACMEBETADC2DEVPRICER5SHAREDALPHADC1DEVPRICER6SHAREDALPHADC2DEVSTATICDATA1SHAREDSHAREDDC1DEVSTATICDATA2SHAREDSHAREDDC2DEVSTATICDATA2SHAREDBETADC2DEVSTATICDATA2SHAREDGAMMADC2DEVSTATICDATA1STARKALPHADC1DEVSTATICDATA1ACMEBETADC2PROD

表 1 服务优先级顺序

为测试解决方案,您可以在 AWS 管理控制台中切换服务的开关,并重复交易查询,以观察流量的重定向情况。

清理工作

为了避免将来的费用,您可以在终端中删除 /deployment/ 中的解决方案:

bashterraform destroy varfile=VARFILE

结论

在本文中,我们概述了复杂的全球分布式微服务架构所面临的普遍挑战。展示了客户如何结合 Amazon EC2 服务与第三方软件如 SpringBoot 和 Consul构建层级服务发现机制,以支持这样的环境。您可以在沙盒环境中测试该解决方案,以查看其能否解决您当前的挑战。

附加资源:

实例元数据和用户数据Amazon VPC 到 Amazon VPC 的连接选项AWS Transit GatewayHashicorp ConsulConsul 企业许可证

Marine Haddad

Marine 是一家全球金融服务行业FSI原型设计和云工程PACE团队的全球解决方案架构师,专注于为客户构建原型,并加速迁移到云。她主要关注 Terraform 脚本编写和基础设施相关主题。

Tom Palmer

Tom Palmer 是 Nomura 外汇电子交易策略的全球负责人,领导一支位于伦敦和新加坡的量化分析师和技术专家团队,负责公司所有电子外汇流动。Tom 具有超过 20 年的技术从业经验,曾在媒体和金融服务公司担任角色,并拥有伦敦大学的计算机学位。

Tony Phan

Tony Phan 是 HashiCorp 的高级解决方案架构师。他与亚太地区和日本战略客户的产品与核心现场团队紧密合作,专注于推动新兴产品的采用,并讨论 Consul 和服务网格。Tony 目前居住在澳大利亚悉尼,业余时间喜欢与朋友和家人共度时光。

George Agiasoglou

George 是新加坡 PACE 团队的高级解决方案架构师。他帮助全球金融服务GFS客户在云迁移之旅中,解决各种阻碍问题,提供原型和概念验证POC服务,推动工作负载现代化和云迁移。

LotteON 如何利用 Amazon SageMaker 和 MLOps 构建个性化推荐系统 机器

LotteON 如何利用 Amazon SageMaker 和 MLOps 构建个性化推荐系统作者:SeungBum Shim、HyeKyung Yang、Jesam Kim、Jieun Lim 和 Gonsoo Moon,发表于 2024 年 5 月 16 日 在 [Amazon API Gate...



使用 Amazon API Gateway 私有集成进行规模架构 计算博客

使用 Amazon API Gateway 私有整合架构扩展规模重点摘要本文探讨如何利用 Amazon API Gateway 提升微服务的可扩展性并保持安全性。随著环境演变为多个微服务,组织需要确保 API 层能够灵活应对扩展需求。API Gateway 提供多种 API 类型和整合选项,本文重点...