●腾讯DevOps核心系统负责人 ●百度协同管理工具架构师 ●华为云计算高级研发工程师,负责计算、存储的设计和研发 ●DevOpsMaster认证 ●DevOpsEnterpriseCoach认证 ●DevOps标准核心编写专家 ●百度方法+持续交付联合作者、百度DevOps布道师 ●《Devops最佳实践》合译者 Agenda •平台工程是不是新的轮子? •探索路径与效果 •发展阶段 •规模化的效果 •如何提高一致性来达到规模化 •拥抱平台工程,避免踩入常见的误区 GartnerReportx平台工程是否又一个轮子 Gartnerusehypecirclepredictplatformengineeringwillbemain-streamtechat2025and2028 2022年 2023年 PuppetReportx平台工程是否又一个轮子 96%companieshavealreadyestablishedaplatformengineeringteam. PuppetxHumanitec2024DevOpsReport Average3IDPSinonecompany Topbenefitsofplatformengineering: Productivity-QualityandStable-ReduceLeadtime- 78%oftheteamshavebeenestablishedforatleastthreeyears. -Netflix使用他们的平台来解决开发人员管理多种服务和软件、了解存在哪些工具以及在工具之间切换上下文的挑战。 -Nordstrom建立了一个平台,成为“自助服务的北极星”。他们的平台帮助消除了配置过程中的瓶颈,并消除了人们登录生产的需要。这些变化使组织能够更快地行动。 -Zalando利用他们的平台来统一开发人员体验,促进默认合规性,并随着时间的推移改进公司的运营方式。 ChallengeforDevelopersx平台工程是否又一个轮子 ReffromDanielBryantatPlatformCon2022 GOPS全球运维大会2024·深圳站 FirstPrincipleThinkingx平台工程是否又一个轮子 1.⼤多数开发⼈员不喜欢处理基础设施。他们想编写代码并在某个地⽅运⾏它,但不太关⼼运 ⾏在哪⾥。函数即服务(例如Lambda)或平台即服务(例如Vercel)提供了这种体验。 2.随着公司/组织的发展,其需求可能会“超出”由FaaS和PaaS产品施加的限制。然后挑战变成在不离开开发者舒适区的情况下向上移动控制轴。这就是平台⼯程发挥作⽤的地⽅! 速度v.s质量 灵活/规模/安全的平衡 价值观 流程 帮助软件团队提升和持续交付软件业务价值 减少开发人员的负担 开发人员拥有应用和应用组SDLC控制权 人 /服务 平台工程的目标 工程上的合理性 HybridCloudManageService(e.g.pulumi) 个人经历的三个阶段: 云计算 DevOps平台建设及互联 IDP/CICDPlatform/平台工程 Agenda •平台工程是不是新的轮子? •探索路径与效果 •发展阶段 •规模化的效果 •如何提高一致性来达到规模化 •拥抱平台工程,避免踩入常见的误区 发展阶段x探索路径 定义平台工程团队的目标 构建平台工程团队 构建平台,遵循产品方法如:用户研究/UserStoryMapping /MVP等 衡量平台工程的KPI,并监控起来。如:生产力,交付时间, 部署频率,开发人员满意度,稳定性和效率 3Roadmap 范围:项目级落地 -基于业务情况设计SDLC -搭建系统配置流水线 -程度:弱 范围:多项目落地 -基于场景设计,服务端/移动端/前端 -整合门户Portal,收敛开发入口 -有考虑升级场景一般通过模板更新来升级实例 -程度:中 范围:多业务落地 -平台根据SDLC阶段特征,进行抽象能力 -满足PD/RD/QA/SRE等角色的使用场景 -具备规模化升级能力 -升级过程具备严谨的质量保证和双跑,更新实时性强 -协助垂类平台,能更好服务托管业务的安全和合规 -程度:高 引用:PlatformEngineering101:WhatYouNeedtoKnowaboutThisHotNewTrend 2DifferentStrategyx探索路径 Monorepo -Dictatesallsourcecodeinasinglesourcerepo. -Therearenoversionsofinternallibraries,justwhatisonHEAD -Anycodechangeshouldbecompiled/testedagainsteverythingintherepositorybeforebeingpushedtoHEAD MultipleRepos -Sharelittleapproach(ordon’tusesharedlibraries) -ServicesshouldonlybecoupledviatheirHTTPAPIs -MinimallyreusedCI/CDcapabilities,eachbuiltindependently. Monorepo Advantagesofmonorepoatscale TestEnvStagingEnvProductionEnv Mindset: -Resolvedonceandforall -Whobuildit,whorunit Advantagesofmonorepoatscale: -单一代码库、共享、横向可见性 -支持代码共享和重用 -改善协作,更容易重构 -简化的依赖管理(配置,DDL等) -原子变化仍处于控制之中 -标准的CI/CD管道 -所有提交和发布都经过评审、自动化测试 杨国安,马化腾称他为“世界级的企业实战教练” 人人为我,我为人人x规模化的效果 Writesometestcases. 人人为我,我为人人x规模化的效果 Presubmit 容不容 开发想修复一个公共库的缺陷系统平台能给他什么样的支持? 愿不愿 我是否可以推动所有使用这个公共库的用户知晓这个缺陷并让他们放心升级以及制定发布计划 人人为我,我为人人x规模化的效果 Presubmit 修改代码,发起MR/CR Changeone,changewholex规模化的效果 PostsubmitandDeploy 代码合入主干,制作制品,发布 大规模升级依赖x规模化的效果 模块保密 依赖升级结合CICD标准化 •按月定期升级所有服务 •依赖升级分批验证,全生命周期跟踪 •依赖情况的检查 •破坏性变更的检查 •遇到问题,及时回滚和止损 精准构建/编译加速x规模化的效果 构建标准化覆盖三部分: 1、依赖的构建环境(包含:硬件、操作系统、开发语言、Toolchain/SDK、第三方开源代码版本等) 2、标准化编译入口 3、标准化输出、归档(产出物) 代码到镜像时间:60~70minutes->8mins 标准化Toolchain 编译入口 加速 显式声明依赖 本地触发远程构建 Level1 支持,基于容器 支持,统一shell 无 无 只有CLI触发方式 Level2 支持,基于容器+第三方依赖描述 支持,标准命令 无 部分 只有CLI触发方式 Level3 BazelImage,BazelRule 支持,BazelRule 支持 支持 Bazel原生命令+CLI支持 -大仓编译缓存+精准测试,降低构建量94% L3/L4/L5的自动发布x规模化的效果 通过制品库,所有代码只有通过持续集成流水线验证的,才可以被打包成制品,并通过仅授权标准流水线向产出物打可信标签,实现对于被部署产出物的质量筛选。在CD环节,所有环境的晋级也是基于制品的可信标签进行流转,每个环境的验证结果都会被自动化流水线记录在制品库的标签中 提高服务部署稳定性x规模化的效果 在整个2022年某BG发布变更类导致的故障在有定级的故障里占比达到XXXX% 发布变更类 线上操作变更代码发布配置变更运营配置 •当前的部署服务不能执行完整的线上变更操作,对于多种配置变更的验证不足; •围绕部署变更的质量保证实践没有工具及流程支撑; •环境的使用及变更管理缺少规范及管理,变更破坏环境隔离影响线上 持续交付(CD)以及敏捷方法论的一个核心原则是,随着时间的推移,较小的变更批次能够产生更高的质量; 敏捷 频繁小批量发布 自动化 减少或消除频繁发布的重复开销 隔离 力争采用模块化架构,以隔离变更,并使故障排除更加容易 可靠 度量关键的健康指标,如崩溃或延迟,并不断改进它们 数据驱动决策 对健康指标进行A/B测试,以确保质量。 分阶段发布 在将变更发布给所有人之前,先向少数用户发布。 需求的托管x规模化的效果 需求的标准化能让需求看板更加清晰及时反馈项目状态,潜在的场景,PMO会关注需求状态是否更新及时,业务PD会关注需求的leadtime,技术TL会关注版本发布的需求清单。 -标准化包含需求模板/工作流的标准化,同时也跟CICD过程的结合。 对于中台,平台工程赋能了平滑升级x规模化的效果 -控制panel(*) -数据panel -执行panel Agenda •平台工程是不是新的轮子? •探索路径与效果 •发展阶段 •规模化的效果 •如何提高一致性来达到规模化 •拥抱平台工程,避免踩入常见的误区 整体目标x如何提高一致性 大家都在说工程师文化,文化就深植于这三个方面,我们必须通过这三方面的建设,才能打造我们想要的工程师文化。文化是这三方面相互作用的结果,它既不是过程,也不是方法。 引用自:乔梁老师,《一致性,是研发效能提升的必经之路!》 如果我们想让效率不降低,就要想办法消除随机复杂性,而消除随机复杂性的必经之路就是“一致性”。而要达成一致性,大家必然要遵守相同的“道、法、器、术”。 如果道和法不同,那么,器和术上的一致在社会性问题上也无法达成。 而道和法一致,那么,器和术就可以相互转换,螺旋上升。 GOPS全球运维大会2024·深圳站 平台工程总览x如何提高一致性 Metadatax如何提高一致性 建立应用-发布单元的映射 产品 -PAM(APP) -PAM(RU) CI -COMMITMETA -PIPELINEMETA -TESTPLAN CD -DEPLOYMETA -XAC 我们实现的时候用AsCode的方案 ExampleforMetadatax如何提高一致性 Rule:DefineforuserscenarioRule:MinimizevariationRule:Monitor,Testable Rule:DifferentPermissionRule:EasytoScale Proto->TextProto 用户故事地图x如何提高一致性 Designfor oRD oBuildEngineer oQA oRE oSRE oPD oTL oSecurity oAudit 核心场景超过500+SDLC全面覆盖 SystemDesignForEveryStage(Abstraction)x如何提高一致性 Example:Presubmit 代码即将合入主干前的质量验证,在此阶段尽量模拟开发人员代码合入后主干的效果,避免提交的代码合入主干后影响其他开发人员。本步骤对任务时间、质量和并发都很高的要求,长耗时任务会被强制取消,性能不满足的任务允许用户不执行。建议执行时间15分钟以下。 代码变更范围: 业务代码 测试代码 配置与数据 工程元数据文件 基础设施 阻塞可靠性效率 执行的任务: •对于业务代码、测试代码的测试 •对于配