对话Shopify:平台工程如何帮助其自动化应对流量高峰

本文脱胎于 Obeservability Talk,完整内容请查看:

https://www.youtube.com/watch?v=6ShtsTTUizI

平台工程是近年来的热门话题。我们已经在 2023 年看到了开发人员们对它的追捧,预计在 2024 年后,我们也许会看到平台工程被广泛应用于企业生产。针对这一话题,我将向已经大规模实施该技术的公司学习——全球知名电商平台 Shopify。

在最新一期的 OpenObservability Talks 中,我们有幸邀请到 Shopify 的生产工程总监 Aparna Subramanian。在此之前,她曾担任 VMware 的工程总监,是混合云 Kubernetes 平台 Tanzu on vSphere 的创始成员之一。

01 Shopify 的业务规模

一开始,我们探讨了 Shopify 的庞大业务运营规模,Aparna 详细介绍了 Shopify 当前巨大的业务量,尤其是在“黑色星期五”和“剁手星期一”等重要电商营销节点。

她分享到,在这种高峰段期间,Shopify 的应用服务器每分钟要处理 5800 万次请求,数据库每秒要处理 1900 万次查询。如果查看一下他们的流基础设施,每秒大约也要处理 2900 万条信息流。这意味着 Shopify 平台工程团队需要管理规模庞大的基础设施

02 Shopify 平台工程的演进

接着,我们开始讨论 Shopify 最初是如何采用平台工程的。Aparna 带我们回到 2016 年,当时 Shopify 面临着多个团队以不同方式部署生产的挑战。也就是这时,Shopify 突然意识到,采用 DevOps 将运维所有权转移给了开发人员,却没有真正给予他们合适的工具和时间来解决这些问题。从而他们开始在团队内部对此进行改进,最终平台工程在 Shopify 诞生。

“Shopify 决定采用平台工程的方法。在这个平台上,所有这些工具都是为我们的业务定制的,为我们的开发人员定制的,并且有一种统一的方式将东西部署到生产中”,Aparna 解释道,并强调了统一高效部署策略的必要性

目前,Shopify 的平台工程采用分层模式。内部设置了一个基础架构小组,在该小组内有数据平台、可观测平台、有状态系统和流平台。还有生产平台,它是支持所有这些平台的底层,而这些平台则为应用开发人员提供支持。这样,Shopify 就能快速扩大规模。Aparna 介绍称,他们每天发布大约 1,000 个 PR,而应用程序本身每天要部署到生产中 107 次。

03 Kubernetes:Shopify 平台的支柱

随着 Kubernetes 的采用,Shopify 的云原生之路发生了关键性的转变,Aparna 解释了 Kubernetes 如何成为其运维的支柱,在整个团队中运行着约 400 个 Kubernetes 集群。她表明,在 Shopify 的一切都运行在 Kubernetes 上,包括他们的无状态工作负载、应用程序和有状态工作负载,即所有的数据库。

最突出的是“平台的平台(platform of platforms)”这一概念。尽管一切都统一在 Kubernetes 下,但 Shopify 的基础架构是分层的,由专门的平台团队负责和管理不同的层级,如数据库平台、流平台和可观测性平台。

04 平台和应用程序共享可观测性

Aparna 强调的成功关键因素之一是应用开发人员和平台工程师之间的明确责任分工。在 Shopify,每个人都负责监控,并随时待命,但应用程序开发人员负责应用程序部分,平台工程师负责平台和基础设施。

Aparna 表明,当出现问题时,他们会一起排除故障,找出应用程序的问题所在。值得强调的是,在出现故障时合理安排不同角色的分工可以以更为简洁的方式解决问题。

05 Shopify 内部开发者平台

在 Shopify,正如在其他许多企业内部看到的那样,通过产品的方法来实现平台工程。平台工程团队为公司内部的开发者社区开发产品,让应用程序开发者可以通过自服务完成一切

在可观测性方面,Aparna 分享道,平台工程提供了监控生产的所有工具。例如告警、可观测性、仪表盘、它们均可弹性伸缩,同时还有随叫随到的事件管理团队。

