用于存储Web会话的FOSS解决方案

时间:2013-06-07 16:30:56

标签: python session web-applications pyramid

上下文

我正在开发一个简单的Web应用程序(用python / pyramid编写),底层的http服务作为数据存储,并通过后端http通信与合作伙伴集成。此Web应用程序将部署在3个或更多节点中,并且前面有负载平衡器

问题

大多数用户导航数据将存储在服务器端的会话中(我不想使用加密的cookie数据加载浏览器),这带来了如何正确复制会话的问题。适当的负载平衡和避免用户导航中断非常重要,因此我不想使用粘性会话,也不想丢失会话数据。

问题

我应该使用什么?我正考虑将会话数据存储在关键数据存储(memcachedrediscassandracouchbase)或关系数据存储(postgresql或{{ 3}})

修改

这是我的mysql,我尝试在不同的数据存储上指向高点和低点。这个问题因为很难理解这个问题而被关闭了,所以我在没有我意见的情况下简化并创建了这个问题

2 个答案:

答案 0 :(得分:1)

我使用pyramid_beaker来存储会话数据。它将beaker库包装成金字塔。

在生产服务器上,我使用memcached后端。我不记得我选择哪个库。

一些实施细节:

  1. 我将pyramid_beaker分成pyramid_beaker_https,并对所有用户使用2个Cookie。一个是“仅限http”,它支持公共数据和站点查看权限。另一个是“仅https”,用于/ account和任何写操作下的所有内容。

  2. 我也添加了“自动登录”cookie。如果会话身份验证失败(因为memcached已关闭,现在它无效),则定期重置的自动登录已加密数据以重新创建cookie会话。

  3. 我跟踪会话中每次登录的情况,因此自动登录需要重新验证任何/帐户或选择写入操作。

答案 1 :(得分:1)

Couchbase服务器被广泛用作分布式会话存储。您可能知道Couchbase是一个构建在Memcached协议顶部的NoSQL数据库。

这意味着您具有Memcached的速度和可靠性,但具有Couchbase群集的强大功能。群集上的分区非常快,因为客户端(或moxi,memcached代理)负责选择会话应该到达的节点,并在需要时异步复制它(因此不会影响性能)。

一些有趣的指示: - http://www.couchbase.com/memcached - http://www.couchbase.com/docs/couchbase-devguide-2.0/couchbase-usecases.html - http://www.couchbase.com/couchbase-server/use-cases

免责声明:我是Couchbase的技术推广专员