2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Algolia 通往高可用搜索 API 的狂暴之路(系列之三)

  • 2015-07-30
  • 本文字数:2194 字

    阅读完需:约 7 分钟

在本系列的第一第二篇文章中,Algolia 联合创始人兼首席技术官Julien Lemoine 分别介绍了他们构建高可用基础设施的前3 个步骤和自2013 年9 月API 正式推出至2014 年12 月18 个月间的情况以及所有意料之外的问题(其中包括第一次停机)。近日,本系列的第三篇文章发表,主要介绍他们如何从一个“初创企业”的架构转变成一个可以满足大型上市公司需求的架构。

步骤11:2015 年2 月——全球同步的基础设施

这个月,他们实现了自2014 年4 月开始就一直为之努力的目标,“将服务扩展到全球,更好地服务于用户”。他们的网络包含12 个不同的地点:美国东部(弗吉尼亚)、美国西部(加利福尼亚)、澳大利亚、巴西、加拿大、法国、德国、香港、印度、日本、俄罗斯和新加坡。最重要的是,他们推出了“分布式搜索”特性。借助这个特性,用户只需几次点击就可以在他们的网络中选定需要自动复制数据的地点。用户使用的API 保持不变,而查询请求会自动路由到最近的地点。这不仅降低了延迟,还提高了搜索基础设施的可用性。

据Julien 介绍,他们的“分布式搜索网络(Distributed Search Network,DSN)”与CDN(内容分发网络)完全不同。他们不是在每个边缘地点缓存常用查询,而是存储一个包含所有数据的完整副本。边缘地点本身都可以响应任何查询。就是说,如果用户选择了三个接入点(美国东部、德国、新加坡),那么位于德国的接入点会响应欧洲用户的查询,位于新加坡的接入点会响应亚洲用户的查询,而位于美国东部的接入点则会响应美国用户的查询。

为了支持这种变化,他们修改了API 客户端的重试逻辑。客户端会首先指向主机名 APPID-dsn.algolia.net ,后者会使用 DNS 将客户端请求路由到最近的地点。如果最近的主机不可用,那么为了能够返回下一个最近的地点,DNS 记录会在 1 分钟内删除那台主机。这就是他们将每条记录的 TTL 设为 1 分钟的原因。如果遇到这种故障,那么他们的官方 API 客户端会通过在 APPID-1.algolia.net APPID-2.algolia.net APPID-3.algolia.net 上重试将流量重定向到“主区域(main region)”。他们认为,这种方法可以实现高性能与高可用性的最佳平衡。

步骤 12:2015 年 3 月——提高单个地点的高可用性

对于搜索和国际用户而言,分布式搜索网络极大的提高了可用性。而为了提高主区域的可用性,他们将美国的集群分布在两个完全独立的提供商那里:

  • 两个位置相近的、不同的数据中心;
  • 三台不同的机器——同以前一样,两台位于一个数据中心的不同的可用区域中,一台位于另一个数据中心;
  • 两个不同的自治系统。

这样,他们可以选择将流量路由到另一个提供商。他们在提高单个地点的可用性方面迈进了很大一步。

步骤 13:2015 年 4 月——随机出现的文件损坏问题

这个月,他们开始注意到生产环境中随机出现的文件损坏问题,这是由部分 SSD 的 TRIM 实现中存在 Bug 导致的(具体原因参见这里)。这是个棘手的问题,他们花了一个月的时间来跟踪和定位。所幸,他们没有丢失任何客户数据,这主要得益于以下两个方面:

  • 他们存储了数据的三个副本;
  • 更重要的是,他们没有复制索引操作的结果,而是在每台机器上重复了用户的操作。这有效避免了问题向其它机器传播。

他们没有预见到这种问题,但使用独立的机器是他们能够将问题影响最小化的原因。因此,Julien 强烈建议,任何需要高可用性的系统都要采用这种独立性。

步骤 14:2015 年 5 月——引入多个 DNS 提供商

他们选择 NSONE 作为一个 DNS 提供商,因为该提供商提供了很棒的 DNS API,允许他们通过 API 针对每个用户配置查询的路由方式,并且支持 edns-client-subnets ,可以提供更准确的地理位置路由。

这里的挑战在于,他们需要引入第二家 DNS 提供商,而又不损失 NSONE 提供的强大功能。他们决定通过修改 API 客户端重试策略的方式引入。所有的 API 客户端都会首先连接 APPID-dsn.algolia.net ,如果有问题,它们会在另一个提供商提供的顶级域名上重试。他们选择将 AWS Route 53 作为第二家提供商。如果有任何问题,API 客户端将从 APPID-1.algolianet.com APPID-2.algolianet.com APPID-3.algolianet.com 中随机选择一个重试。这样,他们就在 algolia.net 域上保留了 NSONE 所有的地理位置路由特性,同时引入了第二个提供商在 algolianet.com 域上提供了更高的可用性。

