高可扩展性的一种方法是使用网络负载平衡来分割多个服务器之间的处理负载。粘滞会话/会话相关性负载分流策略的优点和缺点?
这种方法提出的一个挑战是服务器在哪里知道状态 - 将用户状态存储在“会话”中。
此问题的一个解决方案是“粘性会话”(又名“会话亲和力”),其中每个用户都分配给单个服务器,并且他/她的状态数据在整个会话期间专门包含在该服务器上。
“粘性会话”方法的优点和缺点是什么?你使用它,如果是的话,你满意吗?
高可扩展性的一种方法是使用网络负载平衡来分割多个服务器之间的处理负载。粘滞会话/会话相关性负载分流策略的优点和缺点?
这种方法提出的一个挑战是服务器在哪里知道状态 - 将用户状态存储在“会话”中。
此问题的一个解决方案是“粘性会话”(又名“会话亲和力”),其中每个用户都分配给单个服务器,并且他/她的状态数据在整个会话期间专门包含在该服务器上。
“粘性会话”方法的优点和缺点是什么?你使用它,如果是的话,你满意吗?
优点:
缺点:
但是,如果您必须使用服务器本地会话状态,则粘性会话肯定是要走的路 - 即使您不使用服务器本地会话状态,粘滞性对缓存利用率也有好处(往上看)。您的负载平衡器应该能够查看HTTP Cookie(不仅是IP地址)以确定粘性,因为IP地址可以在单个会话期间更改(例如,在有线和无线网络之间对接笔记本电脑)。
更好的是,根本不要在Web服务器上使用会话状态!如果会话状态非常痛苦(例如购物车),请将其存储在中央数据库中并定期清除旧会话。如果会话状态不重要(例如用户名/头像网址),然后将其粘贴到cookie中 - 只要确保不会向cookie中插入太多数据。
由于上述原因,现代版本的Rails默认将会话变量存储在cookie中。其他Web框架可能有“存储在cookie中”和/或“在数据库中存储”选项。
好an!您还请多说一些关于“您的负载均衡器应该能够查看HTTP Cookie(不仅是IP地址)”的信息,您是什么意思?负载均衡器如何知道它是否是同一个用户? – Jaskey 2014-11-10 05:32:29
网络应用程序通常会向客户端发送cookie,以便当客户端返回其他HTTP请求时,服务器可以识别相同的用户或会话。某些负载平衡器可以查看HTTP cookie标头内部以标识用户,并且可以使用该cookie值而不是IP地址来确定哪个服务器应该接收该请求。 – 2014-11-16 18:50:37
如果我将状态存储在db/memcache中,我可以认为应用程序是无状态的,而有些人会说要制作无状态应用程序,我们必须在客户端维护状态。 – Jaskey 2014-11-21 03:02:04