22 domain-name-system web-server
StackOverflow/ServerFault 有多少个 Web 服务器?
如果答案是“不止一个”,那么它是否在 DNS 轮询时实现了会话粘性?
Tom*_*meh 43
大型网站可能会跨多台机器进行“负载平衡”。在许多负载平衡设置中,用户可能会在会话期间访问任何后端机器。因此,存在多种方法来允许多台机器共享用户会话。
选择的方法将取决于所采用的负载平衡风格,以及后端存储的可用性/容量:
会话信息仅存储在 cookie 中:会话信息(不仅仅是会话标识符)存储在用户的 cookie 中。例如,用户的 cookie 可能包含他们购物篮的内容。为了防止用户篡改会话数据,HMAC 可能会与 cookie 一起提供。这种方法可能最不适合大多数应用程序:
负载均衡器总是将用户定向到同一台机器:许多负载均衡器可能会设置他们的会话 cookie,指示用户正在从哪台后端机器发出请求,并在将来将它们定向到那台机器。因为用户总是指向同一台机器,所以不需要在多台机器之间共享会话。这在某些情况下可能很好:
共享后端数据库或键/值存储:会话信息存储在后端数据库中,所有 Web 服务器都有权查询和更新。用户的浏览器存储了一个包含标识符(例如会话 ID)的 cookie,指向会话信息。这可能是三种方法中最干净的方法:
总体而言,大多数动态 Web 应用程序执行多个数据库查询或键/值存储请求,因此数据库或键/值存储是会话数据的逻辑存储位置。
小智 4
如果您的问题是如何跨多个前端 Web 服务器维护会话,那么答案通常是使用集中式数据库。您无需依赖 Web 服务器实例来跟踪本地文件系统上的会话文件,而是将会话 ID 和数据写入中央数据库,然后所有 Web 服务器将从那里检索数据。