2023年12月15日,2023首届服务韧性工程()论坛在杭州成功举行,大会邀请了来自通信、金融、医疗、制造行业等100余位SRE领域专业人士参加,本次大会特别设立了主题为“SRE的实践和应用”的分会场,分会场由中国移动通信集团浙江有限公司和SRE专委会联合出品。邀请来自通信、云计算、互联网、软件等行业的专家,就SRE实践与应用、智能运维建设、等热点内容的技术发展及应用实践展开讨论。金山办公服务可靠性开发总监曾华山带来《云原生时代下金山办公SRE架构演进之路 》的主题演讲。
金山办公服务可靠性开发总监 曾华山
金山办公服务可靠性开发总监曾华山,进行《云原生时代下金山办公SRE架构演进之路 》的演讲,深入探讨了金山办公在云原生时代下的SRE架构演进之路。回顾金山办公云平台的运维历史,他们SRE在面对挑战时的变革与创新。同时,为大家详细介绍了金山办公在可靠性管理、一站式研运平台、自动化、监控&可观测性、多云成本、安全等方面的重大突破。最后,曾华山通过案例分享,深刻剖析了SRE在云原生时代的演进,为与会者提供了实质性的指导和启示。
以下为演讲实录:
金山办公整个运维SRE建设发展的历程可以分为以下四个时期
(1)初创期(2014-2017)
初创期的业务对技术就一个要求:“快”,但这个时候却又是运维团队最弱小的时期,金山办公在这个时期运维团队就只有一两个技术人员,所以这个时候十八般武艺都需要用上,有开源的就用开源的,没开源就自己写,自己写也不是大而全的写,而是遵循二八原则,有针对性的支持。
这个阶段,金山办公完成了初步的传统运维转型,实现了基本的转变,并在2016年,跳过了iaas层的建设,开始实现容器化改造,并于2017年,做同城机房容灾改造。
(2)发展期(2018-2019)
2017年,经历金山办公在线办公云文档漫游的全量放量,原本小而快靠人的模式已经满足不了业务的发展,各个业务部门在云计算这条道路上,都面临初创期的各类问题,这个时期,迫切需要一个统一的集中式的内部云平台。金山办公SRE团队也应运而生。过去欠的IaaS及PaaS层建设,也进入了发展期。
这个阶段,金山办公建设了内部的基础设施平台,集中解决网关、应用、缓存、数据库等诸多通用问题,并统一了全公司云服务的相关流程和规范。这个阶段,细分又可以拆分为堆功能期、优化期、架构期。
(3)竞争期(2020-2022)
过了发展期,马上面临的是两大困境,重复造轮子&网状一团乱麻的系统交互&物理机房架构没跟上发展。
于是,平台化,服务化,两地三中心演进,也就成了最迫切的需求。
(4)成熟期(2023-至今)
熬过了日活和月活的爆发式增长,各方面基建都处于有且形成一定规模和制度。技术上其实也基本进入了成熟期,该拆的也拆了,该平台化的也平台化了,技术上能做的大动作其实也不多了,更多的是进行优化。但有时候也会为了满足某个优化,系统做很大的改变以及业务重构面临的问题。
另外疫情3年,带来的居家办公,在线协作,对办公服务的质量要求也日渐增长。行业一五十(一分钟发现、五分钟定界、十分钟恢复)已经开始没法满足用户的需求。需要提供更高的稳定性。
(1)复杂性和不确定性:
在云原生时代,应用的架构和部署变得更加复杂。传统的单体应用已经被拆分为多个微服务,并部署在多个不同的容器或虚拟机中,涉及到的组件和服务也更加多样化。同时,在 VUCA时代,SRE团队需要面对更多的变化和不确定性,例如业务需求的变化、技术环境 的变化、安全威胁的变化、天灾人祸的变化等。
(2)新技术&自动化:
在云原生时代,自动化运维已经成为了一个必不可少的部分,因为云原生应用通常涉及到 大量的服务和组件,需要SRE使用自动化工具来减少手动操作和人为错误。SRE需要掌握 自动化工具的使用和开发,如自动化测试、自动化部署、自动化扩展、自动化监控、自动 化运维等。
(3)监控和故障排查的精细化要求:
云原生技术和微服务架构的出现,使得应用的可用性和性能变得更加重要。SRE需要实时 监控和管理应用的服务质量,并对故障进行快速响应和处理。需要掌握更加精细和全面的 监控和故障排查手段以及应用性能监控、故障诊断、容量规划等相关技术,以确保应用的 高可用性和高性能。
(4)多云管理&成本管理:
随着多云环境的普及,SRE需要管理多个云环境和云服务商之间的互操作性,并确保应用 在不同的云环境下的可用性和性能。需要掌握多云管理的技术和工具,如跨云平台迁移、 多云监控和管理等。多云环境也带来了新的成本管理挑战。SRE团队需要掌握成本管理的 方法和工具,以便优化应用程序的成本和效率
(5)安全隐患和风险:
随着云原生应用的规模和复杂性的不断增加,安全性管理变得越来越重要。SRE需要对云 原生应用的安全漏洞和攻击进行监控和管理。他们需要掌握安全监控、漏洞扫描、安全审 计等相关技术,以保证应用的安全性。
(6)组织文化转型:
云原生时代下,SRE的角色已经不再是传统意义上的运维人员,需要与开发人员密切合作, 共同推进应用的交付和持续改进,因此,组织文化的转型也是一个重要的挑战。SRE需要 具备良好的沟通能力和团队协作能力,积极与开发团队合作,推进DevOps文化的建设, 以加速应用的交付和改进。
SRE(Site Reliability Engineering)是Google提出的一种将软件开发的方法应用于运维工作的实践,目的是确保系统高度可靠和高效。金山办公基于Google的方法论,将SRE实践到实际办公领域运维中。
Site(网站):高可用网站架构
①冗余设计:确保系统的各个组件都有备份,以避免单点故障。这通常涉及到跨多个数据中心或云区域的部署。
②负载均衡:通过分配流量来优化资源使用,减少响应时间,防止任何单一资源的过载。
③自动伸缩:根据流量自动增加或减少资源,确保系统能够处理峰值负载而无需人工干预。
④故障转移和灾难恢复:设计系统以便在发生故障时能够快速切换到备用组件或站点,并确保数据的安全。
(1)确定的故障率(少出事):
①通过实施严格的质量保证流程、代码审查、自动化测试和混沌工程实践,SRE团队旨在减少系统的故障率。
②使用预测性监控和根本原因分析来识别和解决可能导致故障的潜在问题。
③通过持续集成和持续部署(CI/CD)来确保代码更改不会引入新的错误。
(2)确定的恢复时长(恢复快):
①SRE团队会建立和维护一套全面的文档和流程,以便在发生故障时能够快速响应和恢复服务。
②自动化工具和脚本的广泛使用可以加速恢复过程,减少人工干预的需要。
③定期进行灾难恢复演练,确保在真实发生问题时能够迅速采取行动。
(3)确定的影响面(影响小):
①通过设计高可用性和容错性系统,SRE团队可以限制故障的影响范围。
②实施有效的监控和报警系统,以便在问题出现时立即识别,并采取措施防止问题扩大。
③通过服务等级目标(SLO)和服务等级协议(SLA)来量化服务的可靠性,并与业务目标对齐,确保任何潜在的影响都在可控范围内。
Reliability(可靠性):可靠性管理
①监控和报警:实时监控系统性能和健康状况,一旦检测到异常就发出警报,以便快速响应。
②事故管理:建立明确的事故响应流程,包括事故的记录、分类、响应、事后分析和改进措施。
③容量规划:预测未来的资源需求,确保有足够的容量来满足用户增长和业务需求。
④混沌工程:通过有控制地引入系统故障来测试系统的韧性和可靠性,确保系统能够从各种故障中恢复。
Engineering(工程):软件工程-运维平台
①自动化和工具开发:开发工具和脚本来自动化日常任务,减少手动操作,提高效率和减少错误。
②持续集成和持续部署(CI/CD):通过自动化的代码集成和部署流程来加速软件开发和发布。
③服务等级目标(SLO)和服务等级协议(SLA):定义和沟通服务的可靠性目标,并与业务目标对齐。
④性能优化:不断分析和优化系统性能,确保快速响应用户请求,提供良好的用户体验。
SRE可靠性框架的目标是通过这些实践来提高系统的可靠性、性能和安全性,同时平衡可靠性与快速迭代和交付新功能的需求。通过结合软件工程的最佳实践和系统运维的深入知识,SRE帮助组织构建和运行可靠、高效、可扩展的服务。
四、Dev自动化与Ops手工运维的平衡
首先,CMDB是运维自动化的基石,体系化的运维平台,离不开CMDB这块基石的支撑。CMDB为运维自动化提供了必要的数据支持和上下文,使得自动化工具和流程能够更加智能和可靠地工作。通过确保配置数据的准确性和及时性,CMDB帮助组织提高运维效率,减少手动错误,并最终提高IT服务的质量和可靠性。
SRE方法论在于,采用一套经过深思熟虑的SLO,对可靠性工作的机会成本作出数据驱动型的决策,将可靠性工程工作安排到一个合理的优先级,从而保证创建足够的可靠性。所以,实施SLO,也就成为了SRE转型的敲门砖。基于SLO决策,平衡Dev和Ops的投入,避免被琐事淹没。
而自动化,可以从如下方面进行:
(1)基础设施即代码(IaC):
可以使用工具如Terraform、Ansible、CloudFormation等来定义和管理基础设施,确保环境的一致性和可重复性。
(2)持续集成/持续部署(CI/CD):
实施CI/CD流程来自动化代码的集成、测试和部署,使用Jenkins、GitLab CI/CD、GitHub Actions等工具。
(3)容器化和编排:
利用Docker和等容器化技术来封装应用,以及进行编排和自动化部署。
(4)自动化测试:
开发和执行自动化测试脚本,包括单元测试、集成测试、性能测试和安全测试,以确保代码质量。
(5)监控和报警自动化:
使用Prometheus、Grafana、ELK Stack(Elasticsearch, Logstash, Kibana)等工具来自动化监控和报警,确保及时发现问题。
(6)自动化故障恢复:
设计自动化故障恢复机制,如自动重启失败的服务、自动回滚失败的部署等。
(7)配置管理:
使用配置管理工具来自动化服务器和应用的配置管理。
(8)日志管理和分析:
自动化日志收集、存储和分析,以便快速诊断问题。
(9)脚本和工具开发:
开发和维护内部脚本和工具来自动化日常任务和复杂的运维流程。
(10)自助服务平台:
构建自助服务平台,允许开发人员通过API或Web界面自助地部署资源和管理服务。
(11)混沌工程:
实施混沌工程实践,如使用Gremlin或Chaos Monkey,来测试系统的韧性和自动恢复能力。
(12):
探索和应用人工智能和机器学习技术,如使用AI来进行异常检测、预测性故障分析和自动化决策。