云快充研发中心平台架构师谈云原生稳定性建设之路

本文涉及的产品
函数计算FC,每月15万CU 3个月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 云快充研发中心平台架构师谈云原生稳定性建设之路

大家好,我是来自云快充研发中心的平台架构师吕周洋,今天我给大家分享云快充云原生稳定性之路。


云快充成立于2016年,以充电服务和能源管理为核心,业务涵盖九个方向。截止到2022年11月,业务覆盖370个城市,接入电桩运营商 7400人,接入充电终端31万家,与640个桩企达成合作。目前,新能源行业发展情况除了大力满足业务的快速发展,服务更多客户外,云快充一直非常重视线上服务的稳定性建设,以提升用户的充电体验。


业务系统容器化


为了确保业务的稳定运行,云快充从 2019年 就确定了业务系统百分之百容器化的技术路线。在当时虽然容器平台还有其他的一些方案可以选择,但基本已经可以明确的感受到K8s 成为云原生时代的基础设施底座的技术趋势。K8s 能够带来的价值是多方面的,包括研发运营与效率的提升,降低资源成本等。

image.png

基于自身业务,云快充最看重的是 K8s 对于业务稳定性的提升。在大型分布式 IT 架构中,任何一个环节都有可能发生故障。比如云上的 ECS 不是百分之百能够保持正常运行,每一个应用进程都有可能在长时间运行后遇到宕机的情况。我们需要确保的是,当这些故障发生的时候,业务不要受到任何的影响。K8s 的调度机制以及健康检查机制为IT 架构提供了自愈能力,出现故障的时候,能够自动把业务 Pod 重新调度到正常的节点上。这个过程完全不需要人工介入。通过 K8s 集群的跨可用区部署,配合上同可用区优先的微服务访问策略,甚至可以做到机房级别故障的罕见场景下,业务系统依然正常提供服务。


这一点我们在实战中也验证过。在业务高峰期,通过 K8s 的弹性伸缩能力,可以实现基于业务负载的自动弹性扩容。这个弹性能力涉及到工作负载的水平伸缩以及计算资源的水平伸缩。在全面使用 K8s 之前,我们考虑过类似的方案,但因为担心影响业务稳定性,并没有真正投入大规模使用。全面容器化之前,我们的团队也尝试自己搭建 K8s 集群,验证 K8s 的各项能力,通过一段时间的实战,还是遇到了不少的挑战。

image.png

K8s 是一个大型复杂的分布式系统,涉及十多个核心组件,这些组件和云上的 IaaS 层产生集成的时候就更为复杂了,光是搞定网络插件就需要投入不少的精力,我们也没有专业的技术人员能够快速解决节点异常、Pod 异常、网络不通等问题。特别是有时候遇到 K8s 本身的 bug,就更无能为力。开源 K8s 本身的bug其实还是很多的。当前社区处于 open 状态的 issue 就有1600多个。集群规模比较大的时候,系统的各个组件均出现相应的性能问题的机会也就变高了。如果遇到 etcd 的性能瓶颈,会导致集群一系列的问题发生,体现在业务侧,就是用户充不上电。


K8s 版本以及 K8s 组织的升级是另一个难题。社区版本更新的很快,升级有影响业务的可能性。但我们也担心,太久不升级,老版本因为漏洞会造成更严重的问题。所以我们除了在测试环境,保留自建K8s作为学习和研究之外,生产环境的系统都全面向容器服务 ACK 迁移。结合我们自身的业务场景与技术架构,ACK 在这些方面体现出来的价值让我们最认可。


首先在 API 和标准上完全兼容开源K8s,确保我们的技术架构遵循开源开放的技术体系。其次是计算、存储、网络等云产品进行了深度集成,而且这些集成本身也是基于K8s 标准,特别是在网络方面,实现了VPC内容器网络与虚拟机网络的打通。这对我们渐进式地将应用从 ECS 迁移到 K8s 起到了非常大的帮助。整个迁移的过程是非常顺利。由于网络是打通的,可以在保持原有架构的基础上一个一个应用的验证,只是应用的底层承载,从虚拟机转向了容器。这也确保了我们在容器迁移过程中的业务稳定性。


最后在集群自身的稳定性方面,ACK 也做了大量的工作,如 master节点托管、智能巡检诊断,跨可用区的高可用等等。这些都经过阿里双十一大规模场景,以及阿里云的大型客户实战验证。对云快充而言,最重要的一点在于集群和组件的版本升级变得更简单了,直接在控制台一键操作,对于业务是无感,极大的降低了维护成本,也为业务稳定性的提升提供了基础保障。

image.png

ACK 还集成了一个非常好用的集群诊断工具,它是基于eBPF技术实现的,对我们来说提供了一个开箱即用的能力,一键开启就可以。这个工具提供了全局视角的应用拓扑,遵循了从整体到个体的原则,先从全局视图入手,从请求数、错误数、延误三个黄金指标出发,发现异常的服务个体,如某个应用服务,定位到这个应用后,可以获取日志,关联分析。在一个页面展示分层下钻,不需要多个系统来回跳转,方便快速定位拓扑中的服务调用,这些有价值的数据都导入到了云上的 Prometheus 服务。大家也知道在云原生时代,Prometheus 在可观测领域的地位就相当于 K8s 在云原生底座的地位。


