tldr;如何让AWS服务器上的程序持续监听数据包?
我想建立一个iPhone应用程序,收集传感器数据并将数据发送到服务器。当服务器有足够的传感器数据时,它会根据数据构建一个分类器,并将该分类器发送到所有贡献的iPhone应用程序。我正在尝试在AWS上托管服务器。
我花了好几个小时阅读关于数据流、tcp协议、amazon ec2、amazonemr、apache spark、spark streaming、amazons3、restful接口、cron jobs、amazonvpc等的内容,但我无法将这些内容拼凑在一起。我只是不明白iPhone和AWS服务器是如何通信的。让我带你了解一下我认为这个应用程序应该如何工作。请纠正我思考过程中的任何错误,让我知道我应该如何去做这些事情。
1) iPhone应用程序收集一些传感器数据。2) iPhone应用程序使用HTTP或TCP将数据发送到AWS服务器。我该怎么做?我需要提供我的服务器的IP地址吗?3) 服务器从iPhone中获取传感器数据。这就是我真正困惑的地方。这是怎么发生的?我可以让AWS上托管的Python程序在无限循环中运行,检查数据包吗?我需要在AWS上运行CRON作业吗?我需要在EC2节点上下载web服务器吗?我可以使用像Spark streaming或Amazon Kinesis这样的第三方流媒体工具吗?基本上,我如何让服务器端程序持续监听数据包?4) 服务器在有足够的数据时构造分类器。5) 服务器使用HTTP或TCP将分类器发送到iPhone应用程序。
我觉得我错过了一些非常基本的东西。我的主要问题是,我不明白服务器上的程序(特别是AWS ec-2节点或AWS EMR集群)应该如何侦听数据包。
有很多方法可以实现这一点。你可以运行网络服务器,让iPhone应用程序发布到你的弹性负载均衡器。或者,您可以编写一些其他类型的服务在EC2服务器上运行,这些服务器在TCP端口上侦听,并且仍然使用弹性负载均衡器。
就我个人而言,我会设置一个API网关端点,将所有发布到它的数据添加到Kinesis流中。你可以在这里阅读关于做这件事的内容。然后,您可以在EC2实例上运行一个服务,或者使用Lambda函数来处理流数据。
关于服务器监听数据包的一般问题只是基本的服务器端编程。您有一个服务在绑定到某个TCP端口的服务器上运行。然后,该服务运行您配置的代码,以便在该端口上接收数据时运行。
如果你想摄取Kinesis流,那么你可以使用Kinesis客户端库编写代码。或者您可以编写一个在一个或多个web服务器上运行的REST API。或者,您可以编写绑定到服务器上特定端口并侦听TCP数据包的代码,但我不建议在那么低的级别上这样做。如果需要,还可以让API网关将数据直接发送到Lambda函数。
最简单的选择是使用新的亚马逊Kinesis Firehose服务:
https://aws.amazon.com/blogs/aws/amazon-kinesis-firehose-simple-highly-scalable-data-ingestion/
您只需要创建一个交付流,将数据提交到流中,并将它们引导到S3存储桶中。您还可以将数据自动加载到Amazon Redshift。