如何承受系统增加的负载:我们谈论黑色星期五的大规模准备

嘿哈布尔!

2017年黑色星期五期间,负载几乎增加了一倍半,我们的服务器已经达到极限。 一年来,客户数量大幅增长,很明显,如果没有仔细的前期准备,该平台可能根本无法承受 2018 年的负载。

我们设定了尽可能雄心勃勃的目标:我们希望为任何(即使是最强大的)活动激增做好充分准备,并开始全年提前启动新产能。

我们的首席技术官 Andrey Chizh (奇兹·安德烈)讲述了我们如何为 2018 年黑色星期五做准备,我们采取了哪些措施来避免跌倒,当然还有精心准备的结果。

如何承受系统增加的负载:我们谈论黑色星期五的大规模准备

今天我想谈谈 2018 年黑色星期五的准备工作。为什么现在大部分主要促销活动都已经过去了呢? 我们在大型活动前一年左右就开始准备,通过反复试验找到了最佳解决方案。 我们建议您提前做好高温季节的防范工作,防止在最不合时宜的时刻出现诈骗。
这些材料对于每个想要从此类股票中获取最大利润的人来说都是有用的,因为问题的技术方面并不逊色于营销方面。

大甩卖的流量特点

与普遍看法相反,黑色星期五不仅仅是一年中的一天,而是几乎整整一周:第一批折扣优惠在促销前 7-8 天到达。 网站流量在整个星期开始平稳增长,周五达到峰值,周六急剧下降至商店的正常水平。

如何承受系统增加的负载:我们谈论黑色星期五的大规模准备

考虑这一点很重要:在线商店对系统中的任何“减速”变得特别敏感。 此外,我们的电子邮件通讯系列的提交数量也显着增加。

对我们来说,安全地度过黑色星期五具有战略意义,因为…… 网站和商店简讯最重要的功能取决于平台的运营,即:

  • 跟踪并发布产品推荐,
  • 相关材料的发布(例如,推荐块的设计图像,如箭头、徽标、图标和其他视觉元素),
  • 提供所需尺寸的产品图像(出于这些目的,我们有“ImageResizer”——一个从商店服务器下载图像,将其压缩到所需尺寸的子系统,并通过缓存服务器为每个产品生成所需尺寸的图像每个推荐块)。

事实上,在 2019 年黑色星期五期间,服务负载增加了 40%,即Retail Rocket 系统在在线商店网站上跟踪和处理的事件数量已从每秒 5 千个请求增加到 8 千个请求。 由于我们正在为更严重的负载做准备,所以我们很容易就度过了这样的激增。

如何承受系统增加的负载:我们谈论黑色星期五的大规模准备

一般准备

黑色星期五对于所有零售业和电子商务来说都是一个繁忙的时期。 此时的用户数量及其活跃度正在显着增长,因此我们一如既往地为这个繁忙的时期做好了充分的准备。 让我们在这里补充一点,我们不仅在俄罗斯而且在欧洲都有许多在线商店,那里的兴奋程度要高得多,而且我们的热情程度比巴西系列还要差。 需要做什么才能为增加的负荷做好充分准备?

使用服务器

首先,有必要找出我们到底需要什么来增加服务器的能力。 早在 10 月份,我们就开始专门为黑色星期五订购新服务器 - 我们总共添加了 XNUMX 台机器。 到XNUMX月,他们已全面投入战斗。

与此同时,一些构建机器被重新安装以用作应用程序服务器。 我们立即准备让它们使用不同的功能:既用于发布建议,又用于 ImageResizer 服务,因此,根据负载类型,它们中的每一个都可以用于其中一个角色。 在正常模式下,Application和ImageResizer服务器具有明确定义的功能:前者发布推荐,后者提供在线购物网站上的信件和推荐块的图像。 为了准备黑色星期五,决定制作所有双用途服务器,以便根据下载类型平衡它们之间的流量。

然后我们为 Kafka (Apache Kafka) 添加了两台大型服务器,并获得了一个由 5 台强大机器组成的集群。 不幸的是,一切并没有我们想象的那么顺利:在数据同步的过程中,两台新机器占据了整个网络通道的宽度,我们不得不紧急想办法如何快速、安全地进行添加过程。整个基础设施。 为了解决这个问题,我们的管理员不得不勇敢地牺牲他们的周末。

处理数据

除了服务器之外,我们还决定优化文件以减轻负载,对我们来说,重要的一步是静态文件的翻译。 之前托管在服务器上的所有静态文件均已移至 S3 + Cloudfront。 我们长期以来一直想这样做,因为服务器上的负载接近极限值,现在出现了一个很好的机会。

黑色星期五前一周,我们将图片缓存时间增加到 3 天,这样如果 ImageResizer 崩溃了,就会从 CDN 检索之前缓存的图片。 它还减少了服务器的负载,因为图像存储的时间越长,我们需要花费资源来调整大小的频率就越少。

最后但并非最不重要的一点是:黑色星期五前 5 天,宣布暂停任何新功能的部署以及任何基础设施工作 - 所有注意力都集中在应对增加的负载上。

应对困难情况的计划

无论准备工作的质量有多高,fakaps 总是有可能的。 针对可能出现的危急情况,我们制定了 3 个应对计划:

  • 减少负载,
  • 禁用某些服务,
  • 完全关闭服务。

计划A:减少负载。 如果由于负载激增,我们的服务器超出了可接受的响应时间,则应该被激活。 在这种情况下,我们准备了逐步减少负载的机制,通过将部分流量切换到亚马逊服务器,亚马逊服务器会简单地以“200 OK”响应所有请求并给出空响应。 我们知道这是服务质量的下降,但服务根本不起作用或不显示大约 10% 流量的建议之间的选择是显而易见的。

B 计划:禁用服务。 隐含部分服务降级。 例如,降低个人推荐的计算速度,以减轻一些数据库和沟通渠道的负担。 在正常模式下,推荐是实时计算的,为每个访问者创建不同版本的在线商店,但在负载增加的情况下,降低速度可以让其他核心服务继续工作。

计划C:以防世界末日。 如果发生整个系统故障,我们已准备好一个计划,使我们能够安全地与客户断开连接。 商店买家将不再看到推荐;在线商店的表现不会受到任何影响。 为此,我们必须重置集成文件,以便新用户停止与服务交互。 也就是说,我们将禁用我们的主要跟踪代码,该服务将停止收集数据和计算推荐,并且用户只会看到一个没有推荐块的页面。 对于所有之前收到集成文件的人,我们提供了将 DNS 记录切换到 Amazon 和 200 OK 存根的选项。

结果

即使不需要使用额外的构建机器,我们也能处理整个负载。 由于提前做好了准备,我们不需要任何已制定的应对计划。 但所做的所有工作都是宝贵的经验,将帮助我们应对最意想不到的巨大流量涌入。
与 2017 年相比,黑色星期五期间服务负载增加了 40%,在线商店的用户数量增加了 60%。 所有的困难和错误都发生在准备期间,这使我们和我们的客户避免了不可预见的情况。

你如何应对黑色星期五? 您如何为关键负载做好准备?

来源: habr.com

添加评论