当前位置: 首页 > news >正文

平台工程与安全

平台工程不是为了取代DevOps,而是DevOps的进一步演进和发展。本文介绍了DevOps和平台工程,以及对于安全的意义。原文: Platform Engineering and Security: A Very Short Introduction

中国云南大理的日落
中国云南大理的日落

我是一名 DevOps 工程师,个人还是希望 DevOps 仍然有其意义,因为很显然,如今已是"DevOps 已死,平台工程万岁"的时代了。

不可否认,自 2022 年以来,我们更频繁的看到"平台工程(platform engineering)"、"开发者门户(developer portal)"以及"后台(Backstage)"等术语。

本文将回答几个基本问题:DevOps 真的死了吗?什么是平台工程?区别是什么?平台工程如何处理 DevSecOps/安全问题?

DevOps 已死?

简单来说,并没有。

如果我这么多年来在技术领域学到了什么,那就是技术、框架和方法论从未真正消亡,而是会成长、适应和发展。

例如,想想敏捷开发。你第一次听说敏捷开发是什么时候?现在死了吗?这就是问题所在。

但某种程度上,DevOps 确实"死"了。虽然从传统意义上讲,DevOps 并没有从科技界消失,但确实"死"了,因为许多尝试 DevOps 的公司和团队都没有达到预期。

不过这并不是什么新闻,因为早在多年前,技术研究和咨询公司 Gartner 的一位数据分析师就已经预测,在整个 2022 年,75% 的 DevOps 计划将无法达到预期目标,而到 2023 年,这一数字可能会增长到 90%。

但需要指出的是,这些 DevOps 计划的失败并不是因为技术上的挑战,而是因为信任、所有权和团队合作等被忽视的人为因素。

DevOps 本应是解决传统运营孤岛中所有问题的银弹,让一切重新变得美好。然而不幸的是,许多团队并没有达到最初预期,而且开发人员似乎并不想从事运维工作:

开发人员不想从事运维?

公平的说,这取决于你问的是谁。有些开发人员认为 DevOps "谁构建,谁运维"的模式肯定是有益的,甚至有时是必要的,而有些开发人员则根本不想接触运维。

Twitter 上有一项关于此问题的民意调查[1],330 名开发人员参与了调查,调查结果显示,41.8% 的受访者表示支持运维任务,42.1% 的受访者表示不支持,16.1% 的受访者表示无所谓。

因此,开发人员更愿意避免与基础架构和运维打交道,这对 DevOps 来说是个坏兆头。在这种情况下,平台工程变得前所未有的热门。

平台工程

如今,非专业的最终用户经常被要求运维一系列复杂的服务,这几乎是不可能的。平台工程与 DevOps 一样,都是为应对日益复杂的现代软件架构而出现的。

DevOps 试图从文化角度解决软件开发生命周期(SDLC)中的协作和速度问题,即重视责任分担模式、持续成长和学习心态,鼓励团队合作、最佳实践和现代工具链,而平台工程则试图从另一个角度来解决问题:自助服务。

我们来看一个具体例子:

团队中的开发人员需要为新创建的应用创建数据库,但他们可能并不完全了解如何使用正确的自动化工具(比如Terraform)在特定云服务商(比如AWS)中创建关系数据库(RDS),并非所有开发人员都知道基础架构在哪里运行以及如何协调。

解决这个问题的 DevOps 方法是使团队具有足够的跨职能知识,让团队中的某个人掌握 AWS 服务和基础设施即代码的专业知识,更重要的是拥有适当权限,通过编写 Terraform 模块和在 AWS 中部署 RDS 来自动化配置云资源。

而对于平台工程,应该有一个作为"内部开发人员门户"的集成产品,这样开发人员就可以通过它以自助服务的方式请求 AWS 中的 RDS,平台将自动创建 RDS。

请注意,这只是一个例子。如果设计得当,内部开发人员门户网站可以实现更多功能。

简而言之,平台工程是一门设计和构建工具链和工作流集成产品的学科,涵盖了整个 SDLC 的操作需求,实现适度的开发人员自助服务,并为云原生时代的各个组织和团队找到合适的抽象层次。

平台工程 V.S. DevOps

虽然平台工程通过提供自动化基础架构操作的自助服务功能改善了开发人员的体验和工作效率,但并不适合所有人,尤其不适合小型团队/公司。即使团队决定购买内部开发人员门户网站作为服务,而不是从头开始构建,仍然需要在幕后维护自动化和模板。想想之前在云上创建 RDS 的例子,团队需要具备维护 Terraform 模板的知识,以生成在 AWS 中创建 RDS 的模块。

如果团队和公司规模太小,不适合开展平台工程,DevOps 可以更好的发挥作用。一般来说,在规模较小的环境中,协作更紧密,节奏更敏捷,组织摩擦更少。

关于平台工程和 DevOps,还有一点至关重要,那就是平台工程不会"取代"DevOps,它的出现不会让 DevOps 被遗忘。

