平台工程文化:软件开发的创新路径和协作之道

在快速发展的软件开发领域,具有前瞻性思维的企业组织正在拥抱平台工程文化的变革力量。这种创新方法强调创建共享平台、工具和实践,使开发人员能够更快、更高效地交付高质量的软件。在本文中,我们将深入探讨平台工程文化的核心原则和深远的好处,探索它如何在技术团队中促进协作、创新和可扩展性的独特融合。

01 平台工程文化的本质

平台工程文化的核心理念是建立一套可重复使用、可扩展的工具、服务和框架,为整个组织的开发人员赋能。这种文化提倡创建可被不同团队和项目利用的集中式平台,而不是将基础设施和通用服务视为孤立的项目。这种方法的协作性和前瞻性消除了重复劳动,简化了开发流程,并确保了不同产品和服务之间协调一致的产出。

02 平台工程的基本原则

  • 抽象和标准化:平台工程师熟练地抽象底层基础设施和服务的复杂性,为开发人员提供简单和标准化的 API。这样,他们就能让开发人员专注于构建特性和功能,而不是处理低层次的实施细节。

  • 自动化:平台工程文化的核心是对自动化的高度重视。自动化调配、部署、测试和监控流程使团队能够以更高的速度、可靠性和一致性交付软件。

  • 自助服务:平台工程师努力赋予开发人员自助服务功能,使他们能够毫不费力地访问和管理资源。这些自助服务平台有助于加快迭代速度,减少日常任务对集中团队的依赖。

  • 持续改进:平台工程文化深深植根于持续改进的原则。平台工程师会积极征求开发人员的反馈意见,找出痛点,迭代演进平台,以满足不断变化的开发需求

03 拥抱平台工程文化的优势

  • 加速开发:通过提供预构建的组件和服务,平台工程文化加速了开发过程。开发人员可以集中精力构建应用逻辑,从而减少冗余,加快新功能和新产品的上市时间。

  • 增强协作:平台工程文化培养跨团队协作精神。平台团队与应用程序开发团队携手合作,促进合作意识和共同责任,以交付高质量软件。

  • 可扩展性和效率:共享平台本质上可以减少冗余工作并提高软件开发效率。随着组织的发展,该平台可以无缝扩展以适应不断增长的需求,而无需大幅增加资源。

  • 一致性和可靠性:标准化平台可确保各产品的一致性,从而带来更可靠、更可预测的用户体验。此外,自动化流程可减少人为错误,提高系统可靠性。

  • 鼓励创新:通过将常见的基础架构问题委托给平台团队,应用程序开发人员可以专注于创新和构建独特的功能,为其产品或服务增加实质性价值。

  • 降低风险:标准化平台降低了系统故障和中断的风险,提高了整体可靠性和性能。

向平台工程文化过渡可能会带来一些挑战。循序渐进的采用过程,加上持续的反馈循环,可以确保无缝过渡,并确保每个人对平台工程文化的接受。

04 案例研究:Licious 的卓越平台工程之旅

以 Licious 为例,我们将分析向平台工程过渡的实际好处与优势。在 Licious 内部已经意识到需要一种更加精简、可扩展和高效的软件开发和部署方法。

在这一过程中,和许多其他企业一样,都遇到了与软件开发规模相关的挑战。随着应用程序数量的不断增加、版本的频繁发布以及复杂的技术堆栈,Licious 发现在 DevOps 实践中保持一致性、可靠性和效率变得越来越困难

认识到现有 DevOps 方法的局限性,去年年初,我们决定过渡到平台工程,以全面应对这些挑战。随后我们分阶段实施了战略路线图。

第 1 阶段:通过自动化和左移增强 DevOps 能力

在第一阶段,我们确定了以下工作领域:

  • 战略和可衡量指标:我们对当前的实践进行了全面评估,找出了痛点,并制定了一个具有衡量标准的强大 DevOps 工程方法愿景。我们制定了明确的战略,使平台工程目标与公司的长期业务目标保持一致。

  • 团队重组和技能发展:对技术熟练的 DevOps 工程师团队进行了重组和技能提升,使其专门从事平台工程。还提供了额外的培训,以确保他们掌握 IaC、容器化和通过云原生方法实现自动化部署管道等领域的必要知识。帮助他们将编程作为核心,而不仅仅是脚本。

  • 采用基础设施即代码:我们投资于 IaC 实践,使用 Terraform 自动配置和管理基础设施。这使得基础架构部署和补丁的一致性、可重复性和版本控制成为可能。

  • 容器化和编排:使用 Docker 进行容器化,并通过 Kubernetes 进行协调,以简化跨不同环境的应用部署、扩展和管理。采用云原生堆栈。创建基于 Kubernetes 的操作员,以自动化方式处理手动操作。

  • 在 45 天内将 100+ 项服务从 EC2 迁移到 Kubernetes

  • GitOps 和左移:我们投入了大量时间开发自助服务流程,并充分利用 GitOps 原则,使开发团队能够自主调配资源、管理部署和监控服务。这消除了资源瓶颈,减少了人工干预的需要。

  • 持续改进:我们不断收集开发团队的反馈意见,并根据实际使用情况和挑战迭代改进平台工程实践。

