N26:构建无缝体验的平台工程之路-Part 1

news2024/12/25 13:59:56

在 N26,在生产环境中仅需一小时即可完成启动一个新的服务,包括所有必要的基础设施依赖项、功能,以及专用的数据库集群,并且其 API 可以用于通过身份验证的请求。在激烈竞争的金融市场中,迅速推出新产品和服务对于吸引和保持客户尤为重要。

当前,初创企业在融资方面的关注点已经从追求快速交付转变为关注生存能力和盈利能力。初创企业需要更加注重预测客户需求,而不是通过不断试错来吸取经验教训。

平台工程之所以如此受欢迎,是因为它对于提高产品团队的效率非常关键。强大的平台通过自动执行重复性任务以及处理安全性、合规性和可观测性等跨领域问题,消除了处理基础设施的痛苦。

经过两年的努力,我们的平台工程战略取得了成效。在 2022 年 DevOps 现状报告中,我们的表现优于金融服务行业 97% 的受访者。现在,让我们一起来了解一下 N26 的平台是如何运作的,也希望我们的平台工程之路能够为您提供一些实用的见解。

根据2023年7月的数据,我们的软件工程师保持了每两天至少一次的部署频率。每次部署的平均耗时为9分钟,准备工作非常高效。而且仅有1.2%的部署发生事故,变更失败率极低。即使发生故障,我们的团队也能在平均21小时内完成恢复工作,保障系统平稳运行。

01 平台工程文化的重要性

2021年7月,我们致力于制定 N26 巴西企业的工程战略,积极投入了大量的努力,以交付一款专为巴西市场定制的首个移动应用程序的首次迭代版本。与我们在欧洲市场的扩张不同,巴西市场对我们来说需要重新构建一切。考虑到巴西中央银行(BACEN)制定的严格规定,我们的首要目标是测试运营效率,并建立必要的基本框架。为了确保产品的质量和稳定性,我们最初仅内部测试,并限制了内测版的使用人群为亲友和熟人。

这个新的项目虽然看起来很幸运,但实际情况并非如此。当我加入 N26 时,所有的产品和工程工作都是通过外包进行的,我们甚至需要依赖合作伙伴的基础设施来支持我们的工作。

我们的第一个应用程序版本已经通过了内部测试,这个版本已经达到了我们的要求。然而,在竞争激烈的新银行市场中,我们需要做的更多。我们致力于为客户提供独特的价值主张,这要求我们的专业员工不断学习,并提供切实可行的解决方案来解决客户的实际问题。

当时的工程团队中一共有五人。我们展开了三天的研讨会去确定战略和文化,由于我们即将扩大工程团队规模,需要为下一阶段的运营做好准备。因此,在加快生产力的同时,快速招聘和入职人员是一项具有挑战性的工作。

在我们讨论原则时一直在重复责任的重要性,我们希望 N26 有一支自主和负责任的团队,并且积极维护其交付的成果。这种方法允许团队与其应用程序的运行方面和客户进行互动,创建反馈回路,从而交付高质量的产品。这种方式就是 "you build it, you run it"。

此外我们还确定了其他原则,就是将所有基础设施抽象为一个平台,以及利用成熟的管理实践(如产品管理)来有效管理我们的工程部门。因此,平台工程成为了我们企业文化不可分割的一部分。

02 战略规划

为了更好地推动战略规划,我们通过影响地图(Impact Mapping)来探究四个问题:为什么需要平台工程、谁是用户、如何实施以及具体做什么。重要的是要明确为什么我们要这样做,因为只有了解了目标,我们才能更好地应对突发状况。

我们的业务计划在客户增长方面取得了积极反馈,到2022年底,我们的团队计划扩大20倍,人数从5人增加到100人。在短短1.5年内实现巨大增长,除了实力雄厚的平台,还需要卓越的开发者体验。

对于 "为什么需要平台工程?"这个问题,我们的答案是因为希望开发人员在 Day 1能轻松部署。但是,在讨论我们需要开发哪些功能来实现这一目标之前,我们先讨论了谁会受到这一目标的影响。也就是“谁是我们的用户?”

我们对 "谁是我们的用户?"这个问题的回答是产品工程师。作为工程部门,我们对业务的主要贡献是为团队配备足够的人员,并使他们富有成效。这些团队将通过解决客户的具体问题直接为业务做出贡献。然后,我们跟进了解希望产品工程师具备哪些行为,以帮助我们实现预期目标。

