阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

2023-10-29

开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立,目前合资股东分别为大众汽车(中国)投资有限公司、中国第一汽车股份有限公司、一汽-大众汽车有限公司[增资扩股将在取得适当监督(包括反垄断)审批后完成]、万帮数字能源股份有限公司和安徽江淮汽车集团控股有限公司,总部位于江苏常州。开迈斯集车企与充电企业优势于一体,提供从充电基础设施的研发制造到软件的智能互联,从私人充电用户到半公共、公共以及商务用户,从电力供应的行业源头到服务平台的终端体验,实现每一个业态的前后端无缝连接。

开迈斯为中国新生代消费者而来,不仅注重私家电动车主的充电体验,还以高端的品质服务提供用户便捷无忧、智能高效的全新充电体验,开启乐享生活的旅程。同时,开迈斯致力于为电动出行提供全场景充电服务,依托强大的研发实力、先进的核心技术和高质量服务,还收获了国内新能源汽车充电领域的诸多奖项:2021 年,开迈斯荣膺“中国充电桩行业最佳运营服务创新奖”;2023 年 3 月,开迈斯一举获得“高质量充电五星级场站奖“,成为首批获得五星级评价的优秀充电运营商(五星级别是最高级别最高标准的场站);同年 6 月,开迈斯荣获 2023 中国充换电行业十大影响力运营商品牌奖。开迈斯将持续推动充电网络建设速度和充电用户旅程的优化创新,并将聚焦高功率充电设备研发和新能源服务领域的探索,从而推动新能源与新能源汽车深度融合的绿色发展。

业务稳定性挑战大

2023 年,开迈斯将继续致力于以用户为中心的整合创新,助力智能电动化出行。截止今年7月底,开迈斯充电网络覆盖国内 192 城,建设 1,274 座充电站和 11,113 个充电终端,积累用户超 241 万。从建设滞后到“适度超前”,未来三年充电桩产业将迎来大发展,市场规模达千亿级。现在全国各地很多城市在对充电桩的增设和利用上在不断升级加码,随着新能源汽车的发展,充电用户群体的诉求飞速增长,开迈斯伴随着业务的快速增长,对其架构的稳定性以及可用性也提出了前所未有的挑战。

开迈斯采用传统的 SpringBoot 方式进行应用开发,应用间通过 Http 请求方式进行互通互联,也正是 SpringBoot 架构的简单性,有效帮助到开迈斯的业务以及微服务数量进行快速扩张。但是随着微服务规模的增大,逐渐发现应用在发布、运行等各个阶段的都存在一些稳定性与效率上的问题。开迈斯架构同学也意识到需要引入微服务治理能力对当前的微服务进行恰当的治理,从而进一步提升业务的稳定性。 同样的,业务依旧面临快速发展的诉求,如果将原先的 SpringBoot 框架升级成 Spring Cloud 并且引入各种高阶的服务治理能力,对于开迈斯研发同学来说,成本过于太大。

升级架构不改代码

是否有一种不用改代码的方式实现我们微服务的治理能力呢?比如通过实施全链路灰度发布来避免变更带来的稳定性风险;通过限流降级能力保障运行态的稳定性,解决不确定的流量带来的稳定性风险;通过鉴权能力解决微服务间调用的安全风险。这就好比,我们如何可以在飞机高速运行的过程中,通过更换引擎来提升飞机的性能?更关键的是,对于我们飞机上的乘客来说,还要是无感的。

我们将问题进一步抽象,如何可以不改代码,实现任意 Java 应用的服务治理能力,并且在这个过程中我们需要确保稳定性、问题诊断效率、架构的可持续性、性能等一系列现实的因素。

技术的探索总是为业务服务的,我们围绕着开迈斯的方案进行了一步讨论,是否可以通过 ServiceMesh 的方案解决用户无侵入服务治理的难题。

  1. 主流的分布式 Sidecar 模式在近几年受到了大家的青睐,但是在使用过程中也有问题逐渐暴露了出来,Sidecar 模式在内存消耗上比较可控,最多也是在 MB 这个量级,但是在 CPU 利用率上,随着业务吞吐量的增长,Sidecar 的 CPU 消耗基本达到了与业务消耗持平的量级,相当于在使用 Sidecar 之后,相同业务规模需要两倍的集群数来承载。总的来看,业内也逐渐意识到了这个问题,逐渐演进出了其他方案,通过集中化的方式实现无侵入的流量路由。
    1. 另一方面,引入 Envoy Sidecar 对于开迈斯来说则增加了不必要的运维成本、问题诊断的效率也大幅度上升,同时引入 ServiceMesh 的技术复杂度对业务的研发同学来说也是非常高的门槛。
  2. 既然 ServiceMesh 方案对用户来说门槛比较高,那么是否可以通过 Higress 实现服务间调用的治理诉求? 只需透出网关的操作界面即可,基于托管的 Higress 给无侵入的服务治理提供了一种新的思路,在满足用户服务治理治理需求的同时,相比Sidecar 在资源利用率、运维复杂度、性能和时延等方面具有优势。

