系统设计面试:Yelp、TripAdvisor 或附近的 Places

系统设计面试:Yelp、TripAdvisor 或附近的 Places

在本文中,我们将讨论关于 近距离服务。 邻近服务用于发现附近的地方,例如酒店、博物馆或餐馆。它是支持在 Yelp 上查找附近最好的餐馆或在 Google 地图上查找 k 附近加油站等功能的核心组件。

第 1 步:- 需求收集

功能要求:-

  1. 根据用户的位置返回所有业务。业务用户可以添加、删除或更新业务,但信息不需要实时反映。
  2. 客户可以查看有关业务的详细信息。
  3. 用户可以从 UI 更改半径。

非功能性要求:-

  1. 低延迟:- 用户应该能够快速获取业务。
  2. 高可用性: - 系统应该能够在高峰时段处理流量
  3. 高可扩展性:- 系统可以跨多个区域和可用区进行扩展。

粗略估计:-

假设我们有 1000 万日活跃用户和 2000 万家企业。我们可以将一天中的秒数四舍五入到 10⁵。假设用户每天进行 5 次搜索查询。

搜索 QPS = (1000 万 * 5)/10⁵ = 500 QPS。

第 2 步:- 高级设计:-

API设计:-

  1. 搜索附近的商家:- 此端点根据搜索条件返回企业。
**请求参数:-  
 一个。纬度  
 湾。经度  
 C。半径** **结果:-  
 {“总数”:10,  
 “企业:[{企业对象}]}**

2.业务API:- 与业务对象相关的 API CRUD 操作。

**API 详细信息  
 ----- ---------** **GET:- /businesses/:id 返回有关业务的详细信息  
 POST:- /businesses 添加新业务  
 PUT:- /businesses/:id 更新有关业务的详细信息  
 删除:- /businesses/:id 删除企业**

数据模型:-

读/写比率:- 由于以下两个原因,读取量很高。

  • 搜索附近的商家
  • 有关个别业务的详细信息。

另一方面,与读取比率相比,写入比率非常低,因为更新业务信息、删除业务和添加新业务的频率很低。

对于现成的重型系统,关系数据库系统(如 MySQL)可能是一个很好的选择,并且它在行业中是久经考验的技术。

高级设计图:-

该系统分为两个主要部分:-

  1. 基于位置的服务。
  2. 业务相关服务。

High Level Diagram

API网关:- API 网关充当我们系统中的入口点,并将请求路由到相应的组件/微服务。

基于位置的服务:- LBS 是系统的核心部分,用于查找给定半径和位置的附近企业。无写请求的重读服务,密集区域高峰时段QPS高。此外,该服务是无状态的,因此很容易水平扩展。

商业服务:- 业务服务主要处理两种类型的请求。

  • 客户希望查看有关业务的详细信息。 QPS 在高峰时段很高。
  • 创建、更新和删除业务。那些请求主要是写操作,QPS不高。

数据库集群:- 可以在主从设置中设置数据库集群。主数据库处理所有写操作。数据保存在主数据库中,然后使用数据库复制技术,创建数据库的复制。由于复制延迟,主数据库和复制数据库之间可能存在差异,但这种不一致不是问题,因为我们不必实时反映更改。

可扩展性:-

LBS 和业务服务都是无状态服务,因此很容易在高峰时段自动添加更多服务器,在非高峰时段自动移除服务器。如果系统在云上运行,我们可以设置不同的区域和可用区,以进一步提高可用性。

在下一篇文章中,我们将讨论使用各种算法、缓存、缩放数据库和最终设计图来搜索附近地点的不同方法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/30508/12051210

posted @ 2022-09-12 10:12  哈哈哈来了啊啊啊  阅读(48)  评论(0编辑  收藏  举报