自动化的艺术

news2024/11/17 7:36:23

对于基础设施来说,很多服务都有类似的架构、数据库交互和UI,本文介绍了Paypal通过模板自动化基础设施微服务脚手架代码的实践,最大化节约了开发服务的时间并保证了服务的一致性。原文:The Art of Automating Automation[1]

简介

作为PayPal网站可靠性和云工程(SRCE, Site Reliability & Cloud Engineering)团队的一部分,我们一直致力于通过自动化提升效率。然而,编写能够让人凭直觉自动化完成工作的软件并不是一件简单的任务。在PayPal基础设施中,任何操作的自动化组件都必须提供最高级别的可靠性、安全性、效率和自助服务能力。本文我们将讨论如何在全球网络服务(GNS, Global Network Services)中实现自动化。

GNS团队有大量的操作需要自动化,范围从需要几小时人力投入的普通任务,到需要运维团队投入很多天精力的复杂任务。对我们来说,最大的挑战是如何在不消耗大量开发周期的情况下自动化这些大大小小的操作,我们需要努力证明“ROI(投资回报)”的合理性,这点特别重要。

软件服务需求

要将任何网络功能转变为服务,需要完成以下一系列任务:

用户界面开发

  • 开放给PayPal开发社区的所有服务都必须具有某种形式的用户界面(UI),以便用户像使用任何其他服务一样使用网络。

数据库交互和表管理

  • 大多数服务需要设计数据库表以及编写数据库交互代码来操作数据。

核心业务逻辑

  • 需要编写和测试特定服务的实际业务逻辑。

与自动化工具Terraform集成

  • 我们的基础用户包括网络运营团队,他们不会使用基于UI的服务。相反,他们基于GitOps模式运作,这意味着我们开发的所有服务都需要通过开发Terraform provider与Terraform集成。

认证和授权

  • 这涉及到与标准的企业身份验证(如单点登录、多因素身份验证、角色管理等)的集成。

服务帐户,API消费者的节流和限速

  • 我们决定为所有东西提供API。因此,我们开发的所有服务都必须提供服务帐户,并确保能够节流和限速。

从上面的列表可以看出,构建一个可行的网络服务需要花费大量时间开发重要的外围组件。在理想情况下,我们能够只把时间花在编写核心业务逻辑上,而不做其他事情。通过两种方式,我们达到了编写更少代码的理想状态。

解决这个问题的第一种方法是迁移到真正的微服务组件以及构建可插拔的库架构,第二种方法是基于模板的自动代码生成,可以基于通用模板生成UI、后端和数据库层代码。

代码生成

长期以来,数据建模一直是设计良好的软件产品的支柱。一旦确定了基本数据构建块,构建围绕数据工作的软件组件就比较容易了。如果数据是以标准格式获取的,那么围绕数据的各种软件组件就有很大的自动化空间。

这正是我们采用的方法。我们团队的所有项目都从识别数据模型开始。数据模型是用YAML格式定义的,这样我们的动态代码生成模块就可以为系统的各个部分生成代码。下图显示了这个过程:

GNS软件架构
GNS软件架构
UI代码生成

React框架已经被包括PayPal在内的业界广泛采用。PayPal应用程序团队有一个非常模块化的React库,用于构建面向客户的应用程序。我们以该库为基础,在任何合适的地方使用。

大多数系统程序员都不熟悉UI编程。为了促进快速UI组件开发,我们依赖于模型驱动设计。使用模型驱动设计,典型的GNS开发人员只需指定UI布局,不用编写任何UI代码。

GNS代码生成引擎采用用户定义的模型,并使用React框架,生成一个独立的React代码容器,带有功能完整的UI。这种方法允许开发人员专注于应用程序的业务逻辑。

后端代码生成

过去,开发提供REST API功能的微服务非常繁琐,开发人员需要为每个端点编写软件并配置web服务网关。然而,Flask框架作为标准框架已经得到了Python开发人员的广泛认可。类似的,Golang除了内置支持之外,还有gorilla/mux框架。

大多数GNS服务是用Golang或Python编写的。我们在上述框架的帮助下,设计了基于Jinja模板生成通用代码的GNS代码生成引擎。

