写点什么

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:222000
用户头像

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

关注

评论

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

京东商品列表API秘籍!轻松获取商品列表数据

tbapi

京东API 京东商品列表API 京东数据采集 京东数据分析

一分钟读懂超融合架构 | 轻松干货

智驱前线

超融合架构

CANN与智谱GLM强强联合,国产AI加速迈向端云协同

极客天地

海外品牌危机频发的背后,你是否看见了数据盲区?

沃观Wovision

数据 沃观Wovision 舆情监测系统 海外舆情监测

使用spaCy检测编程语言的NLP技术解析

qife122

自然语言处理 编程语言检测

网站卡顿被攻击?EdgeOne 十分钟接入指南:安全加速一体化落地实战

六月的雨在InfoQ

CodeBuddy首席试玩官 CodeBuddyIDE AIIDE 边缘安全加速平台 EO

性能优化之母:为什么说“方法内联”是编译器优化中最关键的一步棋?

poemyang

编译原理 Java虚拟机 JIT编译器 #java

超融合:企业最关心的那些事

智驱前线

超融合

区块链Web3项目的开发流程

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

区块链开发 软件外包公司 web3开发

意念统御,军团集结!网易伏羲以科技重铸《魔兽世界》统御之盔,用意念“控制”机器人

网易伏羲

网易伏羲 脑机接口 人形机器人 宇树科技 魔兽世界

MyEMS:以开源创新构建企业能源管理的自主可控生态

开源能源管理系统

开源 能源管理系统

Intigriti Bug Bytes

qife122

漏洞挖掘 漏洞赏金

基于 WebGL 的数字孪生项目

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

软件外包公司 数字孪生开发 webgl开发

AI语境下创新教学模式应用示范与推广联盟成立丨南开大学携手和鲸,破解AI时代教育难题

ModelWhale

AI教育 南开大学 和鲸

【AI编程】让Codebuddy改写《浪浪山小妖怪》,结果写出了打工人血泪史

卷福同学

什么是真正的Monorepo?深入解析单一代码仓库的利与弊

qife122

版本控制 软件开发

黑龙江的二级等保和三级等保,在保护要求上有啥不一样?

等保测评

超融合架构:破解传统 IT 困局的关键引擎

智驱前线

IT 超融合架构

详细解析!高校行业指标体系建设与 AI 数智应用方案

袋鼠云数栈

指标体系 高校 指标建设 数字化转型‘’ 数智应用

基于AI的课程内容生成系统技术解析

qife122

系统架构 生成式AI

大数据-64 Kafka 深入理解 Kafka 分区与重分配机制:高并发与高可用的核心 实机测试

武子康

Java 大数据 kafka 分布式 消息队列

数据中心升级十字路口:超融合架构,是理想路径还是现实考量?

智驱前线

超融合架构

超融合架构是什么?一文看懂计算、存储、网络的一体化

智驱前线

2025 WAIC探展合合信息展台:AI鉴伪技术洞察“看不见”的伪造痕迹

猫头虎

人工智能 OCR OCR识别 ai鉴伪

企业在黑龙江做二级等保测评,一般要准备哪些材料?

等保测评

黑龙江等保测评结果与企业的信用、资质有何关联?

等保测评

超融合架构:数字化转型的万能钥匙?这些场景适用!

智驱前线

超融合架构

基于Python爬虫实战:获取财经股票数据

袁袁袁袁满

Python爬虫 爬虫案例 爬虫实战 采集股票数据

可定制NLP工具包spaCy与LLM集成技术解析

qife122

自然语言处理 开发者工具

超融合架构:中小企业数字化转型的利器

智驱前线

超融合架构

百度搜索PC端全量上线系列AI功能  AI搜索月活已超3.22亿

极客天地

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