Mr *_*bia 6 sharding load-balancing high-availability
我认为我对一些概念感到困惑,这就是为什么我请你帮助我解决这个问题:
我们有一个大型网络应用程序,供许多用户(公司)使用,部署在用户场所。但现在我们正在转向SaaS,因此为了将应用程序设置为像这样,我们正在做一些调整。
为了处理我们的用户,我们像这样工作:每个用户都有一个数据库。当然,我们需要负载平衡,因为我们需要很多服务器,所以我提出了“分片”架构。我的想法是拥有彼此完全独立的网络服务器。因此,我们将所有用户数据分割到 10 台服务器中。因此,当用户登录时,实际上他将连接到服务器 4。为了保持可用性,实际上其中一台服务器将是一个由两到三台服务器组成的小型集群,其数据库在它们之间进行复制。我们在每个“集群”中使用内存缓存。我们甚至可以在这个级别进行负载平衡,我们只是认为我们不需要它,因为数据/用户已经分开了。
一些问题:
这是分片吗?请注意,每个集群服务于给定的用户组,并且集群之间没有关系。我们在每个集群中没有一个带有联合数据库的主数据库,但具有相同的数据库结构,只是它被分割在服务器之间。
当用户第一次到达(未经身份验证)时,如何重定向用户?这里不就是负载均衡应用的地方吗?但如果用户数据在服务器之间分割呢?我一直在想,这里我们有一个“公共/身份验证集群”,它将处理未经身份验证的用户,即网站的“公共”部分。并且根据一个非常简单的内存缓存数据库,它将用户重定向到其数据所在的相应集群。如果是这样 ..
我如何重定向它们?我认为唯一的方法是将他们发送到类似此处解释的地方。只是我不想要 server123.mysite.com。
我认为“公共/身份验证集群”设计得不好。因为我有 2-3 个服务器,仅用于向所有用户提供主站点(在身份验证之前),而在后面,我有 5-6 个集群,其中一些可能正在休眠。或者相反:我有一个负载很重的集群,而公共集群正在休眠,因为它的唯一任务是显示主页并处理重定向到登录过程。
如果这一切都有效的话
感谢您的帮助。
基本上我会说,是的,这就是分片。
为了避免需要对哪个用户位于哪个集群上有一些“全局”知识(因此您提到了 memcache 数据库),您可以使用某种(一致)散列。
要将用户重定向到正确的集群而不需要单独的主机名,您可以在身份验证成功后向客户端发送一个 cookie,其中包含用户集群的标识符。负载均衡器可以评估 cookie,以将所有进一步的请求转发到正确的集群。这是负载平衡中“会话持久性”的常见做法。
我认为负载平衡一词仅适用于确实有多个(主动/主动)服务器是为一个用户的请求提供服务的有效候选者的情况。