图片

如何实现服务间的流量转发与治理

既然思路敲定了,大家评估完了稳定性、安全与成本之后,那么就快速开始方案的实践与探索了。我们首先面临的问题是原先通过域名调用 K8s Service 的方式,我们如何将流量转发至 Higress 并且通过 Higress 再转发给真实对应的 Pod 呢?并且在这个过程中我们需要考虑方案的稳定性。

  • 直接想到的方式就是修改 K8s 中的 Service 跟 Endpoints 配置,利用 coreDNS 能力将流量转发至 Higress。
apiVersion: v1
kind: Service
metadata:
 name: provider
spec:
  type: ClusterIP
  clusterIP: None
---
apiVersion: v1
kind: Endpoints
metadata:
  name: provider
spec:
  subsetS:
    ip: ${higress-slb}
    port: 80
  • 出于商业化稳定性的考虑 CoreDNS,可以使用同类型产品 privatelinkZone DNS 进行替代,同时可以配置 CNAME 类型的 DNS 记录批量将服务间访问的域名 *.camsnet.com 切换至云原生网关上。

到目前为止我们完成了 Order 的流量被先转发至内部网关 Higress 上,接下来我们需要配置 Higress 路由规则,将流量转发至真实的目标服务中。

图片

  • 我们在 MSE 云原生网关(Higress 商业版)中同步容器服务的 Service 至网关,并且配置对应的路由规则,实现流量转发。

流量经过 MSE 云原生网关转发之后,我们就可以做更多的治理能力了

  • 这个过程中我们直接可以配置标签路由实现灰度发布的能力,再结合链路追踪实现全链路灰度的能力。
  • 这个过程中我们可以在路由上配置 JWT 鉴权规则,从而达到服务间的安全调用。

如何实现可观测与全链路追踪

开迈斯通过接入应用实时监控服务 ARMS -应用监控,无需修改一行代码就可以实现应用的监控诊断能力,可以快速了解应用最关键的响应时间,吞吐量,错误率这黄金三指标,同时根据指标的异常利用调用链能力对整个微服务进行快速跟踪。

同时链路追踪能力也为应用实现全链路灰度提供了一个技术底座支持。

如何实现全链路流量标签透传

借助 Tracing Baggage 机制在全链路中传递对应染色标识,因为大部分 Tracing 框架都支持 Baggage 概念及能力,如:OpenTelemetry、Skywalking、Jaeger 等等。当然 ARMS Tracing 能力也是符合这个标准的,我们通过实现 Higress WASM 插件,在 Higress outbound Filter 中将指定的透传 key 如 x-mse-tag 从 Tracing 协议指定位置的 Baggage 中读出 x-mse-tag 对应的值,并塞入到 Http 的 Header 中,供 Higress 进行路由。从而实现自定标签全链路透传的能力。

图片

具备自定标签全链路透传的能力之后,我们就可以构建完整的全链路灰度能力了。什么是全链路灰度呢?

在微服务架构下,有一些需求开发,涉及到微服务调用链路上的多个微服务同时发生了改动,通常每个微服务都会有灰度环境或分组来接受灰度流量,我们希望通过进入上游灰度环境的流量,也能进入下游灰度的环境中,确保 1 个请求始终在灰度环境中传递,即使这个调用链路上有一些微服务没有灰度环境,这些应用请求下游的时候依然能够回到灰度环境中。如果一次发布涉及到链路中的多个微服务,我们可以顺滑地进行全链路灰度发布,并且不用担心灰度流量乱窜的风险。

当我们实现全链路透传 x-mse-tag 标签后,我们可以在 Higress 路由上,配置基于 x-mse-tag 的标签路由规则,实现带有特定标签的流量在应用特定版本的节点内流量闭环,从而实现“流量泳道”的全链路灰度能力。

图片

如何实现流量防护能力