第一阶段成果

第一阶段的结果非常积极。在团队内部,我们能够:

1. 减少 DevOps 每天执行的冗余任务。

2. 减少对 DevOps 的依赖和阻碍。

3. 提高系统的可靠性和可扩展性。

4. 减少由于高峰时段和活动而导致的意外中断。

5. 服务所有者更有能力自信地管理其应用程序。

6. 最重要的是,改善DevOps工程师的工作与生活平衡,减少夜间意外急救时间。

第 2 阶段:内部开发人员平台

Licious 平台工程之旅的下一阶段是内部开发人员平台。

为什么?

在向 Kubernetes 平台迁移的过程中,我们面临的大部分挑战都是如何找到已废弃服务的所有权以及部署在 Git 上的活动分支。因此,我们萌生了建立内部服务目录的想法。

要解决什么问题? 

减少新服务的载入时间;改善开发人员体验并实施服务成熟度指数;简化我们从开发到生产的发布过程,实现对 DevOps/平台工程师的零依赖。

进展如何?

目前,我们的 IDP 之旅还处于初期阶段。但是,当我们越多地了解其他公司对内部开发人员平台(如 Spotify 的 Backstage)的调整时,我们就越坚信自己走在正确的道路上。

第二阶段成果

Licious 从 DevOps 到平台工程的转变,展示了采用整体方法进行软件开发和部署的变革性影响。通过创建一个标准化、可扩展和自助式的平台,将效率、可靠性和协作提升到新的水平。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/213608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala 从入门到精通

Scala 从入门到精通 数据类型 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…

基于STM32 + DMA介绍,应用和步骤详解(ADC多通道)

前言 本篇博客主要学习了解DMA的工作原理和部分寄存器解析&#xff0c;针对ADC多通道来对代码部分&#xff0c;应用部分作详细讲解&#xff0c;掌握代码编程原理。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 本次博客开发板使用的是正点原子精英版&am…

springboot_java养老院老年人问诊服务预约系统ssm

系统的目标是为管理员&#xff0c;服务者&#xff0c;医生和用户搭建一个网上沟通平台&#xff0c;保证四方的安全&#xff0c;并使四方的利益最大化。 .用户&#xff1a; &#xff08;1&#xff09;用户注册登入页面&#xff1a;用户进行操作时需要是已注册登入用户 &#xff…

WireShark监控浏览器登录过程网络请求

软件开发中经常前后端扯皮。一种是用Chrome浏览器的开发者工具 来看网络交互&#xff0c;但是前提是 网络端口的确是通的。 WireShark工作在更低层。 这个工具最大的好处&#xff0c;大家别扯皮&#xff0c;看网络底层的log&#xff0c;到底 你的端口开没开&#xff0c; 数据…

结合ColorUI组件开发微信小程序

1.自定义组件生命周期函数&#xff1a; Component({data: {},attached() {console.log("自定义组件生命周期函数 attached--先执行");this.getPos();},ready() {console.log("ready生命周期函数---在attached之后执行")},methods: {getPos() {var that th…

uniapp 使用 $emit和$on——$on中无法为data中的变量赋值

问题在于this的指向&#xff0c; 解决办法是使用变量保存$on&#xff0c;其次再为data中的值赋值 以下是具体代码&#xff1a; 1、html代码&#xff1a; <view class"form_picker" click"selePositionFun()"><view class""><inp…

基于remix+metamask+ganache的智能合约部署调用

在我们部署合约时为了让它更接近真实区块链去中心化体验&#xff0c;我们需要调用小狐狸&#xff08;Metamask&#xff09;来进行真实交易&#xff0c;而metamask里没有内置虚拟测试币&#xff0c;我们需要进行调用Ganache来添加带有虚拟测试币的账号。以上就是三者的关系&…

PHP基础 - 输入输出

在 PHP 中,有多种方法可以用来输出内容。下面是其中的几种: 1、echo: 这是最常见的输出语句之一,可以输出一个或多个字符串。它是一个语言结构,可以省略括号。使用示例如下: <?php // 使用 echo 语句输出一个字符串 echo "Hello, world!\n";// 可以使用…

