我有来自 2 个大型托管组织的 2 个系统管理员告诉我 Varnish 将处理 Web 服务器之间的会话共享。我在网上找不到任何支持这一点的东西,实际上在那个人明确表示没有的地方找到了这一点。我不知道这个人是 Varnish 的员工还是只是贡献者或什么。
只是在这一点上寻找更多验证。
会话允许您存储许多东西(购物车、登录用户等),并且通常由 cookie 标识(例如sessionid
)。Web 服务器知道如何使用此 sessionid 获取会话(并且可以访问/更新您的购物车),但 varnish 仅处理 cookie。Varnish 可以对后端进行负载平衡查找,无论 cookie 值如何或基于某些规则(您需要编写自己的 varnish 配置)。
但是,Web 服务器之间会话共享的一个挑战是 Web 服务器是否可以访问由另一个 Web 服务器创建/更新的会话。在许多 Java Web 容器中,会话默认存储在内存中(只有一个 Web 服务器),负载均衡器实现了某种“粘性会话”机制(始终将带有会话的用户发送到特定的后端,可以用清漆轻松设置)。另一种选择是将(序列化的)会话值存储在共享数据库中,以便任何后端都可以检索它们(并且在 Web 服务器出现故障时将继续工作)。第三种选择是将 session 完全序列化为 cookie 并停止使用 sessionid,但这很复杂(有限的大小、带宽、安全性需要一些签名机制,但可扩展性很好)。
所有方法都有优点和缺点。你必须选择,清漆支持任何选项,但不会“自动”做你想做的事,所以准备写一点清漆配置......
如果您要描述您希望如何进行负载平衡,或者您尝试实现什么,您可以获得更具体的答案。