达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心 达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心
企业双选会
 当前位置:主页 > 企业双选会 >

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

时间:2019-05-09  来源:未知  作者:广州达内培训

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

为了解决负载分布不均匀导致的高延迟问题,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客户端在响应时间上有任何差异,那么就可能需要这样做。

通过此更改,负载均衡器可能成为单点故障。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

互联网的兴起带动了一大批企业乃至行业的发展,网络营销也成为了大多数企业的重要岗位。SEO、SEM、新媒体运营、电商运营等岗位逐渐被大家所熟知,岗位的需求量和薪资待遇也在不断的提升。太原网络营销培训切实结合企业的实际需求进行有效的实操培训,同时定期开设的免费试听课程。选择网络营销培训就到太原达内,太原达内欢迎你的试听。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!




上一篇:网易相册宣布停止运营:关闭服务器 不保留数据
下一篇:没有了

友情链接:
  • Android Q Beta 3推出全新系统黑暗主题,实时字幕等
  • WordPress 5.2 “Jaco”发布
  • Sailfish OS “Hossa”从旧eglibc 2.19升级,但仍依赖于GCC 4
  • GeForce GTX 1650支持向418.74更新移植到稳定的Linux驱动程序
  • Android Q的ANGLE在Vulkan上提供OpenGL ES
  • .NET 5 将于2020年问世
  • Mesa 19.1已被分支,Mesa 19.2正在开发中
  • FBI查获暗网索引和新闻网站Deep Dot Web
  • LibreOffice 6.1于5月29日到达生命周期,请升级到LibreOffice 6.
  • Canonical为微软Hyper-V提供优化的Ubuntu 19.04桌面镜像
  • Apple发布iOS 12.3,macOS 10.14.5,tvOS 12.3和watchOS 5.2.1的
  • KDE Plasma 5.15桌面寿命终结,KDE Plasma 5.16于6月11日发布 -
  • Red Hat Enterprise Linux 8.0(RHEL8)正式发布了
  • Ant Design 3.17.0 发布,企业级UI设计语言
  • 音乐播放器 Qmmp 1.3.2 发布,修复Wayland会话问题
  • Ubuntu 14.04(Trusty Tahr)达到生命终点,现在升级到Ubuntu 18
  • JupyterHub 1.0 发布,命名服务器与TLS加密支持
  • Linux Kernel 5.1 正式发布,大量新功能
  • Linux Mint 17达到了生命终结,用户需要升级到Linux Mint 18或19
  • RStudio 1.2发布,改进对Python chunks,R脚本等的测试和支持
  • Firefox 66.0.4 发布,解决由于证书过期而导致的插件损坏问题
  • 印度将于5月成立国防网络局
  • macOS版本的Microsoft Edge 浏览器下载地址泄露
  • 微软宣布推出“Windows Terminal”,受Linux风格启发终端
  • Btrfs在Linux 5.2内核中获得一些有用的修复/改进
  • Unigine 2.8 发布,更好的植被与异步数据流
  • Linux Kernel 5.1 应该会在今天发布,更快的zRAM
  • Linux版的Microsoft Edge浏览器可能在工作中
  • GNU Linux-Libre 5.1 内核正式发布,基于Linux kernel 5.1系列
  • 微软宣布推出Windows Subsystem for Linux 2(WSL 2)
  • Ubuntu Linux现在支持微软的第二代Windows Linux子系统(WSL 2 )
  • Visual Studio Code添加Java 12支持,Java代码操作和语言功能
  • 微软为Windows 10带来原生Linux内核,将成为WSL 2的一部分
  • Ubuntu 19.10代号为“Eoan Ermine”,将于10月17日发布
  • 2019年GitHub上最受欢迎的7种编程语言
  • Brackets 1.14 发布,LSP支持(Ubuntu下安装方法)
  • 适用于Linux的最佳Photoshop替代品 - GIMP,Krita,Darktable,d
  • Linux 5.2应该可以解决许多AMD Ryzen笔记本电脑触摸屏/触摸板无
  • 谈判失败:Oracle 杀死 Java EE
  • 寒武纪“思元270”曝光,AI性能直追Nvidia
  • DXVK 1.1.1 发布,解决召回的DXVK 1.1问题
  • 全球首款人工智能触觉芯片问世 它能带来什么惊喜呢?
  • 工信部批复同意成都建国家“芯火”双创基地
  • 7nm二代霄龙新品面世,AMD市场份额将超10%
  • 手机CPU“核战”结束了吗?
  • 大乐透走试图
  • 体彩排列3助赢软件
  • 世界杯盘口
  • 专业玩彩网
  • 金沙扑克
  • 电子游戏机
  • 宝来棋牌
  • 体彩竞彩