基于以YAML格式定义的数据模型,代码生成引擎使用预定义的Jinja模板来生成服务的基础代码。GNS开发人员可以在这些代码的基础上实现精确的业务逻辑,从而减少编程错误,并消除从头编写所有内容的乏味工作。

数据库层代码生成

大多数GNS服务需要某种形式的数据库来存储建模阶段所描述的信息。编写代码来添加、删除和修改数据库中的条目是很繁琐的,而且容易出现bug、风格不统一等。Python和Golang拥有处理对象关系映射(ORM, Object Relationship Mapper )的开源库,我们选择采用sqlalchemy来规范化数据库操作。

由于模型是用YAML格式定义的,我们的代码生成引擎除了生成后端代码外,还生成数据库处理方法。

Terraform Provider代码生成

Terraform已经成为自动化基础设施的最常用工具。作为GNS服务提供商,我们已经决定所有自动化服务都将有针对Terraform的接口,从而能够适配正被不断采用的持续部署流水线。

Terraform体系架构灵活且方便扩展,能够为我们喜欢的任何自动化添加Provider。请参阅terrform文档了解更多细节。

Terraform Provider架构
Terraform Provider架构

由于Terraform Provider是一个构造良好的库,我们的代码生成引擎可以基于Jinja模板生成基于golang的Provider程序,然后将这些代码构建到一个可插拔模块中,该模块可以安装到正在运行的terraform实例中。一旦完成,用户就可以在GNS服务上进行标准的terraform操作,就像任何其他服务一样。

结论

自动化任何网络服务所需的大部分任务已经由我们的代码生成引擎生成,从而允许我们只专注于服务的核心逻辑。转向微服务体系架构以及采用基于模板的代码生成和模型驱动的体系架构使我们能够以更快的速度生产服务。在撰写本文时,我们可以在一天之内完成任何服务的工作框架,从而帮助团队可以专注于核心逻辑,并在更短的时间内产生更多的服务。

References:
[1] The Art of Automating Automation: https://medium.com/paypal-tech/the-art-of-automating-automation-17b32594a41f

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

- END -

本文由 mdnice 多平台发布

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

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

相关文章

6.4 构建并评价回归模型

6.4 构建并评价回归模型 6.4.1 使用sklearn估计器构建线性回归模型6.4.2 评价回归模型小结 6.4.1 使用sklearn估计器构建线性回归模型 按照研究方法划分,回归分析研究的范围大致如图所示:   在回归模型中,自变量与因变量具有相关关系&…

python对象与类

文章目录 简述类与对象什么是类?什么是对象?类与对象的关系什么是面向对象编程? 创建类与对象创建创建对象引用类的成员类的属性类的行为self的作用 简述类与对象 什么是类? 类就是包含属性和行为的一种说法,在程序上的class即…

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)【上篇】

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

GPT问题记录