如何可以不用修改代码,实现流量防护能力?以常见的流量控制与熔断降级为例,下面我们先来介绍一下流量防护能力。

  • 流量控制

图片

流量是非常随机性的、不可预测的。前一秒可能还风平浪静,后一秒可能就出现流量洪峰了(例如双十一零点的场景)。每个系统、服务都有其能承载的容量上限,如果突然而来的流量超过了系统的承受能力,就可能会导致请求处理不过来,堆积的请求处理缓慢,CPU/Load 飙高,最后导致系统崩溃。因此,我们需要针对这种突发的流量来进行限制,在尽可能处理请求的同时来保障服务不被打垮,这就是流量控制。

  • 熔断降级

图片

现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。

开迈斯通过接入 MSE 服务治理流量防护能力(Sentinel 企业版),无缝实现流量防护能力。 相比社区版本,Sentinel 企业版无论是在使用还是功能层面都有一定的优势。

图片

更多的探索与实践

不需要改代码,我们也能快速具备完整、体系化的微服务治理能力。目前开迈斯基于 Higress 实现了全链路灰度、全链路追踪与可观测、流量防护等一系列能力,使得开迈斯当前的架构可以更加从容地面对快速增长业务带来的挑战。

另一方面,对于 Higress 来说,开迈斯方案的落地为 Higress 生态的发展注入了新鲜的思路,我们也在持续地提升 Higress 的易用性与稳定性,希望可以给更多企业带来更大的价值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战 的相关文章

  • 猫头虎博主的MySQL救援指南:轻松解决初始化问题(nysqld: Can create directort :mysgl mysg! 9-winx64 data errno such file o)

    博主猫头虎的技术世界 欢迎来到 猫头虎的博客 探索技术的无限可能 专栏链接 精选专栏 面试题大全 面试准备的宝典 IDEA开发秘籍 提升你的IDEA技能 100天精通Golang Go语言学习之旅 领域矩阵 猫头虎技术领域矩阵 深入探索各技
  • 思腾合力赞助CCF YOCSEF太原第十一届学术委员会第三次全体会议

    2024年1月6日 由思腾合力赞助的 CCF YOCSEF太原第十一届学术委员会第三次全体会议暨AC换届选举活动 在山西大学举办 华北区教育行业负责人宋肖敏出席本次会议 会议汇聚了众多学术界和企业界的精英 共同探讨人工智能和计算机科学的未来
  • MySQL中设置自增主键id从1开始

    可能遇到过这种问题 当你只想新增一条数据时 发现使用Insert语句后 发现id并不是从1开始的 握草 怎么回事 其实很简单 通过执行一下SQL 对应你的表就可以解决 ALTER TABLE user AUTO INCREMENT 1 具体
  • 如何在CentOS安装SQL Server数据库并通过内网穿透工具实现公网访问

    文章目录 前言 1 安装sql server 2 局域网测试连接 3 安装cpolar内网穿透 4 将sqlserver映射到公网 5 公网远程连接 6 固定连接公网地址 7 使用固定公网地址连接 前言 简单几步实现在Linux cento
  • 阿里云2核4G服务器优惠价格30元3个月?小心坑

    2024年阿里云2核4G服务器优惠价格30元3个月 活动 https t aliyun com U bLynLC 配置为云服务器ECS经济型e实例ecs e c1m2 large 3M固定带宽 系统盘为40GB ESSD Entry 活动打
  • 天猫数据分析工具推荐(天猫第三方数据平台)

    在电商迅速发展的大背景下 做好天猫数据分析能够在多方面帮助品牌商家更好地运营店铺 塑造品牌 如通过数据分析了解消费者的需求 购买偏好 这有利于品牌商家及时调整商品结构 产品推广 商品宣传等等 灵活制定品牌的销售策略 那么 天猫平台行业 品牌
  • 亚信安慧AntDB引领数字化转型:浙江移动成功实现CRM系统全域改造

    数字时代 通信运营商在不断迭代的背景下 需要不断探索数字化转型的路径 以适应快速发展的市场和技术环境 在这一浪潮中 浙江移动站在前沿 率先完成了其CRM系统的全域改造 采用了亚信安慧公司研发的AntDB数据库 为整个行业树立了数字化转型的标
  • 【计算机毕业设计】网上拍卖系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本网上拍卖系统就是在这样的大环境下诞生 其可以帮助使用者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人员
  • 【计算机毕业设计】北关村基本办公管理系统

    在如今社会上 关于信息上面的处理 没有任何一个企业或者个人会忽视 如何让信息急速传递 并且归档储存查询 采用之前的纸张记录模式已经不符合当前使用要求了 所以 对北关村基本办公信息管理的提升 也为了对北关村基本办公信息进行更好的维护 北关村基
  • 软件测试/测试开发/全日制/测试管理丨Redis内存数据库

    Redis是一种开源 内存中的数据结构存储系统 它提供了高性能 灵活性和丰富的数据结构 以下是Redis内存数据库的基本介绍 键值存储 Redis基于键值对的存储模型 其中每个键都与一个特定的值相关联 这种简单的数据模型使其易于使用和理解
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • python超详细基础文件操作【建议收藏】

    文章目录 前言 发现宝藏 1 文件操作 1 1 文件打开与关闭 1 1 1 打开文件 1 1 2 关闭文件 1 2 访问模式及说明 2 文件读写 2 1 写数据 write 2 2 读数据 read 2 3 读数据 readlines 2
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 【计算机毕业设计】电影播放平台

    电影播放平台采用B S架构 数据库是MySQL 网站的搭建与开发采用了先进的java进行编写 使用了springboot框架 该系统从两个对象 由管理员和用户来对系统进行设计构建 主要功能包括 个人信息修改 对用户 电影分类 电影信息等功能
  • 【计算机毕业设计】北工国际健身俱乐部

    本系统为会员而设计制作北工国际健身俱乐部 旨在实现北工国际健身俱乐部智能化 现代化管理 本北工国际健身俱乐部管理自动化系统的开发和研制的最终目的是将北工国际健身俱乐部的运作模式从手工记录数据转变为网络信息查询管理 从而为现代管理人员的使用提
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 面试官问,如何在十亿级别用户中检查用户名是否存在?

    面试官问 如何在十亿级别用户中检查用户名是否存在 前言 不知道大家有没有留意过 在使用一些app注册的时候 提示你用户名已经被占用了 需要更换一个 这是如何实现的呢 你可能想这不是很简单吗 去数据库里查一下有没有不就行了吗 那么假如用户数量
  • 温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 光波导结构

    摘要 增强现实和混合现实 AR MR 领域的新应用引起了人们对带有光栅区域的光波导系统的越来越多的关注 这些光波导系统用于输入和输出耦合以及扩瞳目的 VirtualLab Fusion为这类系统的仿真和设计提供了几个强大的工具 其中一个是具
  • Python 使用 NoSQL 数据库的优选方案

    NoSQL 数据库因其高性能 可扩展性和灵活性而风靡一时 然而 对于 Python 程序员而言 选择合适的 NoSQL 数据库可能会令人困惑 因为有多种选择可供选择 那么 哪种 NoSQL 数据库最适合 Python 呢 2 解决方案 根据

