0

这是我的场景。分布式架构如何适用于动态和静态内容

我有地图平铺在服务器不同的缩放级别创造了数千个映射砖。目前这在一个EC2实例上运行。我想坚持使用AWS。

当前的工作流程 - 一种用于瓷砖请求时,nginx的检查,如果在高速缓存中存在瓷砖。如果该图块存在,它就会显示出来。如果它不存在,它会将请求传递到一个贴图创建脚本,该脚本既将新创建的贴图提供给用户,也将其缓存以供将来使用。当需要创建大量图块时,这开始陷入困境。

我想把它移到一个更分散的架构,其中从s3提供贴图,如果它们不存在,它们会通过任意数量的芹菜任务呈现并创建贴图并将其缓存到s3。

我inital的想法是建立ELB对于事物的瓷砖创建侧和S3的小块高速缓存。问题是如何检查s3中是否存在拼贴,然后将其发送给ELB以进行渲染。 我试着在ELB前面设置nginx,用try_files指令来检查s3。尽管我可以在s3中代理磁贴,但这并不奏效。

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

谢谢。

+0

请求的图块已经被渲染和存储的可能性是多少?看起来答案似乎对解决方案的可行性和效率有影响。 –

+0

取决于缩放级别和空间位置。我们预先缓存低级别磁贴,因此z0-12被缓存并可用作静态资产。当一个请求进入更高的缩放级别时,图块的创建将被启动并存储以供将来使用。这样,经常访问的区域就已经被缓存了。我现在遇到的问题是单个机器上的高速缓存会导致所有内容枯竭,并且无法提供静态磁贴。 – james

回答

0

我不是你已经配置nginx怎么完全清楚,但它听起来就像你需要配置它总是击中一个动态的后端进程,可以检查地图瓦片还存在。如果该过程不存在,该过程将创建该块,然后返回该块。您可以缓存HTTP响应,以便进程不会停滞不前,检查是否存在同一个tile一遍又一遍地存在。

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

我会使用Redis的(ElastiCache)来存放数据库的查询结果,以加快对同一区块的后续请求。我还会在整个事物面前放置一个像CloudFront或CloudFlare这样的CDN,并缓存起来,以便后续对同一个tile的请求甚至不会触及您的服务器。

相关问题