Sermant标签路由能力在同城双活场景的应用

news2024/12/23 19:04:50

作者:聂子雄 华为云高级软件工程师

摘要:目前应用上云已成为趋势,用户也对应用在云上的高可靠方案有更高追求,目前同城双活场景作为应用高可靠方案中的一种常见实践方案,对微服务流量提出了数据中心亲和性的要求,目前通过Sermant的标签路由能力可以实现此要求并能快速助力同城双活方案的落地。

1.  背景

1.1 应用高可靠方案的演进

目前,应用上云已经成为了一种趋势,在这个过程中,用户对于云能够提供的高可靠能力要求也越来越高,目前云上的应用高可靠方案的演进可以分为以下几个阶段:

  1. 同城灾备:同城灾备是指生产中心和灾备中心位于同一个城市。当生产中心发生灾难时,可以将业务迅速切换到灾备中心。数据同步是同城灾备方案的核心,备用数据中心必须同步主数据中心的数据,以确保在主数据中心发生灾害或故障时,备用数据中心可以快速接管业务。

   2. 同城双活:同城双活是指同城内两个数据中心都部署了相同业务,访问流量会按照一定比例分发往两个数据中心,当其中任意一个数据中心出现故障,另外一个数据中心仍然能够正常对外提供服务。

3. 两地三中心:两地三中心的容灾方案其实是同时结合了前两者方案的优点,也即同城双活+异地灾备。同城两个数据中心业务保持双活部署,异地一般以冷备的方式部署并同步主数据中心的数据。

4. 异地多活:异地多活实际上采用的是单元化容灾方案,单元化容灾方案是一种将系统分为多个单元,每个单元都可以独立运行和故障恢复的容灾方案。它可以提高系统的可用性和可靠性,减少系统故障对整个系统的影响。

可以观察到整个应用高可用方案演进的过程中,方案提供的可靠性是逐步提升的,但是相应的成本也会相对升高,因此不同的方案有其适用的场景,其中同城双活和两地三中心方案在可靠性以及成本两方面做到了相对均衡的程度,也是目前国内尤其是金融行业采用较多的方案。同时,两地三中心的容灾方案实际上更多是同城双活以及异地灾备方案的组合形态,因此本文将重点探讨同城双活的场景以及Sermant在这个场景中扮演的角色。

1.2 同城双活对微服务流量的要求

在同城双活场景下,业务应用会按照相同的方式部署在同城的两个数据中心,从接入层进来的访问流量会以一定比例的方式分别流水到两个数据中心的业务应用集群,具体比例的大小是根据两个数据中心规划的集群资源来评估的。此外,同城两个数据中心之间的访问时延一般会明显高于数据中心内部的访问时延。

正常情况下,虽然两个数据中心都部署了相同的微服务应用,但为了降低访问时延以及方便流量管理的需要,方案会要求每个数据中心的微服务应用之间的访问流量全都要在本数据中心闭环,不能随意进行跨数据中心的调用。

故障场景下,例如某个数据中心的部分微服务实例出现了故障,这时候微服务的流量允许进行跨数据中心自动容灾切换,流量可以自动流入可以正常对外提供的微服务应用实例上,以保持应用对外服务的连续性。

因此微服务流量在同城双活的场景下需要具有数据中心亲和性,保障流量优先在数据中心闭环同时在面对故障时也能自动切换。

2. 基于标签路由实现微服务流量的数据中心亲和方案

2.1 整体方案介绍

针对同城双活容灾场景对微服务流量的要求,基于Sermant的标签路由插件以及华为云CSE注册配置中心,我们给出了如下的解决方案:

DC1与DC2两个数据中心分别部署一套应用集群以及CSE注册配置中心,每个数据中心的微服务应用实例在启动时提前挂载好Sermant agent,由Sermant agent代替应用实例向所在数据中心的CSE注册配置中心注册微服务实例信息。此外,两边的注册配置中心会进行数据的双向同步,保证DC1和DC2中的微服务应用能够相互发现。

正常情况下,如下图所示,流量以一定的比例分别经过网关留到了对应数据中心的业务集群,在业务集群内部,请求都是由每个微服务实例上面挂载的Sermant Agent进行接收与转发,Sermant Agent控制着所在业务集群的流量都在内部流动,跨数据中心的微服务访问会被发起者实例上面的Sermant Agent所禁止。

故障情况下,若某个数据中心的部分微服务实例存在异常的情况,Sermant agent会自动完成流量切换到另一个数据中心的正常实例上。如下图所示,例如DC1中的ServiceB实例出现故障,此时DC1中ServiceA的流量会经过Sermant agent自动切换到DC2的ServiceB'实例上,随后流量又会经过Sermant agent转发到DC1的正常的ServiceC实例上。

