云原生最佳实践系列2:基于 MSE 云原生网关同城多活

2024-03-20 18:28

本文主要是介绍云原生最佳实践系列2:基于 MSE 云原生网关同城多活,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方案概述

分布在同城多个机房内的应用同时对外提供服务。同城机房物理距离较小,一般小于 50 公里。同城多活架构的难点有三个:

  • 当某机房出现故障,能不能做到机房级的快速切换?
  • 如何实现非对等部署下的全局的流量负载均衡?
  • 对流量的精细化管控?

常见的同城多活实现方式(如下图),在这个架构里。DNS 本身存在缓存,DNS 的域名是映射到机房的网关 IP,网关又是每个机房一个局部的。很难做到机房级故障的秒级自动转移和非对等状态下的全局负载均衡。如果两个机房的微服务应用如果共用一套注册中心,就没办法保证微服务调用单元内闭环。

图片

应用场景

借助云原生微服务引擎 MSE 产品,配置注册中心的同城容灾多活微服务应用。提供一个经典微服务场景在云上实现同城容灾的步骤,通过云原生相关产品在用户应用上云时解决高可用,同城容灾,多活等需求。主要步骤:

  1. 通过 CADT 快速完成应用环境部署;

  2. 同城双 MSE 注册中心接入;

  3. MSE 网关接入。

方案适合场景和优势

  • MSE 云原生网关

    云原生网关默认双可用区部署,既使一个可用区的节点都挂了,另一个可用区的节点依旧可以正常工作。

  • MSE 注册中心

    MSE 注册中心默认三可用区部署,即使两个可用区的节点都挂了依然不会影响业务。

  • 机房级故障的秒级自动转移

    云原生网关对于关联服务的每个节点都建立了主动健康检查的机制,默认是 2 秒(也可以自己调整)。主动健康检查发现节点不健康,则会自动剔除,健康检查除了 TCP 的端口探测外,也支持 HTTP 的探测,通过健康检查机制,可以实现机房级故障的秒级自动转移。

  • 非对等部署状态下的全局流量负载均衡

    云原生网关会把两个集群的同名服务进行合并,然后在合并后的节点数量的基础上实现多种负载均衡策略,通过这种方式可以很好的实现两个机房在非对等部署状态下的负载均衡,例如:两个机房的同应用各部署了 5 个节点,这个时候云原生网关会把两个机房的同名服务的节点进行合并,变成 10 个。然后云原生网关在这 10 个中实现轮询等负载均衡策略,假设机房 1 的节点挂了 4 个,还剩一个。那这时分配给机房 1 的流量会自动的从 50% 降到 10%,分配给机房 2 的流量会自动的从 50% 提升到 90%。

  • 流量的精细化管控

    每个集群一套注册中心,应用启动的时候只像本可用区的注册中心注册。这样可以保证微服务调用在可用区内闭环。微服务调用可用区闭环以后,可以配合云原生网关的多种流量路由能力实现蓝绿和灰度等发布策略。

部署架构

图片

架构说明

2 个 MSE 注册配置中心, 2 个 ACK 集群,1 个高可用 MSE 云原生网关。

  • 每个可用区的微服务只注册到本 AZ 的 MSE 注册配置中心,实现闭环调用。
  • 两个 AZ 共享 1 个 NAT 网关,用于容器节点拉取镜像。

产品介绍

专有网络 VPC(Virtual Private Cloud): 是用户基于阿里云创建的自定义私有网络, 不同的专有网络之间二层逻辑隔离,用户可以在自己创建的专有网络内创建和管理云产品实例,比如 ECS、负载均衡、RDS 等。

容器服务 Kubernetes 版 ACK: 容器服务 Kubernetes 版(简称 ACK)提供高性能且可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。在 2021 年,ACK 成为国内唯一连续三年入选 Gartner 公共云容器报告的产品,同时在 2022 年成为国内唯一进入 Forrester 领导者象限的产品。ACK 整合了阿里云的虚拟化、存储、网络和安全能力,助力企业高效运行云端 Kubernetes 容器化应用。

微服务引擎 MSE: 微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持 Higress/Nginx/Envoy,遵循 Ingress 标准)、微服务治理和分布式任务调度能力(兼容开源 XXL-JOB/ElasticJob/K8s Job/Spring Schedule)。

云速搭 CADT(Cloud Architect Design Tools): 是一款为上云应用提供自助式云架构管理的产品,显著地降低应用云上管理的难度和时间成本。本产品提供丰富的预制应用架构模板,同时也支持自助拖拽方式定义应用云上架构;支持较多阿里云服务的配置和管理。用户可以方便的对云上架构方案的成本、部署、运维、回收进行全生命周期的管理。

NAT 网关: 阿里云 NAT 网关(NAT Gateway,简称 NAT)提供公网 NAT 和私网 NAT 两种功能。公网 NAT 网关通过自定义 SNAT、DNAT 规则可为云上服务器提供对外公网服务、及主动访问公网能力;私网 NAT 网关(也即 VPC NAT 网关)可使 VPC 内的 ECS 实例通过私网地址转换服务,实现 VPC 与 VPC 之间、及 VPC 与线下 IDC 互访能力。

弹性公网 IP: 弹性公网 IP 是独立的公网 IP 资源,可与阿里云专有网络 VPC 类型的云服务器 ECS、NAT 网关、ENI 网卡、私网负载均衡 SLB 绑定,并可以动态解绑满足灵活管理的要求。弹性公网 IP 可为您在云上部署的网站提供 Internet 访问服务。

前置条件

在进行本文操作之前,您需要完成以下准备工作:

1)注册阿里云账号,并完成实名认证。您可以登录阿里云控制台,并前往实名认证页面 (https://account.console.aliyun.com/v2/#/authc/home) 查看是否完成实名认证。

2)购买按量付费资源,阿里云账户余额需要大于 100 元。考虑到部署后每小时会产生费用,建议账号内余额或者代金卷金额大于 200 元。您可以登录阿里云控制台,前往账户总览页面 (https://usercenter2.aliyun.com/home) 查看账户余额。

操作步骤

  1. 基础环境搭建

  2. 在 ACK 集群中部署 Demo 应用

    2.1. 打开部署好的应用2.2. 获取 J 和 K 区 MSE 注册中心地址

  3. 配置 MSE 网关及路由

    3.1. 配置 MSE 网关

  4. 多活场景验证

    4.1. 通过云原生网关进行路由调试

    4.2. 多活验证

    4.3. 切流验证

    4.4. PTS 压测验证(可选)

  5. 一键释放资源

最佳实践全部内容,请点击此处查看。对方案和产品感兴趣的朋友,可以加入钉钉群交流(群号:31852400)。

往期文章:

云原生最佳实践系列 1:借助云速搭 CADT 如何实现 Kafka 的性能压测?

这篇关于云原生最佳实践系列2:基于 MSE 云原生网关同城多活的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830361

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J