【发布时间】:2010-09-20 15:53:46
【问题描述】:
我的 django 网站位于基于 Apache 的负载均衡器后面。还有一个服务器处理静态文件请求,但这很简单。
困扰我的是如何处理负载平衡器可以将其扔到任何应用程序服务器的用户?它们都共享同一个 DB-cluster(它很聪明吗?或者我也应该在这里分开它?),所以我只需要关心会话。
现在会话存储在内存中,以提高性能。我宁愿把它们留在那里,所以我需要做的是确保同一个用户总是会访问同一个应用服务器。
我想到了一些简单的解决方案。
1) 使其基于 IP。可以说,奇数 IP 访问服务器 A,偶数访问 B。但是,如果用户使用代理或 IP 经常更改怎么办?
2) 当请求到达负载平衡服务器时,我可以尝试检查它的 cookie 并查看应该由哪个服务器处理。有可能/有意义吗?
3) 我知道使用mod_proxy_ajp 的J2EE 解决方案可以处理这些情况,尽管我不知道幕后发生了什么。那里的东西可以用于 Django 吗?
或者也许还有其他方法可以为此对 Django 进行集群化?
【问题讨论】:
-
如果您可以放宽直接在 RAM 中缓存会话的要求,一种不需要粘性会话负载平衡器的解决方案是使用数据库支持的会话(可能的 cached_db 会话)和为数据库服务器/池提供大量 RAM 以保持性能。不如内存中的会话快,但对负载平衡器的关注更少……
标签: django session application-server