当然,还有另外一种故障场景,就是存在一整个数据中心都不可用,这时候其只需要把这种场景当成是单个数据中心对外服务的情况即可,正常数据中心的流量仍然在所在数据中心闭环,异常数据中心的流量可以通过自动或者手动的方式将流量全部切到正常的数据中心上。

2.2 Sermant的标签路由插件在方案中的具体机制

在整个方案中,可以看到Sermant在其中扮演着非常重要的角色,微服务实例的流量接收以及转发全都由Sermant agent来控制,在Sermant agent上,有着一个非常重要的插件——标签路由插件,通过在插件上定义相应的路由策略,Sermant agent即可让微服务实例的流量具备数据中心亲和的能力。

使用者可以在每个微服务实例启动的时候手动或者通过流水线自动给微服务实例打上和数据中心有关的标签,因此每个微服务实例在运行的时候会自动带有数据中心的属性。这时候标签路由插件可以通过服务提供者配置路由规则,将带有DC1属性的微服务提供者实例划分为一组,将带有DC2属性的微服务提供者实例划分为另外一组,约束流量只能在指定分组中流转,下图是标签路由插件工作的示意图:

路由插件会根据配置中心下发的动态路由规则去匹配入口流量,若标签符合规则要求,则顺利通过进行后续处理,否则由fallback路由规则进行流量的处理。

2.3 如何接入部署Sermant

Sermant 是基于Java字节码增强技术的云原生无代理服务网格,通过 JavaAgent 对宿主应用进行非侵入式增强,因此在使用的时候无需额外启动进程来运行Sermant agent,只需要在启动应用实例时加入agent的挂载命令即可。标签路由插件需要在Sermant agent中配置服务元数据(版本号、其它元数据),可参考Sermant-agent使用手册。微服务实例的标签信息在服务注册时会携带,路由筛选过程需利用已经配置好的标签。在同城高可用的情况下,标签里面需要携带数据中心的信息。

可以看到Semant agent存在以下特点:

  1. 非侵入性,无需修改业务代码即可使用。
  2. 适配主流的应用开发框架。
  3. 路由规则可以动态调整,只需要通过配置中心统一下发规则即可。

3. 总结

目前,随着应用上云的趋势,业务人员对于故障的认知发生了变化,从被动响应到主动引入故障,到认为故障就是常态,系统架构需要适应故障,因此对云上的业务高可用方案要求也随之提升,同城双活方案是目前用户采用比较多的容灾方案。在这个方案中,也对微服务应用之间的访问流量提出了相应要求,为了保证业务的就近访问能力,微服务之间的流量需要能做到优先本中心访问,对于故障情况也要求能做到流量自动切换到正常实例上。为了解决这个问题,考虑到Sermant非侵入,易部署以及多场景兼容等特点,华为云基于Sermant的标签路由能力实现了微服务流量的数据中心亲和性,助力同城双活方案的实际落地。


Sermant作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。

  • Sermant 官网:https://sermant.io
  • GitHub 仓库地址:GitHub - sermant-io/Sermant: A Cloud-Native Proxyless Service Mesh based on Java Bytecode Enhancement Technology
  • 扫码加入Sermant 社区交流群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1831784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java_JDK下载与环境变量配置

目录 一、JDK下载安装 二、安装后配置环境变量 三、在编辑器里使用JDK 一、JDK下载安装 JDK 是Java开发工具包,它提供了用于开发和运行Java程序所需的工具和库。JDK包括Java编译器、Java虚拟机、Java标准库等。在IDEA中使用Java语言编写代码时,需要安…

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

前言 第一次使用海康视觉算法平台VisionMaster 4.3.0,项目中要使用这个平台进行视觉处理并获取结果。 运行效果 开发环境 C#, WPF, vs2022, 海康视觉算法平台VisionMaster 4.3.0 基本概念 上图这些.sol为后缀的是vm的方案文件。 打开方案文…

[element-ui]el-select多选选择器选中其中一个选项,不可删除

背景: 产品真的很多奇奇怪怪的需求,一边吐槽一边实现。 前提:选择器作为表格的筛选项,提供三个选项值。 要求:默认选中其中一个值,这个值不可删除。 如图: 小声吐槽:搞这些有什么…

LSS算法核心原理详细解读,一看就懂,不懂请打我!

目录 核心整体流程分步阐述backbone几何关系(创建视锥)和视锥投影到egoVoxel PoolingHead 总结 核心 将2D图像特征转换到BEV feature特征 该算法是BEV领域中的一大基石 整体流程 流程步骤 (1)利用backbone获得环视图像&#xf…

Vue路由讲解-05

这里的路由并不是指我们平时所说的硬件路由器,这里的路由就是SPA(single page application单页应用)的路径管理器。再通俗的说,vue-router就是WebApp的链接路径管理系统。 vue-router是Vue.js官方的路由插件,它和vue.j…

Vue48-ref属性