尽管很多人说,随着平台工程的兴起,DevOps 已死,但这并不是一种方法取代另一种方法的情况,而是两种方法可以结合在一起。我们可以将平台工程称为 DevOps 的"进化",两者仍在促进相同的目标,并能帮助 DevOps 提高效率。我们很可能仍然会经常看到 DevOps 文化,而且许多软件工程组织也很可能会建立平台团队,从而将软件开发人员和 IT 运维人员凝聚在一起。

安全在新范式中的定位

说到 DevOps,就不能不提到安全(或 DevSecOps),毕竟安全是头等大事。

DevOps通过"左移"来解决安全问题。在传统软件开发方法中,与安全相关的任务只在SDLC的最后处理,而这可能会导致项目延迟并且不可扩展,DevOps/DevSecOps使用自动化工具尽可能早的在SDLC的每个阶段"嵌入"安全。

例如,在编写代码时,开发人员会考虑潜在的安全问题,如在哪里存储secrets和凭证,以及如何从代码中安全的获取(而不是在将所有secrets推向生产之前进行最终审计/审查)。另外,在构建虚拟机镜像或容器镜像时,每次构建都会自动进行漏洞扫描,并在发现任何漏洞时进行修复(而不是在交付生产之前进行一次性扫描)。

这就是"左移"。

所有这些以更敏捷、反应更快、更自动化的"左移"方式处理secrets的方法,在平台工程中仍然被坚持继承了下来,DevOps 和平台工程在这里并不矛盾。

只是在平台工程的帮助下,内部开发人员门户网站可以将整个过程的自动化提升到另一个层次。我们来看两个具体的例子:

想象一下,当你想创建一个新的微服务时,内部开发人员门户网站可以使用现有模板引导创建整个存储库,而不只是编写一些模板代码。然后通过技术手段构造 CI/CD 流水线、Dockerfiles 和 Kubernetes 清单,这不仅能为应用程序提供脚手架代码,还能提供 CI/CD 流水线、Dockerfiles、Helm charts和 Kubernetes YAML,其中预配置的流水线遵循 DevSecOps 最佳实践,能扫描源代码中的硬编码secrets,并对 YAML 等进行校验。

想象一下,你想存储一些secrets。与其去弄清团队正在使用哪个secrets管理器,部署在哪里,以及是否有权限创建secrets,还不如访问与secrets管理器集成的内部开发人员门户,以自助服务的方式创建secrets,而不必过多担心任何底层细节,这正是平台工程所能提供的抽象程度。

想象一下,你想在云上启动一个新的虚拟机。与其从头开始编写自动化代码(或从现有代码库中复制粘贴),然后在部署前审查安全组设置,还不如简单的访问内部开发人员门户网站,点击一个按钮,然后使用由平台工程团队维护和保护的模板来完成所有工作。

所有这些都是平台工程的魅力所在:

  • 自助服务
  • 适度抽象
  • 最佳实践和自动化
总结

本文探讨了 DevOps 和平台工程,它们之间的区别,以及新范式如何解决安全问题。


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

参考资料
[1]

Twitter上关于DevOps的调查: https://twitter.com/luca_cloud/status/1562349679660122112

本文由 mdnice 多平台发布

相关文章:

平台工程与安全

平台工程不是为了取代DevOps,而是DevOps的进一步演进和发展。本文介绍了DevOps和平台工程,以及对于安全的意义。原文: Platform Engineering and Security: A Very Short Introduction 中国云南大理的日落 我是一名 DevOps 工程师,个人还是希…...

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手:人形机器人 融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术,开发能在模拟的咖啡厅场景中承担服务员角色并…...

js处理IOS虚拟键盘弹出后输入框被遮住

​ JS IOS 前言 在项目开发的过程中,在IOS手机端系统下,当对输入框(input/textarea)进行focus操作时,键盘弹起遮住输入框。 问题描述 从页面底部focus输入框失败从页面中间focus输入框失败 原因 造成上述问题的&…...

脚手架工程使用ElementUI

在终端中执行以下指令 npm install --save element-ui 在终端中显示added 9 packages in 10s 说明安装完成 在工程的main.js中 导入并使用ElementUI: import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 可以在*.vue页面中…...

163邮箱SMTP端口号及服务器地址详细设置?

163邮箱SMTP端口号是什么?163邮件SMTP设置教程? 除了基本的邮箱账号和密码外,还需要了解SMTP服务器地址和端口号,以及相应的设置。这些设置对于确保邮件能够顺利发送至关重要。下面,蜂邮EDM将详细介绍163邮箱SMTP端口…...

【STM32】STM32学习笔记-独立看门狗和窗口看门狗(47)

00. 目录 文章目录 00. 目录01. WDG概述02. 独立看门狗相关API2.1 IWDG_WriteAccessCmd2.2 IWDG_SetPrescaler2.3 IWDG_SetReload2.4 IWDG_ReloadCounter2.5 IWDG_Enable2.6 IWDG_GetFlagStatus2.7 RCC_GetFlagStatus 03. 独立看门狗接线图04. 独立看门狗程序示例105. 独立看门…...

