Algolia 借助 NGINX 和 OpenResty 实现搜索流量负载均衡

栏目: 服务器 · Nginx · 发布时间: 5年前

为了解决负载分布不均匀导致的高延迟问题,SaaS Web 搜索产品 Algolia 将其 基础设施 的 DNS 轮询负载均衡模型 换掉 了。他们引入了 NGINX 和 OpenResty 作为软件负载均衡器,Redis 使用自定义的 Go 程序来管理后端服务器列表。这个解决方案在 Algolia 的基础设施之上提供了一个新的抽象层。InfoQ 联系了 Algolia 站点可靠性工程师 Paul Berthaux ,了解更多关于这个做法的信息。

Algolia“应用”有 3 个服务器集群和分布式搜索网络(DSN)服务器,后者提供搜索查询服务。DSN 在功能上类似于内容交付网络接入点(POP),因为它们从离用户最近的地方提供数据。每个应用都有一个 DNS 记录。Algolia 的 DNS 配置 使用 了多个顶级域名(TLD),并且为了获得弹性使用了两个 DNS 提供商。此外,每个应用的 DNS 记录都被配置为以 轮询方式 返回 3 个集群服务器的 IP 地址。这是试图将负载分布到集群中的所有服务器上。搜索集群的常见用例是通过前端应用程序或移动应用程序。然而,一些客户也有访问搜索 API 的后端应用程序。后一种情况会造成负载不均,因为所有请求都将到达同一服务器,直到特定服务器的 DNS 生存时间(TTL)到期为止。

Algolia 的一个应用在黑色星期五(Black Friday)搜索量很大时,搜索速度变得很慢。这导致了查询的不均匀分布。团队瞄准了 NGINX 作为客户端应用程序和应用服务器之间的软件负载均衡器。虽然这确实解决了负载分配的一般问题,但是仍然存在使该设置具有通用性和自动化操作的问题。团队选择了 OpenResty ,它为 NGINX 中的请求 - 响应生命周期提供 Lua 脚本支持。使用这个模型,NGINX 可以根据客户“了解到”将请求发送到哪个后端服务器。此信息缓存在 Redis 中。一个名为 lb-helper 的自定义 Go 守护进程从内部 API 获取服务器列表。

在回答是否可以使 Redis 缓存失效的问题时,Berthaux 解释说,他们这样做是“使用了内部公开的用于维护目的的 lib -helper 中的 API 端点”。如果团队必须删除大量的后端服务器,并且不希望 LB 客户端在响应时间上有任何差异,那么就可能需要这样做。

Algolia 借助 NGINX 和 OpenResty 实现搜索流量负载均衡

图片来自: https://blog.algolia.com/one-year-load-balancing/,已获授权。

通过此更改,负载均衡器可能成为单点故障。Berthaux 解释了为什么现在还不用担心:

为了获得弹性,我们运行着多个 LB——LB 的选择是通过轮询 DNS。目前,这没有问题,因为与我们的搜索 API 服务器相比,LB 执行非常简单的任务,所以我们不需要在它们之间进行均匀的负载均衡。也就是说,我们有一些非常长期的计划,从轮询 DNS 转移到基于 Anycast 路由的东西。

lb-helper 还负责从列表中删除不健康的服务器。按照 Berthaux 的说法:

NGINX/OpenResty 中嵌入了对上游故障的检测以及针对不同上游流的重试功能。我使用 OpenResty 中的 log_by_lua 指令和一些自定义的 Lua 代码进行失败计数,从活动 Redis 条目中删除失败的上游,并在连续 10 次失败后向 lib -helper 发出警告。我设置了这个故障阈值,以避免短时自解“事件(incident)”(如准时丢包)中很多不必要的事件(event)。这样,lb-helper 将探测失败的上游 FQDN,并在它恢复后将其放回 Redis 中。

通过此更改,Algolia 的搜索负载趋于平稳。他们目前正在进一步改进负载均衡算法。

查看英文原文: Load Balancing Search Traffic at Algolia With NGINX and OpenResty


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算广告

计算广告

刘鹏、王超 / 人民邮电出版社 / 2015-9-1 / 69.00元

计算广告是一项新兴的研究课题,它涉及大规模搜索和文本分析、信息获取、统计模型、机器学习、分类、优化以及微观经济学等诸多领域的知识。本书从实践出发,系统地介绍计算广告的产品、问题、系统和算法,并且从工业界的视角对这一领域具体技术的深入剖析。 本书立足于广告市场的根本问题,从计算广告各个阶段所遇到的市场挑战出发,以广告系统业务形态的需求和变化为主线,依次介绍合约广告系统、竞价广告系统、程序化交易......一起来看看 《计算广告》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具