Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在amazon web services aws上构建类似firebase/fanout.io的服务_Amazon Web Services_Firebase_Aws Lambda - Fatal编程技术网

Amazon web services 在amazon web services aws上构建类似firebase/fanout.io的服务

Amazon web services 在amazon web services aws上构建类似firebase/fanout.io的服务,amazon-web-services,firebase,aws-lambda,Amazon Web Services,Firebase,Aws Lambda,我使用firebase通知web浏览器(javascript客户端)有关特定主题的更改。我对它很满意。然而,我真的很想(只)使用AWSWeb服务 不幸的是,我无法确定是否有可能在aws上构建这样的服务。我不是说让EC2实例运行一些firebase/fanout.io替代方案。我说的是利用诸如lambda、dynamodb流、SNS和SQS等服务 是否有可用的套接字通知服务,或者是否可以通过使用提供的服务来实现类似的功能?我最近也用同样的想法研究了这个问题,但最终我还是选择了使用扇出。AWS不提供

我使用firebase通知web浏览器(javascript客户端)有关特定主题的更改。我对它很满意。然而,我真的很想(只)使用AWSWeb服务

不幸的是,我无法确定是否有可能在aws上构建这样的服务。我不是说让EC2实例运行一些firebase/fanout.io替代方案。我说的是利用诸如lambda、dynamodb流、SNS和SQS等服务


是否有可用的套接字通知服务,或者是否可以通过使用提供的服务来实现类似的功能?

我最近也用同样的想法研究了这个问题,但最终我还是选择了使用扇出。AWS不提供现成的服务器推送HTTP通知服务

  • Lambda函数每100毫秒计费一次,因此针对Lambda的任何长轮询都将在客户端连接的整个时间内计费
  • SNS不向浏览器提供长轮询;可用的客户端面向移动、电子邮件、HTTP/S和其他亚马逊产品,如Lambda和SQS
  • SQS将要求每个客户端有一个专用队列,因为它不支持广播
现在,如果lambda定价不影响您,您可以这样做:

  • 编写一个lambda函数,该函数通过打开到SQS的连接并等待消息的API服务调用。关键是从HTTP启动lambda调用,但在函数中等待队列(例如,如果您是用Python编写的,则使用Boto)。这段代码需要创建一个专用于服务一个特定客户机的队列,该队列由客户机传入的GUID之类的东西唯一地键入
  • 使用AmazonAPI服务链接到lambda函数
  • 从浏览器通过API调用lambda函数,等待它在专用SQS队列上接收消息或超时,可能在API连接和SQS连接中使用长轮询。为了减少对API的调用数量,这里也建议完全排空队列(或者至少在一个批处理中接收尽可能多的消息,直到达到某个限制)
  • 将事件发布到与客户端关联的专用SQS队列。这将要求发布者知道客户端的唯一密钥
  • 返回从SQS读取的事件作为lambda调用的结果
  • 这种方法存在一些问题:

  • Lambda定价-不太贵,但类似fanout的产品基本上是免费的
  • 每个客户端都需要一个专用的SQS队列;清理可能会成为一个问题
  • SQS根据呼叫次数计费,包括检查消息。长轮询SQ将缓解其中一些问题
  • 您需要编写JavaScript客户端,以长轮询方式重复调用lambda API端点
  • Lambda目前受其支持的并发运行函数的数量限制(目前为100个,但您可以联系支持部门以增加该数量)
  • 这种方法的一些好处:

  • SQS队列是持久性的,因此除非成功处理消息,否则它将在可见性超时后返回队列
  • 您可以将CloudWatch设置为监视所有API、Lambda和SQS事件
  • 其他注释

  • 通过使用Lambda通过STS发布临时安全凭证,您可以直接从浏览器调用sqsapi。这里记录了用JavaScript接收消息:但是,我不知道您是否会遇到跨域问题
  • 如果必须是所有AWS,那么您唯一的另一个选择是使用负载平衡的EC2实例,如您所提到的那样运行fanout之类的东西

  • 使用扇出是非常少的工作:它既非常便宜,而且已经构建和测试

    请注意投票结束此问题的人:这不仅仅是服务器或基础结构管理问题。OP询问如何使用AWS提供的参考体系结构编程工具构建服务。LAMBDA特别是一种服务,需要开发者编写代码才能有用。因为扇出扇出软件是开源的,你是否也考虑过在AWS上自动托管它?@ USS3211074我没有…我高度重视管理型基础设施。我在大型和小型基础设施运营方面都有丰富的经验,而且托管基础设施几乎总是物有所值的。此外,似乎没有任何fanout.io预配置的AMI,这增加了操作负担。您是否有其他要求导致您如此强烈地反对第三方供应商?不,实际上没有要求反对第三方供应商。这只是一个希望,让一切都在aws之内。非常感谢您的建议。使用SQS作为后端为您的客户端提供长轮询是有用的,但是您可以使用ElasticBeanstalk应用程序代替Lambda。或者,您的Lambda函数可以出售AWS密钥,让客户端使用STS直接使用SQS来提供临时凭据。Electric Beanstalk的主要考虑因素是,无论您是否需要,您都将始终保留运行EC2的容量。Lambda只对你实际使用的东西收费。STS是一个有趣的想法。