系统设计:如何设计一个类似于Tinder的基于位置的社交搜索应用


如何设计一个类似于 Tinder 的基于位置的社交搜索应用程序,如果经常用作约会服务。它允许用户使用滑动动作来喜欢(向右滑动)或不喜欢(向左滑动)其他用户,并允许用户在双方互相喜欢时聊天(“匹配”)。
这是Ankit Sirmorya的客座帖子。Ankit 担任机器学习主管/高级工程师。亚马逊的机器学习工程师,并领导了亚马逊生态系统的多项机器学习计划。
 
设计要求:
应用程序应该能够支持以下要求。

  • 用户应该能够通过添加他们的简历和上传照片来创建他们的 Tinder 个人资料。
  • 用户应该能够查看地理位置附近区域中其他用户的推荐。
  • 用户应该能够喜欢(向右滑动)或不喜欢(向左滑动)其他推荐的用户。
  • 用户应在与其他用户匹配时收到通知。
  • 用户应该能够移动到不同的位置,并且仍然可以获得附近用户的推荐。
  • 发送和接收来自其他用户的消息。

架构设计:
网关后面将有一组微服务来服务用户请求。创建用户配置文件时将调用配置文件创建者服务。该服务会将用户信息存储在数据库中,并将用户添加到相应的地理分片索引中,以便用户出现在附近用户的推荐中。当收到为其他用户生成推荐的请求时,推荐服务会查询此索引。一旦用户开始浏览这些推荐,Swipes 服务就会接收这些滑动并将它们放置在数据流中(例如 AWS Kinesis/SQS)。有一组工作人员从这些流中读取数据以生成匹配项。工作人员通过查询 LikesCache 来确定它是否匹配。

用户配置文件创建

上面的序列图显示了用户在 Tinder 上创建个人资料时执行的操作序列。在同步过程中,用户媒体(例如照片)被上传到文件服务器上,并且包括用户位置在内的用户信息被保存在像 Amazon DynamoDB 这样的键值存储中。此外,此用户被添加到队列中,用于将用户添加到地理分片索引。
异步进程从队列中读取用户信息,并将此信息传递给 GeoShardingIndexer。索引器使用诸如 Google 的 S2 库之类的地理库将用户的位置映射到地理分片并将用户添加到与该分片关联的索引中。这有助于用户出现在其他附近用户的推荐中。
......
详细点击标题