如何遍历切片 1.for循环 package mainimport "fmt"func main(){s : []int{1,2,3,4}for i : 0; i < len(s); i{fmt.Printf("s[%d]%d\n",i,s[i])} } 运行结果 2.range 关键字 package mainimport "fmt"func main() {s : []int{1,2,3,4,5}for in…

苹果公布Apple Vision Pro头显的六种交互手势

苹果 Vision Pro 头显的交互&#xff0c;并不依赖物理控制器&#xff0c;而是通过追踪眼球和手势来交互虚拟物体。苹果设计师在近日的开发者会议中&#xff0c;概述了 Vision Pro 头显可以使用的交互手势。 Tap&#xff1a; 同时点击拇指和食指会向头戴显示设备发出信号&…

【.net core】图片压缩

使用SkiaSharp组件实现功能&#xff0c;组件下载在nuget中安装最新版本至项目 功能实现类&#xff1a; using SkiaSharp; using System; using System.Collections.Generic; using System.IO; using System.Text;namespace YiSha.Util {public static class ImageCompression{…

瑞吉外卖功能完善

文章目录 获取源码1、后台管理——菜品起售停售前端请求数据分析编写方法 2、后台管理——菜品删除前端请求数据分析编写方法 3、后台管理——修改套餐前端请求分析方法一&#xff1a;完成点击修改时数据的回显方法二&#xff1a;修改套餐 4、后台管理——启停售套餐前端请求分…

全国PMO专业人士年度盛会︱2023第十二届PMO大会将于8月在京召开

企业要基业长青就必须持续保持组织活力。企业的内外部环境不会一成不变&#xff0c;顺应变化及时调整变革避免组织出现僵化低效才能在激烈的市场竞争中存活下来。PMO从成立到逐渐发挥越来越强的作用本身即是一种组织变革的过程&#xff0c;从这个意义上来说PMO因组织变革而生&a…

epson L350打印机拆解

卡扣固定 搓纸轮 送纸器

数据库的基本知识---入门前必读

目录 一.认识数据库 二.数据库的分类 三.SQL介绍 3.1SQL是什么 3.2.SQL语言使用方式 总结 &#x1f63d;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f308;梦的目标&#xff1a;努力学习&#xff0c;打败数据库&#xff0c;拼搏一…

echarts 按需引入解决打包体积过大问题

问题&#xff1a;由于服务器网速特别慢大概100kb打包文件过大导致第一次加载静态文件时特别慢&#xff0c;优化echarts 原先引入的方式和使用&#xff08;导致体积过大&#xff09;&#xff1a; // 引入 echarts 核心模块&#xff0c;核心模块提供了 echarts 使用必须要的接口…

10. Java对象内存布局和对象头

10.1 面试题 ● 说下JUC&#xff0c;AQS的大致流程 ● CAS自旋锁&#xff0c;是获取不到锁就一直自旋吗&#xff1f;CAS和synchronized区别在哪里&#xff0c;为什么CAS好&#xff0c;具体优势在哪里&#xff1f; ● sychronized底层是如何实现的&#xff0c;实现同步的时候用到…

idea导入java web项目带jar

可参考&#xff1a;idea导入Javaweb项目_小黑cc的博客-CSDN博客 配置tomcat 加载项目jar依赖 最后点ok&#xff0c;tomcat启动 jsp页面的项目&#xff0c;必须要加载这两个jar包

windows 服务程序和桌面程序集成(二)服务程序

系列文章目录链接&#xff1a; windows 服务程序和桌面程序集成&#xff08;一&#xff09;概念介绍windows 服务程序和桌面程序集成&#xff08;二&#xff09;服务程序windows 服务程序和桌面程序集成&#xff08;三&#xff09;UDP监控工具windows 服务程序和桌面程序集成&…

OpenLayers.js 入门教程:打造互动地图的入门指南

theme: smartblue 本文简介 戴尬猴&#xff0c;我是德育处主任 本文介绍如何使用 OpenLayers.js (后面简称 ol)。ol 是一个开源 JavaScript 库&#xff0c;可用于在Web页面上创建交互式地图。 ol能帮助我们在浏览器轻松地使用地图功能&#xff0c;例如地图缩放、地图拖动、地图…

双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时&#xff0c;提到要把减污降碳协同增效作为促…

数字电子电路绪论

博主介绍&#xff1a;一个爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;程序猿之数字电路 1.科技革命促生互联网时代 科技革命对互联网时代的兴起产生了巨大的推动作用。以下是一些科技革命对互联网时代的促进因素&#xff1a; 1. 计算机技…

赢涛智慧工单 v2.4.3 公众号模块版

适用于&#xff1a;入驻加盟、运价查询、申请返礼、工单售后、商标注册、执照申请、汽车保养、年审代办、材料申请、流程审批、贷款申请、废品回收、投诉建议、业务登记、在线督导、购房申请、设备维修、门店报修、信息申请、材料提交、合作咨询、党群服务、入党申请、补贴申领…

内网隧道代理技术(三)之使用SSH端口转发

使用SSH端口转发 SSH介绍 SSH通过网络远程访问主机提供保护&#xff0c;可以对客户端和服务端之间的数据传输进行压缩和加密&#xff0c;有身份验证、SCP、SFTP、和端口转发的功能 SSH转发常用的参数介绍&#xff1a; 参数作用-C请求压缩所有数据-D动态转发、即socks代理-f…

np.meshgrid()与网络表格

目录 数组是如何绘制表格的&#xff1f;分别绘制X和Y图像绘制等高线 数组是如何绘制表格的&#xff1f; 我们先将两个数组传入np.meshgrid()&#xff0c;查看该函数是如何绘制网格的。 import numpy as npx np.linspace(-2, 2, 5) y np.linspace(-2, 2, 5)X, Y np.meshgri…