在回答"怎么做?"这个问题时,我们关注两个方面。首先,我们期望产品工程师能够负责并维护他们所开发的产品,确保产品的稳定性和可靠性。其次,我们希望他们能够从 Day 1 开始就提高工作效率,为公司创造更多的价值。这些是我们想要实现的目标。最后,我们一起讨论了采取哪些措施来支持我们期望产生的影响。

我们提供了一份功能列表,以回答“要做什么?”的问题。这些功能是根据预期效果和业务目标而定的、完全适应具体情况的功能。此外,我们还提供非技术性功能,例如入门指南和文档索引,以更好地满足用户的需求。

在充分理解了我们的战略重要组成部分之后,再来聊聊对产品工程师的体验有什么规划和期望。

03 绘制开发人员体验图

我们的影响地图呈现了两个特征,这两个特征进一步强调了基础架构的抽象原则(即将基础架构的底层细节进行抽象化,以便产品工程师更好地应用)以及我们在文化中设定的同质性和一致性原则。我们需要思考向产品工程师提供怎样的开发者体验才是我们希望达到的目标。

我之前曾在一家新银行工作过,这家银行拥有近 2000 万客户和 350 多项服务。少数几个知道新服务供应所需步骤的人很自豪。平台工程非常强大,但开发人员体验的这一部分缺乏自助服务功能。我记得有人说过,由于大量未记录的手动工作,平均部署一个新服务到生产环境需要至少两周的时间。

你能想象要等三个月才能有一个工作环境来部署服务吗?Rafay Systems 最近的一项研究发现,每四家企业中就有一家需要三个月或更长时间才能将应用程序或服务从代码完成阶段部署到生产阶段,9%的企业需要六个月或更长时间。这是一种巨大的资源浪费。

因此我们需要考虑优化配置流程,以实现快速将新的服务部署到生产环境,并能够在入职培训时进行演示。为了减轻产品和平台工程师的配置工作负担,我们提出了一套简化流程,让产品工程师能够轻松完成配置工作。

我们希望平台将通过自动化来解决配置问题,这是一种类似 PaaS 的体验:产品工程师只需要在一个代码仓库中提交包含 yaml 代码的拉取请求,该代码仓库就可以编排在云环境中启动新服务的过程。

在拉取请求批准后开始准备生产环境,包括集群管理、配置数据库、设置消息基础设施等。先基于服务框架创建代码仓库,并进行首次部署以确保环境配置正确,然后产品工程师克隆新创建的服务代码仓库。每当将代码推送到主干分支时,就会自动将服务部署到生产环境。

有了对开发人员体验较为全面的了解和认识,接下来我们会在第二部分深入探讨平台需要构建的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试:身份认证(Auth认证的接口)+查询发布会

上一篇:接口测试case:查询发布会-CSDN博客(无身份认证版) 1、前置基础 一般测试工具都会提供一个User Auth/Authorization的选项,要求输入username/password字段。 系统登录功能时的username/password,是…

ke13--10章-1数据库JDBC介绍

