【发布时间】:2010-08-09 13:33:27
【问题描述】:
我正在构建一个 Python/Pylons webapp,到目前为止它已经由单个服务器提供服务,现在我想研究它如何在前面有某种负载平衡器的多台服务器之间进行扩展。
当然,主要关注的是服务器端状态。它包括用户会话数据、用户上传的数据(图片等)和缓存。我希望应用程序服务器共享缓存,因此如果其他服务器已经完成,则一台服务器不必做额外的工作。扩展可能不会很快成为问题,但这似乎是一个重大的架构决策,所以最好在一开始就半正确。
对于会话,我可以使用基于 cookie 的会话:http://beaker.groovie.org/sessions.html#cookie-based
对于用户上传的数据和缓存(当前都存储在本地文件系统中),我需要一种不同的方法,但我不确定哪一种最适合。我考虑过的一些选项:
- 分布式文件系统
- 尤其是 Amazon S3,因为我将 Amazon 定位为云提供商。但是,我想避免我的代码变得过于特定于供应商,因此稍后更改云提供商是可行的。
- [分布式] 键值存储,需要重写/抽象出假设所有数据都在文件系统上的代码部分
- 以某种方式完全避免共享数据,负载平衡器可以非常聪明地将请求定向到在本地具有必要用户数据/缓存的节点。等等,这叫做分片,对吧?
- 网络可访问的文件系统,特别是 NFS:NFS 目录导出到一个(可能是专用的)节点上,所有其他节点都挂载它。我能想到的可能问题:
- NFS 主机的带宽可能成为瓶颈
- 多个客户端尝试同时访问相同文件时的竞争条件
我目前正在考虑使用 NFS——它似乎是可能可行的最简单的解决方案。但是话又说回来,也许还有更多我不知道的警告,使这是一个短视的决定?对于托管在云中并有望横向扩展的应用程序,您的经验是什么?您使用了哪些形式的数据存储和共享?
【问题讨论】:
标签: python architecture cloud scaling