平台团队拥有并管理各自的平台,而应用程序开发人员则需关注自己的应用程序代码,并负责将其根据发布周期部署到生产中。

06 平衡平台的灵活性和抽象性

然而,在平台工程团队中不断遇到的一个核心挑战是如何平衡灵活性和抽象性。而对于 Shopify 是如何解决这个问题的,Aparna 表示这是一项 Shopify 正在进行中的工作。其实他们一开始在 Kubernetes 的基础上建立了一个抽象层,但实际的效果并不好。

有了这些经验,他们认识到把 Kubernetes 隐藏抽象起来并不是一个最佳方式。目前的平衡点是为大多数开发人员提供有意义的默认设置,以及让高级用户可以操作的清单

Aparna 认为,平台团队专注于提供一条 “黄金路径(Golden Path)”,同时鼓励开发人员对不断演进的平台提出改进建议并做出贡献。只有拥抱变化,才能期待开发团队能够真正突破界限。

07 处理流量高峰期的技巧

最后,针对 Shopify 如何为流量高峰期做好准备,Aparna 深入介绍了从容量估算到弹性测试的缜密规划。她分享了 Shopify 如何在这些情况下禁用默认的自动扩展,转而依靠超额配置来满足像“黑色星期五”和“剁手星期一”期间的极端流量

除了这些重大事件外,某些商家还可能推出闪购活动,从而产生流量高峰。让企业商家提前向 Shopify 预告,有助于为这一高峰期做好准备。但是,正如 Aparna 所说,“作为一个支持数百万商家的平台,我们没有办法让每个人都提前告诉我们”。因此,在大多数情况下,这些高峰期的处理都是完全自动化的。

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

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

相关文章

NVidia NX 中 ROS serial软件包的安装

自己装的ROS是noetic版本,受限于网络,直接用命令安装串口包不行。于是手动安装了一次。 1 下载源码 git clone https://github.com/wjwwood/serial.git 或者直接在浏览器里面输入 https://github.com/wjwwood/serial.git 2 解压 然后在serial&#xf…

OPC UA 服务器的Web访问

基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。 Web 的通信方式 Web 是我们通常讲的网站,它由浏览器,HTTP 服…

sqllab第二关通关笔记

知识点整理: 数值型注入判断手法 1/1 1/0 回显不同错误注入函数 extractvalue(xml_flag,xpath) xml_flag:文件表示符xpath:文件路径;不能识别‘~’ ‘#’ 等特殊字符;遇到就报错并打印xpath内容~(十六进制表示)&#…

架构师之路:中台和微服务区别

什么是中台架构? 中台架构是一种将业务逻辑和技术能力模块化的架构思想,通过构建统一的中间层服务,将业务能力和技术能力解耦,使得各业务领域的功能和服务能够共享和复用。中台包括业务中台和技术中台两个方面: 业务…

YOLOv9改进 添加可变形注意力机制DAttention

一、Deformable Attention Transformer论文 论文地址:arxiv.org/pdf/2201.00520.pdf 二、Deformable Attention Transformer注意力结构 Deformable Attention Transformer包含可变形注意力机制,允许模型根据输入的内容动态调整注意力权重。在传统的Transformer中,注意力是…

前后端链条产生的跨域问题

环境: vitevue3 .net 6 vsstudio2022C# asp .net core webapi 看别的up说这个第一条报错是因为:后端没有允许跨域导致的 解决办法: 1.在后端添加允许跨域 Program.cs //添加跨域策略builder.Services.AddCors(options >{options.AddPolicy(…

创建springboot 2.x web空项目(IDEA)