计算机网络——IPV4数字报

1. IPv4数据报的结构 本结构遵循的是RFC 791规范,介绍了一个IPv4数据包头部的不同字段。 1.1 IPv4头部 a. 版本(Version):指明了IP协议的版本,IPv4表示为4。 b. 头部长度(IHL, Internet Header Length&…...

java抽象方法和抽象类

1、抽象方法 如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法public abstract void run(); } 把一个方法声明为a…...

echarts鼠标向右/向左绘制实现放大/还原

echarts toolbox 的datazoom提供了绘制放大的功能,但通过鼠标绘制只能进行放大 应需求放大与还原都通过鼠标行为实现,增加从右往左绘制时还原放大结果 demo 结果 重写datazoom的原型方法实现绘制事件的拦截 const comp myChart._model.getComponent(to…...

Go编译DLL与SO

1. 简介 将Go编译成DLL/SO供其他语言调用。 .DLL&#xff1a;文件是 Windows 操作系统的动态链接库文件。.SO 文件是 Unix、Linux 和其他类 Unix 系统的共享库文件。 2. Go编译DLL/SO 注意 export后面导出的方法名一定要大写。 package main/* #include <stdlib.h>…...

css浮动

标准流&#xff1a;也叫文档流&#xff0c;指的是标签在页面中默认的排布规则。 浮动&#xff1a;让块级元素水平排列&#xff08;float:left/right;&#xff09;。 特点&#xff1a;浮动后的盒子顶对齐&#xff1b; 浮动后的盒子具备行内块的特点&#xff1b; 浮动后的元素脱…...

小程序怎么开发?怎么开发自己的小程序

一、明确需求与定位 在开发小程序之前&#xff0c;需要明确需求. 首先&#xff0c;明确小程序的定位非常重要。我们需要确定小程序是为了提供便捷的购物体验还是特定领域的服务。明确定位可以帮助我们更好地设计和优化小程序的功能&#xff0c;以符合用户的期望和需求。 其次…...

Unity(第十八部)物理力学,碰撞,触发、关节和材质

1、重力 刚体组件 英文中文描述RigidBody刚体组件physics->rigidbody &#xff0c;刚体组件使一个物体有了质量&#xff0c;重力等。&#xff0c;use gravity 勾选后&#xff0c;物体才会受到重力&#xff0c;会自动下落&#xff0c;取消勾选就不会。&#xff0c;&#xf…...

内网搭建mysql8.0并搭建主从复制详细教程!!!

一、安装mysql 1.1 mysql下载链接&#xff1a; https://downloads.mysql.com/archives/community/ 1.2 解压包并创建相应的数据目录 tar -xvf mysql-8.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local cd /usr/local/ mv mysql-8.2.0-linux-glibc2.28-x86_64/ mysql mkdir…...

MYSQL 解释器小记

解释器的结果通常通过上述表格展示&#xff1a; 1. select_type 表示查询的类型 simple: 表示简单的选择查询&#xff0c;没有子查询或连接操作 primary:表示主查询&#xff0c;通常是最外层的查询 subquery :表示子查询&#xff0c;在主查询中嵌套的查询 derived: 表示派…...

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论&#xff0c;正在刷新我们对智能本质及其发展的理解&#xff1a;传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力&#xff0c;而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…...

win11开启IPV6并手动设置地址

win11开启IPV6并手动设置地址 ipv6手动设置 假设你想要配置的IPv6地址是2001:0db8:85a3:0000:0000:8a2e:0370:7334&#xff0c;子网前缀长度为64位&#xff0c;并且默认网关是2001:0db8:85a3::1。 手动配置IPv6地址的示例步骤&#xff08;Windows操作系统&#xff09;&#x…...

WPF中如何设置自定义控件

1.圆角按钮的设置&#xff1a; 众所周知在WPF中自带有提示信息&#xff0c;当我问创建Button时&#xff0c;点击空格出现如下可选设置 带有小扳手&#x1f527;图标为相应的属性&#xff0c;如果Button有CornerRadius&#xff08;角半径&#xff09;属性就能够直接设置Button实…...

【Leetcode每日一题】二分查找 - 寻找旋转排序数组中的最小值(难度⭐⭐)(22)

1. 题目解析 Leetcode链接&#xff1a;153. 寻找旋转排序数组中的最小值 这个题目乍一看很长很复杂&#xff0c;又是旋转数组又是最小值的 但是仔细想想&#xff0c;结合题目给的示例&#xff0c;不难看出可以用二分的方法来解决 核心在于找到给定数组里面的最小值 2. 算法原…...

QT C++实战:实现用户登录页面及多个界面跳转

主要思路 一个登录界面&#xff0c;以管理员Or普通用户登录管理员&#xff1a;一个管理员的操作界面&#xff0c;可以把数据录入到数据库中。有返回登陆按钮&#xff0c;可以选择重新登陆&#xff08;管理员Or普通用户普通用户&#xff1a;一个主界面&#xff0c;负责展示视频…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...