步骤 15:2015 年 7 月——每个集群跨三个完全独立的提供商

虽然经过了一系列的扩展,但他们的基础设施并不能完全应对所有问题,这主要是因为 Link/Router 丢失数据包和路由泄露。在上个步骤中,他们改进了在美国的部署,构建了跨多个数据中心、多个自治系统和多个上游提供商的集群。不过,索引操作需要三台机器中的两台运行正常方可进行。当使用两个提供商时,如果其中一个宕掉,他们就会无法提供索引服务,但搜索服务仍然可用。正是因为这个原因,他们决定实现跨三个完全独立的提供商的集群。这让他们的基础设施超级冗余,但却同时提供了高可用的搜索和索引服务。

总之,构建高可用的架构是需要时间的。所以,作为初创企业,不用在开始的时候就担心基础设施不够完美。但是,应该尽早考虑如何扩展基础设施,Julien 甚至建议在 Beta 测试之前就开始。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-07-30 08:222080
用户头像

发布了 1008 篇内容, 共 442.0 次阅读, 收获喜欢 346 次。

关注

评论

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

低代码如何赋能前沿科技,打造智能企业生态

天津汇柏科技有限公司

人工智能 低代码

DNS缓存投毒是怎么回事?怎么预防?

防火墙后吃泡面

PDF 翻译神器 PDFMathTranslate 安装和使用教程

硅基新手村

PDF rag FastGPT

最近爆火的MCP究竟有多大魅力?MCP开发初体验|得物技术

得物技术

mcpserver

B2B 电商 API 实战:1688 平台实时商品数据采集接口对接指南

代码忍者

零信任的用户行为分析: 通过综合策略解锁安全洞察力(二)

天翼云开发者社区

安全 零信任 环境感知

FinClip赋能中国应用破浪全球:跨端降本增效引领出海新纪元

xuyinyin

企业级开发平台:从分布式架构到 AI 代理的协同创新

代码制造者

AI DevOps 分布式系统架构

掌握Multi-Agent实践(一):使用AgentScope实践入门和Workstation上手指南

汀丶人工智能

Agents

低代码云MES、轻量级部署、让智造更简单

万界星空科技

制造业 mes 云 原生云 CTO 云mes 低代码云MES

通义灵码添加上下文能力怎么用?一篇看懂

阿里云云效

通义灵码

为什么自动化测试总在凌晨崩溃?90%工程师不知道的AI脚本陷阱

测试人

人工智能

AI 时代:程序员的史诗级转型与未来发展

代码制造者

AI编程

和 Mint 一起了解 SuperStacks:开启 Superchain 激励的全新范式

NFT Research

NFT web3

Gitee推荐项目!埋点+用户分析系统,适合中小团队的开源方案

ClkLog

开源 SaaS 埋点 用户行为分析 画像

【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit

HarmonyOS SDK

harmoyos

通义灵码添加上下文能力怎么用?一篇看懂

阿里巴巴云原生

通义灵码

rust程序静态编译的两种方法总结

电子尖叫食人鱼

rust 后端

技术实践 | 几乎零代码!像搭乐高一样做AI应用,LazyLLM确实有点东西!

商汤万象开发者

AI 智能体 大模型 LLM AI 智能体

区块链ETF软件的核心功能

北京木奇移动技术有限公司

区块链技术 软件外包公司 区块链ETF

区块链RWA软件的技术方案

北京木奇移动技术有限公司

区块链技术 软件外包公司 区块链RWA

质量管理是干啥的?QA、QC、QE有啥不一样?

积木链小链

质量管理 数字化转型 智能制造 生产管理

CST软件散射近场提取和散射截面-法诺共振球

思茂信息

cst CST软件 CST Studio Suite

Databend 推出 BendDeploy:一站式可视化管控平台,重塑数据库私有化运维体验

编程猫

比较入站和出站防火墙规则

运维有小邓

日志分析 日志审计 防火墙工具 防火墙日志管理

区块链ETF软件的技术方案

北京木奇移动技术有限公司

区块链技术 软件外包公司 区块链ETF

AI工具的普及,让程序员面临当下的应聘困境

Nackydeng

个人感悟 程序员求职 大模型 求职面试 大厂招聘

PWA与小程序技术架构差异及出海布局策略

xuyinyin

零信任的用户行为分析: 通过综合策略解锁安全洞察力(三)

天翼云开发者社区

安全 零信任 行为感知

一文读懂HyperWorks有限元分析流程

智造软件

模型 CAE 网格 单元格 Hypermesh

Algolia通往高可用搜索API的狂暴之路(系列之三)_架构_谢丽_InfoQ精选文章