首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分布式架构如何为动态和静态内容提供服务

分布式架构如何为动态和静态内容提供服务
EN

Stack Overflow用户
提问于 2017-02-17 09:21:39
回答 1查看 77关注 0票数 0

这是我的场景。

我有一个地图瓦片服务器在不同的缩放级别创建数千个地图瓦片。目前,它在一个EC2实例上运行。我想坚持使用AWS。

当前工作流程-请求一个磁贴进入,nginx检查该磁贴是否存在于缓存中。如果磁贴存在,它就会将其服务出去。如果它不存在,它将请求传递到一个瓦片创建脚本,该脚本既为用户提供新创建的瓦片,又将其缓存以供将来使用。当需要创建大量的磁贴时,这开始陷入停滞。

我想把它移到一个更分布式的架构中,在这种架构中,瓦片是由s3提供的,如果它们不存在,它们会被任意数量的芹菜任务渲染,创建瓦片并将它们缓存到s3中。

我最初的想法是为瓦片创建方面设置ELB,为瓦片缓存设置s3。问题是如何在将瓦片发送到ELB进行渲染之前检查s3中是否存在瓦片。我尝试用一个检查s3的try_files指令在ELB前面设置nginx。这不起作用,尽管我能够在s3中代理tiles。

我的问题是,像这样的用例在AWS架构中通常是如何管理的?一个请求进入,检查一个存储位置,如果它不存在,它被创建并返回。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-02-17 09:39:06

我不完全清楚你是如何配置Nginx的,但听起来你需要配置它,让它总是运行一个动态的后端进程,该进程可以检查地图瓦片是否存在。如果不存在,该过程将创建磁贴,然后返回磁贴。您可以缓存HTTP响应,这样进程就不会陷入停滞状态,可以反复检查是否存在相同的磁贴。

如果我从头开始一个这样的项目,我可能会创建一个数据库来存储每个地图瓦片的信息,可能是DynamoDB。该数据库将包含每个创建的磁贴的记录。当您收到请求时,首先执行数据库查找以获取磁贴的S3位置。如果没有得到数据库记录,您可以创建磁贴,将其上载到s3,更新数据库表,然后返回磁贴。您可以在负载均衡器后面运行大量这样的服务器,并随着负载的增加而添加更多的服务器。

我将使用Redis (ElastiCache)来存储数据库查询结果,以加快对同一磁贴的后续请求。我也会把一个像CloudFront或CloudFlare这样的CDN放在整个缓存的前面,这样对同一磁贴的后续请求甚至不会命中你的服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42287746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档