Shopify如何在Kubernetes中实现自定义的自动扩展

2019 年 12 月 21 日

Shopify如何在Kubernetes中实现自定义的自动扩展

来自 Shopify 的Andy Kwiatkowski在柏林举行的Velocity会议上讨论了他们为何要在Kubernetes中创建自定义的自动扩展器现有的自动扩展方案无法满足 Shopify 的需求。这主要是因为它们会接收到大量突如其来的流量请求。同时,他们还需要在收缩或配置复杂的扩展条件时,能够有一个经济有效的解决方案。


Kwiatkowski 说到,Shopify 的 Web 站点在促销或“限时抢购”的时候会突然接收到大量的请求。限时抢购通常只会维持很短的时间,比如十五或二十分钟。所以,它们需要快速扩展,但是反应式扩展并不适合这些情况,这主要是因为扩展过程有很多的活动,比如生成新节点、下载 Docker 镜像以及启动守护程序集之类的应用。因此,平均来看,扩展可能会需要两分钟到二十分钟。当自动扩展和添加处理能力就绪的时候,限时抢购可能已经结束了。


Shopify 使用 Go 语言创建了一个自定义的自动扩展器以满足其突然暴增的流量的需求,目前它还没有开源。同时,他们还需要更好的控制功能,以实现安全的部署或配置更为复杂的扩展条件(比如使用过去的数据)。自动扩展器每 30 秒运行一次,为即将到来的限时抢购添加所需的副本。


扩展或伸缩还会影响每月的云账单。因此,自动扩展器需要基于丰富的信息作出决策。为了定义集群需要多少副本,Shopify 使用了Kubernetes中来自HPA的风险与成分分析公式。Shopify 定义了他们希望的服务器繁忙程度。然后,基于服务器的繁忙程度和目前存在的副本数量,该公式能够给出集群应该具有的副本数量。其目的是始终保持集群的目标使用率。



收缩集群会消耗时间,因此会增加成本。所以,为了有一个高效的成本扩展方案,Shopify 必须通过分析过去的流量数据来提升其自动扩展器。在运行一些实验之后,Shopify 注意到在使用平均 CPU 利用率来设置扩展规则时(当然其他解决方案都是这样做的),他们无法准确地预测峰值。如果使用 CPU 使用率中位数的话,会有更好的结果,只不过会有暂时的额外容量。但是,当有更长(30 分钟)的峰值时,自动扩展器不会增加更多的副本。为了解决该问题,他们使用 CPU 利用率的指数加权平均值(exponentially weighted average,EWA),在这种方式下,新的值会比旧的值更重要。因此,自动扩展器可以快速添加更多副本。


Shopify 的自动扩展器会同时计算中位数和 EWA 的 CPU 利用率。如果没有明显差异的话,自动扩展器会使用中位数 CPU 利用率。否则的话,它会使用 EWA 的 CPU 利用率。通过这种方式,Shopify 能够在真正需要的时候才添加副本。



最后,Kwiatkowski 说,有时他们收集的数据会有错误,如空值、零值、陈旧的数据或稀疏的数据。因此,为了避免在扩展或伸缩时出现问题,如果有任何数据错误,它们总是按最大容量伸缩以确保安全。此外,它们配置了一个最小的副本值,以防止在收缩时出现问题。


原文链接:


How Shopify Implements Custom Autoscaling Rules in Kubernetes


2019 年 12 月 21 日 10:003093

评论

发布
暂无评论
发现更多内容

基础框架第二周作业「架构师训练营第 1 期」

天天向善

设计原则

在用户现场,你需要注意的几件事情

boshi

项目管理 实施 需求分析

程序员陪娃漫画系列——修空调

孙苏勇

程序员人生 陪伴 漫画

一个草根的日常杂碎(9月24日)

刘新吾

社会百态 生活随想 日常杂碎

架构师训练营第二周课后作业

Gosling

极客大学架构师训练营

flutter 中的video player对比学习

Daniel

最新整理国内知名大厂7篇Java岗面试真题,奥利给!

Java架构师迁哥

架构师训练营第二周学习总结

Gosling

极客大学架构师训练营

理解依赖倒置原则

林杭戴

极客大学架构师训练营

交易所开发,数字货币交易所平台搭建源码

WX13823153201

区块链+跨境贸易:让跨境数据高效共享可信

CECBC区块链专委会

区块链 跨境贸易 跨境电子商务

第二周作业

华美而火锅

架构师训练营第 1 期 - 第二周课后练习

Anyou Liu

极客大学架构师训练营

第二周作业

icydolphin

极客大学架构师训练营

第二周学习总结

林杭戴

极客大学架构师训练营

第二周作业

饭桶

TensorFlow 篇 | TensorFlow 2.x 分布式训练概览

Alex

tensorflow keras 分布式训练

信息获取的四个层级,看看你在哪一级?

boshi

学习 正确阅读 信息需求

第二周学习总结

饭桶

架构师训练营 1 期 - 第二周作业(vaik)

行之

第2周 框架设计总结

bearlu

极客时间架构师培训 1 期-第2周总结

Kaven

架构师训练营 Week2 框架设计- 学习总结SOLID

用于门牌号码检测的深度学习

计算机与AI

学习 分类

LeetCode题解:590. N叉树的后序遍历,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营 Week2 - 课后作业

依赖倒置原则 接口隔离原则

如果编程语言是一门武功绝学

C语言与CPP编程

c++ 编程 程序员人生 程序人生 编程语言

第二周作业

追风

极客大学架构师训练营

2020.09.21-2020.09.27 学习总结

icydolphin

极客大学架构师训练营

基础框架第二周总结「架构师训练营第 1 期」

天天向善

基础框架

开放的是金融服务 必须确保持牌经营

CECBC区块链专委会

金融 银行

Shopify如何在Kubernetes中实现自定义的自动扩展-InfoQ