由于学习时候发现spring官网只能创建springboot3.0的项目,而且不支持java1.8,无法选择java8作为java版本,导致很多教程无法跟着做,因此记录一下可行的创建过程。 (Tips:当前spring Initializr不支持java8的解决方式&a…

安卓kotlin面试题 91-100

91. 阐述Kotlin中性能优化之局部函数 ?就是像正常定义普通函数的语法一样,在其他函数体内部声明该函数。这些被称为局部函数,它们能访问到外部函数的作用域。 fun someMath(a: Int): Int { fun sumSquare(b: Int) = (a + b) * (a + b) return sumSquare(1) +…

固态存储是未来|浅析SSD架构的演进与创新技术-1

常见的SSD架构中,包括了SSD控制器、NAND颗粒、DRAM颗粒三大组件,SSD控制器的固件需要兼顾坏块管理、ECC纠错、垃圾回收GC、磨损均衡WL、NAND die介质管理、缓存交互等等。 随着时代的发展,SSD架构,也不断有新的挑战和需求。基于小…

106. Dockerfile通过多阶段构建减小Golang镜像的大小

我们如何通过引入具有多阶段构建过程的Dockerfiles来减小Golang镜像的大小? 让我们从一个通用的Dockerfile开始,它负责处理基本的事务,如依赖项、构建二进制文件、声明暴露的端口等,以便为Go中的一个非常基础的REST API提供服务。…

LoadBalancer负载均衡服务调用

LoadBalancer负载均衡服务调用 1、Ribbon目前也进入维护 ​ Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 ​ 简单的说,Ribbon是Netflix发布的开源项目,主要功能是**提供客户端的软件负载均衡算法和服务调用。**Ribbon…

计算机网络 TCP协议的流量控制

流量控制的功能就是让发送方的发送速率不要太快,以便让接收方来的及接受,因此可以说流量控制是一个速度匹配服务,匹配发送方的发送速率和接收方的读取速率。 TCP利用滑动窗口机制来实现流量控制,滑动窗口的基本原理是&#xff0c…

有来团队后台项目-解析5

一、 husky 安装 pnpm install -D husky生成husky 配置文件 如果文件中有.git文件,那么直接执行 npx husky-init如果没有,那么先执行git init 结果: PS F:\company_project\demo\youlahoutaijiexi\vite-project> git init Initializ…

【敬伟ps教程】视频动画

文章目录 视频文档视频时间轴帧动画视频文档 工作区需由[基本功能]切换为[动感] 可以看到我们需从时间的维度来编辑动态视觉图像 时间轴:从时间的维度来编辑动态视觉图像 PS提供的时间轴有两种:1、视频时间轴;2、动画时间轴 新建视频文档,点击新建或Ctrl+N,预设选择“胶…

go优雅重试

实现思路: 重试配置定义最大重试次数和固定重试间隔;使用接口优雅传递可选重试配置参数;重试的模板方法必须返回错误,且只有一个返回值;如果需要使用被重试方法的返回值,使用匿名方法包一层真实方法并在匿…

SPI机制详解

SPI机制详解 什么是SPI机制? SPI:Service Provider Interface,中文直译:服务提供者接口,它通过在ClassPath路径下的META-INF/service文件夹中查找文件,并自动加载文件里所定义的类 在面向对象的设计原则…

Device Tree (二) - dtb格式

dtb作为二进制文件被加载到内存中,然后由内核读取并进行解析,如果对dtb文件的格式不了解,那么在看设备树解析相关的内核代码时将会寸步难行,而阅读源代码才是了解设备树最好的方式,所以,如果需要更透彻的了…

【数据结构】哈希表(Hash Table)

文章目录 一:哈希表(Hash Table)1.1 简介1.2 可以将算法思想分为两个部分1.3 相关术语1.4 性质 二:哈希冲突2.1 什么是哈希冲突2.2 为何要避免哈希冲突2.3 如何避免哈希冲突2.4 如何减少哈希冲突2.4.1 直接地址法2.4.1 除留余数法…

C语言入门学习 --- 7.结构体

文章目录 第七章结构体1.结构体的声明1.1结构的基础知识1.2结构的声明1.3结构成员的类型1.4结构体变量的定义和初始化 2.结构体成员的访问2.1结构体变量访问成员2.2结构体指针访问指向变量的成员 3.结构体传参配套练习: 第七章结构体 1.结构体类型的声明 2.结构体初…

工具篇--分布式定时任务springBoot 整合 elasticjob使用(3)

文章目录 前言一、Springboot 整合:1.1 引入jar:1.2 配置zookeeper 注册中心:1.3 定义job 业务类:1.4 job 注册到zookeeper:1.5 项目启动:1.5.1 zookeeper 注册中心实例:1.5.2 任务执行日志输出…