随机推荐

  • 计算机网络打不开怎么办,电脑网页打不开怎么回事

    电脑网页打不开怎么回事 电脑网页打不开怎么回事 电脑没有断开网络 却打不开网页 这是怎么回事呢 通常由于电脑的DNS解析出现问题 所以才会导致网页打不开 下面教大家电脑网页打不开怎么回事的解决办法 一 清除DNS解析缓存 关于电脑网页打不开
  • 详细分析vcoco2014HOI数据集

    vcoco images 图片 train2014 共82783张 COCO train2014 000000581921 jpg COCO train2014 000000581922 jpg COCO train2014 0000005
  • 记录ubuntu启动卡在logo界面有鼠标进不了桌面的经历,以及安装ubuntu踩的坑

    出现问题前 我之前安装过很多次ubuntu 不管是虚拟机 4 5次 还是双系统 3 4次 每次都是我自己搞崩的 就是我和之前一样开始安装搜狗输入法 之前没出过问题 然后就是这次安装完 我感觉和之前不一样 就是之前不知道为什么安装完会有pin
  • 波兰表达式 - 前,中,后缀表达式计算转换

    先看一个算术题 3 4 5 6 29 前缀表达式 3456 中缀表达式 3 4 5 6 你会算的 后缀表达式 34 5 6 利用栈的特性来运算表达式 当前我只拿到了 3 4 5 6 让我求它的前缀和后缀 求后缀口诀 1 从左到右看 数字忙显
  • ubuntu 提示 Could not get lock /var/lib/dpkg/lock-frontend.的处理办法

    今天可能操作删除某个程序的时候提示无法删除 给锁定了 一直显示 Waiting for cache lock Could not get lock var lib dpkg lock frontend It is held by proce
  • Optimizer trance—mysql进阶(五十三)

    前面介绍了 如果加个format JOSN会把数据以json的格式返回 如果想看查询的额外信息 还可以在explain之后加个show warning查看 其中如果code为1003 则代表message里的内容是mysql优化器优化之后的
  • Python学习十二:Flask框架

    文章目录 一 Flask 简介 1 1 安装虚拟环境 1 1 1 安装Virtualenv 1 1 2 创建虚拟环境 1 1 3 激活虚拟环境 1 2 安装Flask 1 3 第一个Flask 二 Flask基础 2 1 开启调试模式 2
  • Java测试(1)

    1 什么是软件测试 软件测试就是软件测试人员验证软件是否满足用户的需求 测试的时候要测试满足和不满足的数据 2 软件测试和软件开发的区别 1 本身 开发 广度小 专业度高 测试 所需技能比价广泛 但是专业度低 2 软件测试和软件调式 目的
  • 阿里版GPT来袭——“通义千问”

    4月7日 阿里云在官方公众号中宣布 大模型 通义千问 开始邀请测试 你好 我叫通义千问 在 通义千问 的自我介绍中可知 它是达摩院自主研发的预训练语言模型 能够回答问题 创作文字 还能表达观点 撰写代码 基于上述能力 通义千问 认为其可以在
  • 数据仓库的选择

    author skate time 2010 03 11 数据仓库的选择 数据仓库的选择单从技术方面要从服务器硬件 数据库软件 ETL和前端展示软件 存储系统 仓库的架构设计几方面综合考虑 根据数据库的操作类型不同 数据库一般分为OLAP和
  • ORA-12505, TNS:listener does not currently know of SID given in connect descriptor解决方式

    启动项目连接oracle数据报 ORA 12505 TNS listener does not currently know of SID given in connect descriptor ORA 12505 TNS 监听程序当前无法
  • .NET网站部署到阿里云服务器经验分享

    由于笔者需要将自己的网站上线 所以第一步就是去买了一个阿里云服务器 想要远程访问的话 首先是云数据库的部署 然后是网站的部署 1 云数据库的部署 过程 在云服务器上下载SQLServer 然后把本地的数据库 架构和数据 使用脚本导出保存 再
  • 【千律】OpenCV基础:Hough圆检测

    环境 Python3 8 和 OpenCV 内容 Hough圆检测 将直角坐标系中的一个圆映射为新坐标系中的一个点 对于原直角坐标系中的每一个圆 可以对应 a b r 这样一个点 这个点即为新三维中的点 标准法实现步骤 1 获取原图像的边缘
  • 如果判断服务器是否在被CC攻击?

    什么是CC攻击 CC攻击的前身名为Fatboy攻击 是利用不断对网站发送连接请求致使形成拒绝服务的目的 攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包 造成对方服务器资源耗尽 一直到宕机崩溃 怎么判断是否被CC攻击 CC攻击主要
  • php怎么获取微信code,PHP tp3.2微信公众号静默授权获取code 获取openid

    PHP tp3 2微信公众号静默授权获取code 获取openid 发布时间 2018 02 24 14 46 浏览次数 1530 标签 PHP tp code openid 一 调用静默授权接口 基于thinkphp3 2的 1 获取co
  • [C语言]字符串处理 - 以指定的字符串分割字符串(支持中文字符)

    C语言 字符串处理 以指定的字符串分割字符串 支持中文字符 函数StringSplit 分割字符串到一个字符串数组中 其中该数组第0位为分割后字符串的个数 函数StringSplit Struct 以定义一个新结构的方式来实现该函数 C代码
  • 单片机----

    开启内部上拉电阻 pbph 0 1
  • C++多线程并发总结

    文章目录 1 线程创建与管理 1 1 并发与并行 1 2 多线程并发与多进程并发 2 C 线程创建 2 1 std thread 线程同步之互斥锁 std mutex std unique lock lock与unlock保护共享资源 lo
  • Java封装OkHttp3工具类

    一 准备工作 Maven项目在pom文件中引入jar包
  • 阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

    开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立 目前合资股东分别为大众汽车 中国 投资有限公司 中国第一汽车股份有限公司 一汽 大众汽车有限公司 增资扩股将在取得适当监督 包括反垄断 审批后完成 万帮数字能源股份有限公司和安