注册数据库(两种方式),获取连接,通过Connection对象获取Statement对象,使用Statement执行SQL语句。操作ResultSet结果集 ,回收数据库资源. 需要语句: 1Class.forName("DriverName");2Connection conn DriverManager.getConnection(String url, String user, String…

机器学习 类别特征编码:Category Encoders 库的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

java设计模式学习之【组合模式】

文章目录 引言组合模式简介定义与用途:实现方式UML 使用场景优势与劣势组合模式在Spring中的应用员工结构示例代码地址 引言 设想您正在组织一个大型派对,需要将各种食品和饮料按类型整理。您可能有单独的物品,如一瓶苏打水,也可…

您知道计算机是怎么分类的嘛

地表最强计算机 第 61 版全球最强大的超级计算机已经发布。名为 Top500,顾名思义,该列表列出了全球 500 台最强大的超级计算机。榜单显示,美国的AMD、英特尔和IBM处理器是超级计算系统的首选。在 TOP10 中,有四个系统使用 AMD 处理…

JWT安全及WebGoat靶场

JWT 安全 cookie(放在浏览器) cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie 由服务器生成,发送给浏览器,浏览器把 cookie 以 kv 形式保存到某个目录下的…

1+x网络系统建设与运维(中级)-练习题4

一.设备命名 LSW1 <Huawei>sys [Huawei]sysn LSW1 [LSW1]un in en 同理可得&#xff0c;给所有设备如以上命令一样配置 二.VLAN LSW1 [LSW1]vlan ba 1 10 20 100 [LSW1]int g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type trunk [LSW1-GigabitEthernet0/0/1]port tru…

axios调接口传参特殊字符丢失的问题(encodeURI 和 encodeURIComponent)

1、axios调接口特殊字符丢失的问题 项目开发过程中遇到一个接口传参&#xff0c;参数带特殊字符&#xff0c;axios调接口特殊字符丢失的问题 例如接口&#xff1a; get/user/detail/{name} name是个参数直接调接口的时候拼到接口上&#xff0c;get/user/detail/test123#$%&am…

记一次Java内存溢出导致程序宕机的问题及排查

Hi, I’m Shendi 记一次Java内存溢出导致程序宕机的问题及排查 问题场景 今天在使用工具中的 word 转 pdf 出了问题&#xff0c;报502错误&#xff0c;打开服务器发现服务被关闭了&#xff0c;起初以为是误关&#xff0c;打开后重新转换又出现了这个问题&#xff0c;在项目文件…

微信机器人接口开发

简要描述&#xff1a; 设置http回调地址 请求URL&#xff1a; http://域名地址/setHttpCallbackUrl POST 请求头Headers:&#xff08;别忘了传&#xff09; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必…

【尘缘送书第五期】Java程序员:学习与使用多线程

目录 1 多线程对于Java的意义2 为什么Java工程师必须掌握多线程3 Java多线程使用方式4 如何学好Java多线程5 参与方式 摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰…

【Java 基础】23 国际化

文章目录 1.概念2.原理1&#xff09;Locale2&#xff09;ResourceBundle3&#xff09;MessageFormat 3.例子1&#xff09;准备资源文件2&#xff09;加载资源文件3&#xff09;格式化消息&#xff08;非必须&#xff09; 总结 在全球化的今天&#xff0c;开发支持多语言的应用变…

配置BFD状态与接口状态联动示例

1、BFD检测IP链路。 在IP链路上建立BFD会话&#xff0c;利用BFD检测机制快速检测故障。BFD检测IP链路支持单跳检测和多跳检测&#xff1a; BFD单跳检测是指对两个直连系统进行IP连通性检测&#xff0c;“单跳”是IP链路的一跳。 BFD多跳检测是指BFD可以检测两个系统间的任意路…

每日一练:插入排序

1. 概念及原理 插入排序是一种简单直观的排序算法&#xff0c;其基本思想是将一个元素插入到已经排序好的部分&#xff0c;然后不断地重复这个过程&#xff0c;直到整个数组有序。下面是插入排序的算法原理&#xff1a; 初始状态&#xff1a; 数组被分为已排序和未排序两个部分…

论文阅读——Deformable ConvNets v2

论文&#xff1a;https://arxiv.org/pdf/1811.11168.pdf 代码&#xff1a;https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 1. 介绍 可变形卷积能够很好地学习到发生形变的物体&#xff0c;但是论文观察到当尽管比普通卷积网络能够更适应物体形变&#xff…

Python中如何判断List中是否包含某个元素

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;判断一个列表&#xff08;List&#xff09;是否包含某个特定元素是常见的任务之一。在本文中&#xff0c;将深入探讨多种判断List成员包含性的方法&#xff0c;并提供丰富的示例代码&…

Scratch少儿编程系统开发时案例验证的必要性

scratch少儿编程[1] 随着少儿编程教育的普及&#xff0c;越来越多的公司和集成商开始关注scratch少儿编程系统的二次开发。scratch是一个由麻省理工学院媒体实验室开发的免费、开源的少儿编程软件。它具有易用、趣味性强、可扩展性强等特点&#xff0c;非常适合少儿编程教育。…

产品成本收集器流程演示

感谢大佬的文章&#xff0c;我只是一个翻译搬运工&#xff0c;原文地址&#xff1a;产品成本收集器 概述 SAP 令人兴奋的部分之一是它在不同操作模块之间的集成程度。使用产品成本收集器来跟踪生产就是一个很好的例子。在本博客中&#xff0c;我计划遵循产品成本收集器流程&a…

分享一个微信红包封面过审方法

大家好&#xff0c;我是小悟 兄弟们&#xff0c;已经12月份了&#xff0c;今年的最后一个月&#xff0c;距离过年还有两个月左右&#xff0c;如果你需要制作微信红包封面&#xff0c;我建议你现在就可以着手了。 一方面&#xff0c;临近春节&#xff0c;会有很多人在制作红包封…

[b01lers2020]Life on Mars 一个接口的sql schema.schemate表

这里还是很简单的 啥也没有 然后抓包看看 发现传递参数 直接尝试sql 然后如果正确就会返回值 否则 返回1 chryse_planitia union select database(),version() 发现回显 直接开始注入 chryse_planitia union select database(),version()chryse_planitia union select data…