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

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 云快充云原生稳定性之路

来自云快充研发中心的平台架构师吕周洋,给大家分享云快充云原生稳定性之路。https://www.bilibili.com/video/BV16P4y1e7jA/


云快充成立于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内部服务、权限管理等方面,都加强安全防护手段。


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





相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
Kubernetes Cloud Native 持续交付
云原生技术浪潮下的微服务架构实践
在数字化转型的今天,云原生技术成为推动企业IT革新的关键力量。本文将通过浅显易懂的语言和实际案例,带领读者了解云原生的核心概念、微服务架构的设计原则以及如何在云平台上高效部署和管理微服务。我们将从基础概念出发,逐步深入到微服务的生命周期管理,探讨如何在云原生生态中实现快速迭代和持续交付。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的指导和思考。
|
12天前
|
运维 Cloud Native 持续交付
云原生架构:企业数字化转型的加速器
【8月更文挑战第7天】在数字化浪潮中,云原生架构成为企业转型的关键。它不仅改变了应用的开发、部署和管理方式,还提升了系统的可伸缩性、弹性和自动化能力。本文将探讨云原生的核心概念、优势以及它如何助力企业实现敏捷和高效的运营。
|
1天前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
6 2
|
1天前
|
Cloud Native API 云计算
云原生架构:企业数字化转型的催化剂
【8月更文挑战第18天】在数字化浪潮不断推进的今天,云原生技术已成为推动企业IT转型的核心力量。通过深入探讨云原生架构的基本原理、优势以及实施策略,本文旨在为企业提供一个清晰的云原生应用路线图,帮助它们在竞争激烈的市场环境中获得灵活性和创新能力。文章将详细阐述云原生如何助力企业实现资源的最优配置,加速产品上市时间,并提高系统的可维护性和扩展性。
|
7天前
|
编解码 Linux 数据安全/隐私保护
Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务
为满足在Linux平台(x86_64与aarch64架构)上实现轻量级RTSP服务的需求,我们开发了一套解决方案。该方案通过调用`start_rtsp_server()`函数启动RTSP服务,并设置端口号及认证信息。支持AAC音频和H.264视频编码,可推送纯音频、纯视频或音视频流。此外,还支持X11屏幕采集、部分V4L2摄像头采集、帧率/GOP/码率调整、摄像头设备选择与预览等功能。对于音频采集,支持alsa-lib和libpulse接口。整体设计旨在提供150-400ms的低延迟体验,适用于多种应用场景。
|
9天前
|
运维 Cloud Native Devops
云原生架构:企业数字化转型的加速器
【8月更文挑战第11天】在数字化浪潮中,企业正经历前所未有的转型压力。云原生架构作为一种新型的IT架构模式,以其灵活性、可扩展性和高效性成为企业应对这一挑战的关键工具。本文将深入探讨云原生架构的核心概念、优势以及它如何助力企业实现敏捷开发、自动化运维和微服务治理,最终加速企业的数字化转型之旅。
20 3
|
12天前
|
Cloud Native 云计算 微服务
云原生时代:企业分布式应用架构的惊人蜕变,从SOA到微服务的大逃亡!
【8月更文挑战第8天】在云计算与容器技术推动下,企业分布式应用架构正经历从SOA到微服务再到云原生的深刻变革。SOA强调服务重用与组合,通过标准化接口实现服务解耦;微服务以细粒度划分服务,增强系统灵活性;云原生架构借助容器化与自动化技术简化部署与管理。每一步演进都为企业带来新的技术挑战与机遇。
46 6
|
9天前
|
Kubernetes Cloud Native 持续交付
探索云原生架构:企业数字化转型的催化剂
【8月更文挑战第10天】随着技术不断进步,云原生架构作为推动企业数字化转型的关键力量,正逐渐成为行业焦点。本文将深入剖析云原生的核心理念、关键组件及其在现代业务中的应用,探讨云原生如何助力企业实现敏捷开发、自动化部署与弹性扩展,从而加速创新并提升竞争力。
12 2
|
10天前
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
19 1
|
12天前
|
Kubernetes 监控 Cloud Native
云原生时代的微服务架构实践
在数字化转型的浪潮中,企业级应用正经历着从传统架构到云原生微服务架构的转变。本文将深入探讨云原生技术如何赋能微服务架构,实现服务的快速迭代与弹性扩展,并分析微服务拆分的最佳实践和面临的挑战,以及如何利用云原生工具集来构建和管理微服务。我们将通过具体案例,展示如何在云平台上部署和管理微服务,确保系统的高可用性和可维护性,同时提供一套应对常见微服务问题的解决策略。