【发布时间】:2017-02-17 09:39:06
【问题描述】:
这是我的场景。
我有一个地图切片服务器,可以创建数千个不同缩放级别的地图切片。目前这是在一个 EC2 实例上运行的。我想坚持使用 AWS。
当前工作流程 - 一个瓦片的请求进来,nginx 检查该瓦片是否存在于缓存中。如果该图块存在,它将提供它。如果它不存在,它将请求传递到一个切片创建脚本,该脚本既为用户提供新创建的切片,又将其缓存以供将来使用。当需要创建大量图块时,这开始陷入困境。
我想把它转移到一个更加分布式的架构中,其中瓦片从 s3 提供,如果它们不存在,它们会被任意数量的 celery 任务渲染,创建瓦片并将它们缓存到 s3。
我最初的想法是为事物的切片创建端设置 ELB,为切片缓存设置 s3。问题是如何在将切片发送到 ELB 进行渲染之前检查 s3 中是否存在切片。
我尝试使用try_files 指令在ELB 前面设置nginx 来检查s3。这不起作用,尽管我能够在 s3 中代理图块。
我的问题是这样的用例通常如何在 AWS 架构中进行管理?一个请求进来,检查一个存储位置,如果它不存在,它被创建并返回。
谢谢。
【问题讨论】:
-
请求的图块已经被渲染和存储的可能性有多大?似乎这个问题的答案会影响解决方案的可行性和效率。
-
取决于缩放级别和空间位置。我们正在预缓存低级切片,因此 z0-12 被缓存并可作为静态资产使用。当请求获得更高的缩放级别时,将开始创建平铺并存储以供将来使用。这样,经常访问的区域就已经被缓存了。我现在遇到的问题是单台机器上的缓存使一切陷入困境,我无法提供静态图块。
标签: amazon-web-services amazon-s3 distributed-computing amazon-elb