平台工程指南:从架构构建到职责分工
平台工程只是 DevOps 专业化的另一个术语,还是另有所指?事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩,以各个团队为中心。不幸的是,在许多地方,DevOps 引发了新的问题,如工具激增和整个企业缺乏协调。可以说,为了应对过去非常严格的孤岛式管理和强烈的集中化,DevOps 逐渐倾向于联合——也就是团队层面的次优化,这对组织也造成了损害。规模更大、更复杂的企业对此感受最深,因为它们必须处理不同的技术堆栈,而且整个组织的成熟度也不尽相同。
平台工程正是为了应对这一全企业范围的挑战而发展起来的。它并非 DevOps 的替代品。相反,平台工程与 DevOps 相辅相成,共同应对整个企业面临的挑战,并提供一个工具平台,让各个团队更容易完成工作,而不是在试图保持整个组织一致性的同时破坏事情。
在过去几年中,由于更多的应用程序正在以更快的速度运行,IT 交付的复杂性也随之增加。这意味着组织不能依靠个人来控制复杂性;他们需要有适当工具支持的系统解决方案。这就是平台工程要解决的问题。因此,平台工程师对企业来说至关重要,因为他们的角色是实现安全和工程标准的关键。
01 平台工程师的定义
平台工程师的职责包括三个不同的部分。
最明显的是技术架构师的角色,因为他们必须建立一个连接所有工具和实现流程的工程平台。第二个方面是社区推动者,这与技术工具公司的开发人员关系角色类似。第三部分是产品经理;开发人员社区的利益和需求与平台的技术需求(如安全加固和过时组件的修补)之间的竞争需要优先考虑。
作为技术架构师的平台工程师
在技术堆栈复杂度中等或较高的企业中,构建、发布和维护软件所需的工具至少有十几种,有时甚至更多。整合这些工具并对有意义的指标进行衡量,就像整合业务应用程序一样棘手。毕竟,面临的挑战非常相似:不同的流程需要校准,数据模型需要转换以使其可用,集成点需要连接以实现端到端流程。
运行软件方面业务的系统也同样具有挑战性。平台工程师在这方面的职责是负责软件运行工具的架构,目标是让工具 “消失”,使软件的构建和发布显得简单易行。
作为社区推动者的平台工程师
软件工程师往往认为自己的解决方案比别人的更好。因此,采用工程平台是一项需要克服的挑战。告诉工程师使用特定工具往往会遇到阻力。平台工程师必须成为社区的推动者,与工程师一起推广平台,让他们相信平台的好处。在这部分职责中,沟通是双向的,因为平台工程师还必须倾听平台的问题和挑战,并找出需求量大的新功能。这就引出了角色的第三部分。
作为产品经理的平台工程师
企业的工程师和其他利益相关者对平台的需求相互竞争。以高效的方式确认这些需求的优先级是一项艰巨的任务,因为您必须在所有相互竞争的利益之间找到平衡,尤其是平台的资金本身往往就是一项挑战,因此快速实现价值对于平台的持续支持至关重要。平台工程师需要良好的谈判技巧来应对这些挑战。
02 平台工程架构概述
我们谈到了平台工程师的角色,但平台工程师要构建和维护的平台包含哪些内容呢?最简单的方法是考虑三个层次和一个目标环境:
-
最上层是开发人员体验。这些是开发人员直接使用的工具——推动整体工作流程的工具,如敏捷生命周期管理工具、服务管理工具和开发人员集成开发环境,都属于这一层。
-
底层包括基础设施组件,这些组件必须结合起来才能构建应用环境。这些组件可以来自公共云或私有云,也包括传统的数据中心技术。
-
中间层是最复杂的地方——软件工程平台。在这里,创建和交付软件所需的所有流程都要进行协调:CI/CD、安全扫描、环境配置和发布管理。
03 如何在整个 DevOps 团队中采用平台工程
一种成功的采用模式侧重于确定开发人员的旅程,以定义最小可行平台。那么,需要哪些功能才能使开发人员的旅程实现结果呢?想一想置备环境、将新 API 部署到生产环境或运行性能测试套件这样的任务。每项任务都是一个有效的开发人员旅程,其中有多个接触点,可能需要众多工具。一旦您为第一套应用或技术创建了最低可行平台,应用就会从三个维度展开:更多的应用、更多的功能和更高的成熟度,从而提高自动化和/或性能水平。
除了担心以合理的方式构建平台外,还应尽早解决其他三个方面的问题:
-
社区参与
-
提供资金
-
衡量平台成果
制定社区参与战略非常有帮助。该战略应包括如何与开发者社区共享信息、如何提出功能请求以及如何宣传平台的优势。定义论坛、交流及其各自的频率也很有帮助。
资金很快也会成为瓶颈,因此应在平台工程师采用平台的早期就商定资金策略。这可以是多种策略之一,如专项资金、为所提供的服务提供资金或对所有软件开发征收服务税。每种策略都有其自身的优势和挑战,但最重要的是要有一个不依赖于利益相关者善意的可持续长期资助战略。
最后一点,平台工程师需要能够展示成果,这意味着我们需要衡量有意义的指标,以展示为什么有了该平台,公司会变得更好。这一点往往被遗忘或事后才想到。了解组织的优先事项并使衡量框架与之保持一致,有助于获得持续的支持。不幸的是,这通常需要对多个工具的数据进行调整,而且在前期考虑时最容易实现——单个工具的数据模型保持孤立的时间越长,难度就越大。
04 结论
平台工程仍然是一个相当新的领域,但已经有很多关于它的内容,这说明它很快就引起了企业的兴趣。甚至还有一个专门的会议,始于 2022 年,有数千人参加。虽然还为时尚早,但目前的迹象表明,平台工程已迅速获得市场认可,并形成了一个充满激情的社区。与此同时,平台工程师角色的重要性也将稳步提升,这一点也已在薪酬中有所体现。
希望平台工程能继续帮助企业为开发人员降低软件开发的复杂性,同时实现 DevOps 的承诺:更快、更安全地提供更好的解决方案。
相关文章:

