session - 如何避免给定分布式架构的单点故障

标签 session architecture scalability high-availability distributed-system

我经历过这个video - Scalability Harvard Web Development David Malan

这就是我陷入困境的地方。解释问题 -

enter image description here

假设 LB 使用循环法。

根据第一张图片,所有服务器都将 session 存储在其本地空间中,其他服务器无法访问该空间。如果下次有相同的请求,并且 LB 将此请求重定向到另一台服务器,则该服务器将询问身份验证。从用户的角度来看,这非常令人恼火。

根据第二张图片,所有服务器都在共享 session 。在这种情况下,当下一个请求来自同一客户端时,LB 会重定向到另一台服务器。现在,它将从 session 主机获取信息,而不是要求身份验证。

上面的视频链接中提到了这一点。

问题 -

  1. 现在 session 主机成为单点故障。如果主机宕机,将会严重影响可用性。我们怎样才能避免这样的情况发生?

最佳答案

您有这些选项(假设 session 是不惜任何代价都不能丢失的东西)

1) session 数据存储是一个高可用的数据存储。例如:您可以将 MongoDB 副本集用于此类 session 存储。它由 MongoDB 的三个节点组成,其中一个主节点和两个从节点(最少),当主节点出现故障时,其中一个节点将提升为主节点。这次选举可能需要几秒钟,但 session 不会丢失。

2) 使用内存数据共享库来进行数据分区和复制。一个例子是 Java 版的 Hazelcast。它为您提供跨 Web 层的对象级共享,您可以在此处存储共享的 session 。请注意,据我所知,在这种情况下(在磁盘上)没有数据持久性。

3)到目前为止,我使用的最具可扩展性的方法是使用客户端 session ,而不使用服务器端数据/ session 存储。在这种情况下,您可以做的是在每个应用程序服务器中存储一个很长的 key ,并在使用该 key 加密数据后将所有数据设置在cookie中。这种方法的唯一问题是,您需要对 session 中存储的内容非常有选择性,因为 cookie 的数据大小有限制。这种加密是双向的。大多数基于 SAAS 的工具都使用这种方法。

关于session - 如何避免给定分布式架构的单点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35860262/

相关文章:

iOS 毒蛇 : where to put the form validation code?

amazon-s3 - 云中的 monetdb、可扩展性、亚马逊 s3

performance - 在没有明确需求的情况下如何进行性能和可扩展性测试?

asp.net-mvc - 设计决策 - 扩展基于 Web 的应用程序架构

java - 两个应用程序实例可以与 Hibernate L1 缓存一起使用而不会出现任何数据库同步问题吗?

php - 如何在 cakephp 中使用 session 打印用户名?

c++ - 辅助函数 : static in cpp or define as static helper class method

multithreading - 使用rabbitmq与多线程之间的区别

php - 通过引用修改数组的问题

PHP session 和 iframe