通过云上的 Prometheus 和 Grafana ,我们将 eBPF 指标与云产品的指标结合在一起,做了一个业务监控大盘,通过这个大盘就能了解到当前业务的进展情况。对于重要的接口,我们也基于服务质量配了告警规则,通过 ARMS 告警平台,通知到运维群,保证核心服务的SLA,这对于提升我们的业务稳定性起到了很大的帮助。

image.png

构建业务稳定性


在微服务稳定性方面,我们的团队也做了大量探索。根据之前的经验,80% 以上的线上业务故障都跟版本发布有关,这和应用上下线不够优雅,以及缺少精细化、灰度策略有关。


在阿里云 MSE 微服务治理方案的帮助下,我们对微服务系统的稳定性进行了一系列提升。由于 MSE 所提供的微服务治理能力是基于 Java-Agent 字节码增强的技术实现,和我们使用的 Spring Cloud 微服务框架可以完美匹配。这些提升完全没有代码侵入,所以建立这些能力是很简单的。

image.png

首先解决的是无损上下线问题。做过大规模微服务架构的朋友都知道,无损上下线问题是一个困扰了很多开发者的老大难问题。MSE的微服务治理 Agent做了两件事情,一是动态感知应用上下线的行为,二是动态调整服务消费者的负载均衡策略。通过这两个事情很轻松的实现了应用无损上下线。现在我们不管是做应用的扩缩容,还是版本发布,都可以做到对最终用户无感。


在全链路灰度方面,MSE也提供了完整的解决方案。生产环境只需要一套环境,就可以基于泳道模型定义多个逻辑的灰度版本,再通过路由规则的配置,让特定的流量在对应的泳道中流转。这样就可以在发布新版本的时候,严格控制新版本影响的请求量,通过充分的验证后,再决定到底是加大新版本的覆盖度,还是回滚到上一个版本,从而将版本发布对正常业务的影响降到最低。


由于全链路灰度对于整个研发以及运维的流程提出了更高的要求。我们目前只在一条业务线上进行了推广,得到的收益是很明显的,因为应用变更导致的生产事故降低了70%以上。后续我们会再接再厉,将全链路灰度推广到整个企业。


此外,全链路流量防护也是我们基于MSE构建的提升业务稳定性的重要手段。从网关到微服务应用,到第三方依赖,每一层我们都配置了流量防护规则,确保在业务高峰期不会有任何系统被用户流量所压垮。


这是云快充当前的技术架构。为了保障充电桩连接的稳定性,我们搭建了专门的集群,双服务通过TCP强连接与双通信提供基础能力。伴随着云快充的全面容器化与稳定性建设,云快充接入的电桩数量完成了20万到30万的增长,平均需求迭代周期从7人日降低到4人日,极大地促进了业务的快速迭代。

image.png

展望


除了继续提升全链路灰度覆盖度之外,我们在将来还有两大规划:一是通过边缘容器方案提升我们的服务质量,这和云快充的业务特点是有关系的。在网络中断等极端场景下,基于边缘节点的能力,也能让部分业务可以正常对外服务,不至于用户在这种情况下完全无法充电。二是增强端到端的安全治理。在防攻击、登录认证、涉及网关的双线TLS内部服务、权限管理等方面,都加强安全防护手段。


希望阿里云的方案能够帮助我们更快地实现这两个规划,也希望新能源行业的其他技术团队可以和我们一起共同探索云原生稳定性方面的技术路径。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
存储 缓存 安全
某鱼电商接口架构深度剖析:从稳定性到高性能的技术密码
某鱼电商接口架构揭秘:分层解耦、安全加固、性能优化三维设计,实现200ms内响应、故障率低于0.1%。详解三层架构、多引擎存储、异步发布、WebSocket通信与全链路防护,助力开发者突破电商接口“三难”困境。
|
5月前
|
存储 运维 Java
官宣 | Fluss 0.7 发布公告:稳定性与架构升级
Fluss 0.7 版本正式发布!历经 3 个月开发,完成 250+ 次代码提交,聚焦稳定性、架构升级、性能优化与安全性。新增湖流一体弹性无状态服务、流式分区裁剪功能,大幅提升系统可靠性和查询效率。同时推出 Fluss Java Client 和 DataStream Connector,支持企业级安全认证与鉴权机制。未来将在 Apache 孵化器中继续迭代,探索多模态数据场景,欢迎开发者加入共建!
570 8
官宣 | Fluss 0.7 发布公告:稳定性与架构升级
|
3月前
|
存储 弹性计算 运维
AI 时代下阿里云基础设施的稳定性架构揭秘
十五年磨一剑,稳定性为何是今天的“命门”?
|
1月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
1月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
322 2
|
1月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
452 0
|
4月前
|
Ubuntu 编译器 C语言
在Ubuntu22.04平台上交叉编译针对Rv1126架构的GCC13.2.0编译器的步骤。
遵循上述步骤,您应该能够在Ubuntu 22.04平台上成功交叉编译适用于RISC-V架构RV1126的GCC 13.2.0编译器,允许您为目标硬件构建应用程序和操作系统组件。
242 10
|
4月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
242 0
|
4月前
|
运维 监控 Java
初创代购选单体,千万级平台用微服务:一张表看懂架构选型红线
在跨境电商代购系统年交易额超3.2万亿元的背景下,本文对比微服务与单体架构的技术原理、适用场景及实战案例,结合性能、运维、成本等维度,为企业提供架构选型指南,助力实现高效扩展与稳定运营。