平台工程指南:从架构构建到职责分工
平台工程只是 DevOps 专业化的另一个术语,还是另有所指?事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩,以各个团队为中心。不幸的是,在许多地方,DevOps 引发了新的问题,如工具激增和…...

Docker系列之docker与docker-compose离线安装
docker离线安装 一、离线安装包二、安装命令三、配置四、docker-compose 一、离线安装包 上传离线安装包至/root/目录下,docker离线安装包下载链接。 二、安装命令 cd /root mkdir k8sOfflineSetup tar -xzvf k8sOfflineSetup-2020-02-20.tar.gz -C k8sOfflineSe…...

css flex 布局换行
默认使用display: flex;是不换行的,只需要加上flex-wrap: wrap;就行了,效果图 .app-center {display: flex;flex-wrap: wrap;justify-content:flex-start; } 通过上面我们发现虽然时间换行了,但是每行的边距不一样 加上这个就行了ÿ…...

使用腾讯云快速搭建WordPress网站流程详解
专栏系列文章: WordPress建站主题美化系列教程https://blog.csdn.net/seeker1994/category_12184577.html 一文搞懂WordPress是什么?为什么用它建站?怎么安装与部署? 初次安装WordPress后如何进行网站设置(主题安装、…...
JavaScript发展历史与JavaScript的版本发展
JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它最初由Netscape公司的Brendan Eich设计,并于1995年在网景导航者浏览器上首次实现。由于Netscape与Sun合作,并希望其外观与Java相似,因此被命名为JavaScrip…...
零基础如何系统自学Python
零基础系统自学Python 学习前的准备 明确学习目标 Python 一共有两大版本,即 Python2 以及 Python3,Python2 已停止维护,强烈建议直接上手 Python3。Python 可以说是无所不能,主要有以下几大方向,建议选择自己感兴趣…...