一、需求:操作DOM元素 1-1、使用原生的id属性 不太好! 1-2、使用 ref属性 原生HTML中,用id属性给元素打标识,vue里面用ref属性。 给哪个元素加了ref属性,vc实例对象就收集哪个元素!!&#xff0…

开放式耳机怎么挑选,个人经验总结快来看!

在选择开放式耳机时,了解一些关键的选购因素和推荐的品牌款式是非常有帮助的。这类耳机允许声音在耳机和外界之间自然流动,提供更自然的听觉体验。它们通常不会完全隔绝外界噪音,适合需要随时留意周围环境的人群,如运动爱好者或需…

AutoMQ 生态集成 CubeFS

CubeFS [1] 是新一代云原生存储产品,目前是云原生计算基金会 CNCF托管的孵化阶段开源项目, 兼容 S3、POSIX、HDFS 等多种访问协议,支持多副本与纠删码两种存储引擎,为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性&#x…

安徽保安员精选模拟试题(含答案)

1、风险管理的三要素是(),风险评价和风险控制。 A、频率分析 B、风险分析 C、风险转移 D、后果估计 答案:B 2、治安保卫重要部位是指由()确定的、关系本单位生产业务全局的部位和生产环节。 A、企事业重点单位 B、地方政府 C、企事业单位保卫协会 D、公安机关 …

垂直领域大模型微调最全指南

1.概述 一年来多以来,大语言模型发展和变化越来越快,总体呈现出模型尺寸越变越大,算力需求越来越多,模型推理要求越来越高的特点。在这种背景下,现在不同的人关于垂域 LLM 出现了一些争议,一部分人认为随着…

2024.618到底买什么数码值得?带你一起来看看!

在618期间,这些新品可能会有特别的优惠活动,包括但不限于折扣、满减、赠品等。因此,如果你正在寻找一款适合自己的数码产品,不妨关注各大电商平台的618促销活动,把握机会,以优惠的价格购买到心仪的产品。 …

Windows采用txt和bat来一次性建立多个文件夹

前言 最近工作需要一次性建立多个文件夹,方便保存不同的数据,所以在网上搜了搜方法,方法还挺多的,这里只是给出流程最简洁、最适合自己的方法,供自己日后回顾,如果大家想学习更多方法可以百度一下。 方法…

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本…

ES中下载ik解决版本不一致问题

1.链接: https://github.com/infinilabs/analysis-ik/releases/tag/v7.17.7 2.我的ES版本是7.17.9 但是Ik没有7.19,只有7.17 3.下载之后创建ik,然后把下载的导入进去: 4.因为版本不一致 我们修改 把所有的7.17.7改为7.17.9然…

详解 HBase 的架构和基本原理

一、基本架构 StoreFile:保存实际数据的物理文件,StoreFile 以 HFile 的格式 (KV) 存储在 HDFS 上。每个 Store 会有一个或多个 StoreFile(HFile),数据在每个 StoreFile 中都是有序的MemStore:写缓存&#…

C#开发-集合使用和技巧(五)集合中的转换方法

在C#中&#xff0c;Select, ToList, 和 ToArray 都是用于集合转换的方法&#xff0c;它们各自有不同的用途和适用场景。 测试数据 /// <summary>/// 设备类/// </summary>class Device{/// <summary>/// Id/// </summary>public int Id { get; set; }…

Scala入门【安装与使用、变量与数据类型、运算符、函数、条件判断、循环、字符串、面向对象、数组】

视频地址:Scala大专/本科专用课程_哔哩哔哩_bilibili 目录 P01【01Scala安装与使用】16:15 P02【02变量与数据类型】17:14 P03【03运算符】12:41 P04【04函数】16:40 P05【05条件判断】10:56 P06【06循环】13:33 P07【07字符串】19:09 P08【08面向对象】17:27 P09【0…

C语言王国——数组的旋转(轮转数组)三种解法

目录 一、题目 二、分析 2.1 暴力求解法 2.2 找规律 2.3 追求时间效率&#xff0c;以空间换时间 三、结论 一、题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出…

北京职场社交app开发,“职”在必行

工作一直是人们日常生活中占比较大的一部分&#xff0c;在做好本职工作的同时&#xff0c;职场社交也同样重要。目前&#xff0c;北京职场社交app不仅帮助求职者寻求工作&#xff0c;而且为工作者提供了获取信息与机遇的平台。 一&#xff0e; 北京职场社交app面向的用户群体 …

win10 修改远程桌面端口,win10 修改远程桌面端口详细步骤

在Windows 10中修改远程桌面端口是一个涉及系统配置和网络安全的任务&#xff0c;需要谨慎操作以确保系统的稳定性和安全性。 以下是详细的步骤内容&#xff0c;供您参考&#xff1a; 一、通过注册表编辑器修改远程桌面端口 1. 打开注册表编辑器&#xff1a; - 首先&#…