面向对象中的单例模式

1、什么是设计模式 设计模式就是前人根据实际的问题提出的问题解决方案&#xff0c;我们把这种就称之为设计模式。 2、单例模式 单例模式是一种常见的设计模式&#xff01; 所谓的设计模式&#xff0c;不是一种新的语法&#xff0c;而是人们在实际的应用中&#xff0c;面对…

数据结构之哈希表

数据结构之哈希表 文章目录 数据结构之哈希表一、哈希概念二、哈希冲突三、哈希函数常见哈希函数 四、哈希冲突解决闭散列闭散列的思考线性探测线性探测的实现 二次探测 开散列开散列概念开散列的思考开散列实现 五、开散列与闭散列比较 一、哈希概念 顺序结构以及平衡树中&am…

2023-12-05 Qt学习总结2

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言五 Hello Qt!六 Qt控件和事件七 Qt信号和槽八 Qt自定义信号和槽总结 前言 要解决问题: 学习qt最核心知识, 多一个都不学. 五 Hello Qt! 现在我们已经有了一个空窗口工程, 传统上, 我们要实现一个"Hello …

2023最新八股文前端面试题

第一章 Css 1.说一下CSS的盒模型。 在HTML页面中的所有元素都可以看成是一个盒子盒子的组成:内容content、内边距padding、边框border、外边距margin盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(border padding) 控制盒模型的模式…

linux下部署frp客户端服务端-内网穿透

简介 部署在公司内部局域网虚拟机上的服务需要在外网能够访问到&#xff0c;这不就是内网穿透的需求吗&#xff0c;之前通过路由器实现过&#xff0c;现在公司这块路由器不具备这个功能了&#xff0c;目前市面上一些主流的内网穿透工具有&#xff1a;Ngrok&#xff0c;Natapp&…

金融银行业更适合申请哪种SSL证书?

在当今数字化时代&#xff0c;金融行业的重要性日益增加。越来越多的金融交易和敏感信息在线进行&#xff0c;金融银行机构必须采取必要的措施来保护客户数据的安全。SSL证书作为一种重要的安全技术工具&#xff0c;可以帮助金融银行机构加密数据传输&#xff0c;验证网站身份&…

Uncle Maker: (Time)Stamping Out The Competition in Ethereum

目录 笔记后续的研究方向摘要引言贡献攻击的简要概述 Uncle Maker: (Time)Stamping Out The Competition in Ethereum CCS 2023 笔记 本文对以太坊 1 的共识机制进行了攻击&#xff0c;该机制允许矿工获得比诚实同行更高的挖矿奖励。这种名为“Uncle Maker”的攻击操纵区块时间…

机器视觉相机镜头光源选型

镜头选型工具 - HiTools - 海康威视 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 海康机器人-机器视觉产品页杭州海康机器人股份有限公司海康机器人HIKROBOT是面向全球的机器视觉和移动机器人产品及解决方案提供商&#xff0c;业务聚焦于…

【Python】 生成二维码

创建了一个使用 python 创建二维码的程序。 下面是生成的程序的图像。 功能描述 输入网址&#xff08;URL&#xff09;。 输入二维码的名称。 当单击 QR 码生成按钮时&#xff0c;将使用 QRname 中输入的字符将 QR 码生成为图像。 程序代码 import qrcode import tkinterd…

<习题集><LeetCode><链表><61/83/82/86/92>

目录 61. 旋转链表 83. 删除排序链表中的重复元素 82. 删除排序链表中的重复元素 II 86. 分隔链表 92. 反转链表 II 61. 旋转链表 https://leetcode.cn/problems/rotate-list/ public ListNode rotateRight(ListNode head, int k) {//k等于0&#xff0c;或者head为空&…

【数据结构】单调栈与单调队列算法总结

单调栈 知识概览 单调栈最常见的应用是找到每一个数离它最近的且比它小的数。单调栈考虑的方式和双指针类似&#xff0c;都是先想一下暴力做法是什么&#xff0c;然后再挖掘一些性质如单调性&#xff0c;最终可以把目光集中在比较少的状态中&#xff0c;从而达到降低时间复杂…

Java LeetCode篇-深入了解二叉树的经典解法(多种方式实现:构造二叉树)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 从前序与中序遍历序列来构造二叉树 1.1 实现从前序与中序遍历序列来构造二叉树思路 1.2 代码实现从前序与中序遍历序列来构造二叉树 2.0 从中序与后序遍历序…