亚马逊AWS官方博客
Compass 公司使用 Amazon ES 推动房屋搜索流程的简化与现代化
Original URL:https://aws.amazon.com/cn/blogs/big-data/simplifying-and-modernizing-home-search-at-compass-with-amazon-es/
Amazon Elasticsearch Service (Amazon ES)是一项全托管服务,能够帮助用户轻松在AWS之上大规模部署、保护并操作Elasticsearch。作为一项广受欢迎的服务,Amazon ES支持着不同客户针对不同用例将搜索功能集成到自己的应用程序当中。
Compass公司则运用包括Amazon ES在内的一系列AWS服务重构自己的搜索解决方案,借此为客户提供高质量的房产搜索与结果保存服务。
在本文中,我们将了解Compass的搜索解决方案如何逐步演变、他们在不同架构下面对的挑战与收益,以及Amazon ES如何为他们提供长期可扩展的解决方案。我们还将探讨如何使用Amazon Managed Streaming for Apache Kafka (Amazon MSK)为房地产列表数据建立起事件驱动型实时流式功能。相关案例极具参考价值,您可以将解决方案直接引入自己的类似用例当中。
Amazon ES概述
Amazon ES能够帮助大家轻松部署、操作及扩展Elasticsearch,借此实现日志分析、应用程序监控以及交互式搜索等各类功能。这是一项全托管服务,不仅继承了Elasticsearch易于使用的API与实时功能,同时也能够充分匹配实际应用场景对可用性、可扩展性以及安全性提出的要求。Amazon ES还能够与其他AWS服务(包括Amazon Kinesis、AWS Lambda以及Amazon CloudWatch等)以及多种第三方工具(例如Logstash与Kibana)实现内置集成,帮助用户快速将原始数据转换为具备可行性的洞见结论。
Amazon ES还具备以下优势:
- 全托管 – 在数分钟之内启动生产级集群,无需额外的补丁、版本控制与备份操作。
- 访问全部数据 – 以集中方式统一实现数据的获取、保留、关联与分析。
- 可扩展性 – 只需单击几下或执行一次API调用,即可快速调整集群大小。
- 安全性 – 部署在您的VPC内,并使用安全组及AWS身份与访问管理(AWS Identity and Access Management,简称IAM)策略限制访问活动。
- 高可用性 – 可实现跨可用区复制,且具备监控与自动自我修复等功能。
- 紧密集成 – 无缝实现数据获取、安全保护、审计与编排。
Amazon MSK概述
Amazon MSK是一项全托管服务,能够帮助用户轻松构建并运行通过Apache Kafka处理流式数据的应用程序。Apache Kafka是一套开源平台,可用于构建各类实时流数据管道与应用程序。在Amazon MSK的支持下,您可以使用原生Apache Kafka API填充数据湖,在数据库之间流式传输变更,并为机器学习与分析应用程序提供底层支持。
Compass公司概述
Urban Compass有限公司(简称Compass)是一家全球房地产科技企业,提供一个可支持房地产资产购买、租赁与出售的在线平台。
援引其自我介绍:“Compass打造出一套史无前例的现代房地产平台,将行业顶尖人才与科技结合起来,旨在实现搜索与销售体验的智能化与无缝化。Compass业务遍及24个市场,今年上半年的销售额超过20亿美元,拥有2300名员工与15000多名代理商。Compass的愿景是为全球各地的用户找到心仪的房屋。”
Compass如何使用搜索技术帮助客户
搜索可以说是Compass公司的一大核心业务,用于帮助网站访客及代理商在其平台当中查找符合要求的房产。Compass平台包含以下搜索组件:
- 搜索服务 – 广泛使用Amazon ES对地方性房产数据(涵盖成千上万个属性)进行高级搜索。数据首先在Apache Spark中进行处理,而后被保存在Amazon Aurora PostgreSQL当中;搜索服务组件随后会通过Amazon MSK获取这些数据。
- 代理与消费者搜索 – 建立在搜索服务之上的前端,用于充当各代理商、消费者以及Compass搜索服务之间的接口。其内置于React当中,允许用户无缝搜索房产数据并访问本地过滤器。
- 保存搜索本身 – 作为消费者,大家可以运行查询并保存相应结果。已保存的搜索索引将配合搜索参数进行更新。当有新列表进入系统(通过列表Elasticsearch索引进行编排)时,Compass搜索组件将使用Elasticsearch的过滤功能识别与新列表相匹配的已保存搜索本身,并将新的房产列表以通知方式向用户发布。
消费者搜索模式的演变
以下各节将从最初的Apache Lucene架构开始,详细介绍Compass主搜索功能及其架构随时间发生的一系列演变。
传统Apache Lucene架构
Compass公司最初通过直接集成Lucene的方式实现其搜索功能,并通过对AWS虚拟机的手动置备与手动安装对Lucene进行配置。
如下方架构图所示,MLS(主列表服务)系统的数据通过一套常规提取、转换与加载(ETL)框架进行推送,并被进一步填充至列表数据库当中。在数据库内,数据又进一步被推送至Lucene集群中以供前端搜索REST API进行查询。
这套架构当中存在多个痛点,且主要与Lucene的自身特征有关,具体包括:
- 手动维护与配置对专业知识提出较高要求。
- 难以准确对磁盘容量的增长与预测做出评估。
- 只能通过手动分片实现可扩展性与高性能。
- 配置新的数据字段需要大量人力。
使用Amazon ES建立新架构
为了克服上述挑战,Compass公司决定使用Amazon ES。
通过以下架构示意图,可以看到Compass系统的演变过程。Compass首先以并行方式运行Amazon ES与Lucene,通过影子流量对生产结果进行验证与质量保证。整个服务并行评估持续达两个月,他们也最终确认Amazon ES完全能够实现相同的运行效果。
此外,Compass公司还在切换至Amazon ES之后立即添加了全文本搜索(描述搜索)功能。由此,客户可以提高列表与功能的使用速度,并使Compass平台得以在全国范围内扩展并实现本地化搜索。
使用Amazon MSK增强架构
Compass公司又进一步使用Amazon MSK对架构加以增强。新架构使不同团队能够并行处理事务,并将转换后的事件推送至Kafka集群。下图所示为增强之后的新架构。
在新架构的支持下,Compass的搜索功能立即迎来了以下提升:
- 降低了维护成本。由于Amazon ES是一项托管服务,用户无需承担任何集群管理或运维工作。
- 额外的性能优势,将索引建立时间从8小时缩减至1小时。
- 只需单击一下,即可快速创建或撤销集群,显著降低维护难度。
凭借Amazon ES提供的用户界面与监控功能,Compass团队得以轻松评估当前资源使用情况,并据此进行容量规划与成本预测。
使用Elasticsearch过滤器保存搜索本身
Elasticsearch过滤器实际上反转了查询-文档这一固有使用模式——我们的索引将围绕查询(而非文档)建立,这意味着用户可以配合文档内容对经过索引的查询执行查询。过滤查询的搜索结果,正是能够匹配所提供文档的对应查询本身。
Compass公司使用这项功能对每位用户的搜索查询进行索引,由此实现搜索保存功能。当收到资产列表时,Compass会使用Amazon ES检索与列表内容相匹配的查询,并向各位客户发出通知。
以下示意图展示了这一工作流。
在执行过滤之前,Compass会重新运行已保存的搜索查询以检查是否存在样报的匹配项。通过过滤功能,Compass能够及时将搜索变更通知给用户。在任意时间点上,Compass都平均存储有25万条搜索查询。
在有新列表传入时,这些列表每分钟平均提交5到10项批量请求,每项批量请求包含1000个文档。在使用18节点m5.12xlarge实例类型的集群时,Amazon ES端的最大延迟在750毫秒到2500毫秒之间浮动。
以下示意图展示了保存搜索机制的基本架构。搜索条件被保存在搜索索引当中。当新列表通过MLS及Amazon MSK列表流传入时,此架构将执行过滤处理程序,由该程序将消息推送至Amazon MSK的已保存搜索匹配主题流当中。接下来,架构会从已保存搜索服务处提取消息,并将其推送至最终用户。
这套架构具有以下优势:
- 在根据搜索条件查询房产时,结果会被保存在Amazon ES当中。而在代理商将与已保存搜索条件相匹配的房产添加到系统中后,用户就会收到通知,提醒列表中添加了一处与搜索条件相符的新房产。
- 由于具有过滤功能,因此在将房产添加至系统之后,用户会立即得到通知——通知延迟由过去的1小时缩短到现在的1分钟。
- 在采用过滤功能之前,Compass团队需要通过批处理任务根据搜索条件检索新的房产记录。但现在,直接使用基于推送的通知功能即可。
随着其平台逐步扩展至更多房产列表、代理与用户群体当中,Compass公司有非常宏大的发展路径。他们目前计划开发以下功能:
- 实时流
- AI搜索排名
- 通过AI实现个性化搜索功能
总结
在本文中,我们解释了Compass公司如何使用Amazon ES为客户提供符合其房产需求的搜索结果。无论大家希望实时搜索新列表,还是打算使用Compass的已保存搜索机制进行市场监控,Amazon ES都能为您提供良好的运行效果。
相较于复杂繁琐、难以管理的Lucene基础设施,Compass在转向Amazon ES之后得以节约下大量时间与精力,并借此着力推动业务拓展与工程研发,最终开辟出新的商业机遇。