华为OD机试 - 字符串统计(Java 2024 C卷 100分)
目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…...

LeetCode-数组-前缀和-中等难度
前缀和 前缀和是一种利用预处理的方式来减少整体实现复杂度的方法。 基本定理 假设原数列A为:[1,2,3,4,5],与之对应的前缀和数列P则为:[1,3,6,10,15] 前缀和数列的第一项等于原数列的第一项,从第二项开始前缀和数列每一项计算…...
【程序人生】探索2024年AI辅助研发趋势
目录标题 探索2024年AI辅助研发趋势一、AI在编码中的应用智能代码生成助力开发错误检测与修复的即时反馈性能优化的智能建议 二、AI驱动的自动化工具三、AI与团队协作四、未来展望结语 探索2024年AI辅助研发趋势 随着人工智能技术的迅速发展,AI在各个领域的应用正日…...

集合框架(一)Collection
学习过了ArrayList,知道集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 为了满足不同的业务场景需求Java还提供了很多不同特点的集合给我们选择。 集合体系结构 Collection是一个接口&a…...

Android 性能优化--APK加固(2)加密
文章目录 字符串加密图片加密如何避免应用被重新签名分发APK 加壳的方案简析DEX加密原理及实现 本文首发地址:https://h89.cn/archives/212.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 通过 前文 介绍,我们知晓了如何使用代码…...

Linux环境下使用interrupt方式操作UART
目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数:usr_serial_open 2.2 关闭串口函数: usr_serial_close 2.3 发送数据函数: usr_serial_sendbytes 2.4 接收数据函数: usr_serial_readinterr…...

修改Android打包apk的名字和目录
app打包生成apk后通常需要进行备份,但是要区分好哪个apk是什么版本的、什么时候打包的,以方便以后区分使用。 最开始的想法是把版本号、创建时间这些加在apk文件名上即可,但是公司要求apk使用一个固定的名称,那我怎么保存版本号信…...

管理 PostgreSQL 中配置参数的各种方法
管理 PostgreSQL 中配置参数的各种方法 1. 概述 PostgreSQL提供了一个配置文件 postgresql.conf 让用户自定义参数。您可能需要更改一些参数来调整性能或在工作环境中部署 PostgreSQL 服务器。在这篇博文中,我们将探索管理这些参数的不同方法。 2. 以不同方式管理…...
Linux命令-continue命令(结束本次循环,继续执行下一个for,while或until循环。)
概要 continue [n]主要用途 结束本次循环,继续执行下一个for,while或until循环;可指定从第几层循环继续执行。 参数 n(可选):大于等于1的整数,用于指定从第几层循环继续执行。 返回值 返回…...

智能部署之巅:Amazon SageMaker 引领机器学习革新
本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 (全球 TMT 2023年12月6日讯)亚马逊云科技在 2023 re:Invent 全…...

国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?
我自己试用了很多的平台,发现三个比较好的大模型平台,对普通用户也比较的友好的,而且返回内容相对来说,正确率更高的,并且相关场景插件比较丰富的国内厂商。 本文说的,是我自己觉得的,比较有主观…...
python如何打包py文件为exe
要将Python程序打包为可执行文件(.exe),您可以使用一些第三方工具。以下是两个常用的工具:PyInstaller和cx_Freeze。 使用PyInstaller PyInstaller是一个流行的Python打包工具,可以将Python程序及其所有依赖项打包为…...

yolov9网络结构图
文章目录 配置文件主干分支backbone预测头headyolov9网络结构图 系列文章目录 论文链接:👿 YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information代码链接:👿 https://github.com/WongKinYiu/yolov9…...

Spark 核心API
核心 API spark core API 指的是 spark 预定义好的算子。无论是 spark streaming 或者 Spark SQL 都是基于这些最基础的 API 构建起来的。理解这些核心 API 也是写出高效 Spark 代码的基础。 Transformation 转化类的算子是最多的,学会使用这些算子就应付多数的数…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...