2

我正在寻找有关 AWS 架构决策的方向。我的目标是允许用户将文件 ftp 到 EC2 实例,然后对文件进行一些分析。我的重点是尽可能多地以面向服务的方式构建它......并在未来将其扩展到多个客户端,每个客户端都有自己的 ftp 服务器和处理队列,而不会混合数据。

目前,我有一个安装了 vsftpd 的 dev EC2 实例和一个运行 Chokidar 的 node.js 进程,它不断地监视要删除的新文件。当该文件丢失时,我希望通知另一台服务器或一组服务器来获取该文件并对其进行处理。

ftp 服务器是否应该将文件移动到 S3,然后使用 SQS 让处理服务器池知道它已准备好进行处理?我应该使用 SQS,然后让服务器池 ssh 进入 ftp 实例(或其他方法)来获取文件,而不是使用 S3 作为中介吗?有更好的方法吗?

非常感谢任何指导。随意向我学习任何可以在高文件量下省钱的替代想法。

4

4 回答 4

3

我会把它分成小组件。

  • 负载均衡器
  • 伸缩组中的FTP服务器
  • FTP 服务器上的守护程序移动到 S3,然后将作业排队
  • 处理伸缩组中的服务器

这样,您可以在必要时扩展 ftp 服务器,或扩展处理服务器(根据 SQS 队列长度或处理器利用率)。您最终可能会得到一个 ftp 服务器和 5 个处理服务器,反之亦然 - 但至少这样您只能在瓶颈处扩展。

您可能想要查看的另一件事是 DataPipeline - 它(虽然不知道您的工作细节)听起来像是为您的用例量身定制的。

S3 和队列很便宜,它可以让您更精细地控制不同组件以适当扩展。您也可以使用通配符策略和 IAM 来加强数据隔离。

于 2013-09-02T10:05:20.423 回答
2

理想情况下,我会尝试在当前放置的服务器上处理文件。这将节省大量的网络流量和 CPU 负载。

但是,如果您希望其中一台服务器像反向代理并在服务器群之间进行负载平衡,那么我将通过 http 调用通知服务器文件已到达。我将通过 ftp 提供该文件,因为您已经有工作的 vsftp 这不会有问题,并将在 http 调用中包含文件 ftp url,因此将进行处理的服务器可以获取该文件并立即开始处理它.

这样一来,您将无需使用任何额外的 S3 或 SQS 或任何其他附加服务,从而节省资金。

如果服务器群由相同类型的服务器组成,那么分配负载的算法应该是 RoundRobin 如果服务器容量不同,那么负载分配应该根据服务器性能进行。

例如,如果服务器一的性能是服务器三的 3 倍,而服务器二的性能是服务器三的 2 倍,那么您可以这样做:

1: Server ONE - forward 3 request
2: Server TWO - forward 2 request
3: Server THREE - forward 1 request
4: GOTO 1

理想情况下,应该有来自报告当前负载的服务的反馈,以便负载均衡器知道谁是下一个请求的最佳候选者,而不是使用硬编码算法,因为请求可能不需要完全相同数量的资源。已处理,但这开始看起来像Map-Reduce 范式并且超出了范围......至少在开始时是这样。:)

于 2013-08-25T03:45:09.797 回答
1

如果您想坚持使用 S3,您可以使用RioFS将 S3 存储桶挂载为 FTP 和处理服务器上的本地文件系统。然后你可以做通常的文件操作(例如:当一个文件被创建/修改时得到通知)。

于 2013-09-03T17:21:30.750 回答
1

与 RioFS 一样,s3fs -fuse使用 FUSE 提供可(本地虚拟)挂载的文件系统;s3fs-fuse 目前维护良好

相比之下,Filesystem Abstraction for S3, HDFS and normal filesystem swineherd-fs允许采用不同的(本地虚拟)方法:

All filesystem abstractions implement the following core methods, based on standard UNIX functions, and Ruby's File class [...]。

作为“本地抽象层”,Only thoroughly tested on Ubuntu Linux我个人会选择更主流/可靠/更少的实验堆栈,即:

  • 用于 FTP 传输的(沙盒)vsftpd
  • (可选)监听文件系统更改,最后
  • 触发 middleman-s3_sync进行云提升(或自行同步)。

或者,更具实验性,有一些 github 项目可能适合它:

  • s3-ftp:将所有上传内容转发到 S3 存储桶 (Clojure) 的 FTP 服务器前端
  • ftp-to-s3:一个 FTP 服务器,它将接收到的每个文件上传到 S3 (Python)
  • ftp-s3 : Python 中到 S3 的 FTP 前端。

最后但并非最不重要的一点是,如果在 OSX 上,我确实建议使用捐赠软件 Cyber​​duck - 一个舒适的(并且非常类似于 FTP)客户端直接连接 S3。对于 Windows,有一个名为S3 Browser的( PRO可选)免费软件。

于 2014-09-07T22:30:46.727 回答