【问题标题】:Architecture for Matching system and scaling it out匹配系统和向外扩展的架构
【发布时间】:2012-07-22 04:46:05
【问题描述】:

我有一个网站,用户在该网站上选择特定标准以在该网站上寻找另一个用户,然后该网站将您与同样在寻找具有相同标准的人的其他人配对。有一个“未配对”用户集合(尚未配对),每次有人提出配对请求时,程序都会根据匹配条件检查集合中的下一个可用用户,并删除该用户如果匹配,则从“未配对”集合中提取,如果没有,则将用户添加到“未配对”集合中。

我的问题是,根据以下标准处理此类集合的最佳方法是什么?

  • 匹配过程是实时的,所以我使用类似的东西 SignalR 处理实时配对
  • 如果系统关闭,集合不需要保留 因为不会有用户“搜索”未配对的用户 因为系统已关闭
  • 如果我横向扩展服务器并拥有多个实例,它们都有 能够从同一个集合中提取出来
  • 如果有 2 个用户在 同时

当我思考这个问题时出现的一些标准问题是:

  • 我什至需要一个数据库,因为正在添加用户 并不断删除

  • 如果我确实需要某种存储,像 mongodb 这样的存储 好的选择?为什么?

  • 如果我将集合存储在内存中,那将无法正常工作 如果我横向扩展不同的实例,对吗?

【问题讨论】:

    标签: c# asp.net architecture scalability


    【解决方案1】:
    • 您需要处理并发问题 - 一旦找到要配对的用户,您需要锁定该用户,确认它仍然未配对,配对,然后解锁。否则,当您第一次查看用户时,您可能会首先发现未配对的用户,而当您将他们配对时,他们已经被占用了。
    • 目前尚不清楚配对会产生什么副作用 - 但您似乎并不真正关心过去(即如果服务器出现故障 - 配对无关紧要)。这听起来像是内存中的操作,可能会持久化到数据库以用于记录/分析的目的。
    • 关于不同的实例,如果它在内存中,您仍然可以跨服务器执行此操作(map/reduce 公式可以在内存中工作,并且可能还有很多其他的)。您还可以构建您的解决方案,将您的用户存储在 server1 上的不同服务器 A-N 上,server2 上的 O-Z 上(如果这对您的数据有意义)。您还可以将配对所需的数据减少到最低限度,并让一台服务器(如您所愿)来处理配对,将配对后发生的任何事情都卸载到任何地方。

    抱歉,没有对您的数据/用例有更多了解的泛型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 2012-10-29
      • 2017-04-17
      • 1970-01-01
      • 2012-04-08
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多