2016-11-19 42 views
0

我有一个由一个中央服务器,许多移动客户端和许多工作服务器组成的系统。每个工作服务器都有自己的数据库,可能位于客户基础设施上(当他购买本地安装时)。如何将持久性事件从中央服务器推送给其他人?

在我目前的设计中,移动客户端向中央服务器发送更新,中央服务器更新其数据库。工作人员服务器定期拉取中心以获取更新的信息。这种“拉动模式”创造了很多要求,但仍然不够完善,因为员工经常使用过时的信息。

我想要一个“推式模型”,中央服务器可以将更新“发布”到“某处”,这会保留最新版本的数据。然后工作人员可以“订阅”这个“某处”并始终保持最新状态。

的主要问题是:

  1. 一名工人服务器可能处于脱机状态时更新发生。当它恢复在线时,它应该收到它丢失的更新。
  2. 可能会创建一个新的工作服务器,并且需要获取更新的数据,即使是存在之前发布的数据。

奖金点:

  • 不需要管理该 “的地方” 自己。我的应用程序部署在AWS,所以如果有任何我可以用来实现的服务组合,那就太棒了。我发现的一切都有限的时间数据保留。
  • 回答

    1

    推模式的问题是:

    • 如果客户端是离线的,中央系统将需要重试方法,这将产生许多不是推送模式
    • 将更多的请求客户可能是防火墙后面,所以不能接收消息
    • 它是不可扩展

    一个拉模式效率要高得多:

    • 客户应获取最新的数据时开始,并定期
    • 新的客户端只需连接到中央服务器 - 无需更新中央服务器与客户端列表(取决于您的安全需求)
    • 它更可扩展

    有用于几个选项提供流量拉请求

    • 通过API调用,由AWS API Gateway提供支持。然后,您需要使用AWS Lambda函数或Web服务器来处理请求。
    • 从DynamoDB
    • 直接(但是客户端需要访问凭证)
    • 从一个Amazon S3存储

    使用的S3存储有许多优势:高度可扩展的,一个良好的范围的安全选项(公;通过凭证;通过预先签名的URL),不需要服务器。

    只需将数据放入S3存储桶并让客户端“拉”数据即可。您可以为“每个”客户端分配一组文件,并为每个客户端分配一个特定文件,从而启用单个配置。只需将S3看作非常大的键值数据存储

    +0

    我并没有考虑直接推送,而是在中介的帮助下更像pub/sub。所以中央需要只发送一次每个更新。工作人员会立即收到更新,但也可以收到在离线或尚未存在时发布的所有内容。但后来我需要一个带有永久保存的消息的pub/sub或类似的东西。它看起来更具扩展性。你怎么看? –

    +0

    这不是纯粹的pub/sub模型,因为脱机客户端需要检索不同的消息。例如,Amazon SNS将发送消息(如果需要,将重试几次),但对于脱机客户端来说还不够。它可以将消息推送到队列中供以后检索,但客户端需要轮询队列。所以,很难混合“推送”和“离线”功能。拉/投票肯定是一个更简单的解决方案。但是,也许其他StackOverflovians有另一种提供? –

    相关问题