4

我想我对一些概念感到困惑,这就是为什么我请你帮我解决这个问题:

我们有一个被许多用户(公司)使用的大型网络应用程序,它部署在用户场所。但是现在我们要进行 saas,所以为了设置应用程序的行为,我们正在做一些调整。

为了处理我们的用户,我们的工作方式如下:我们将为每个用户提供一个数据库。当然,我们需要负载平衡,因为我们需要很多服务器,所以我提出了一个“分片”架构。我的想法是让 Web 服务器彼此完全独立。因此,我们将所有用户数据拆分为 10 台服务器。因此,当用户登录时,实际上他将连接到例如服务器 4。实际上,为了保持可用性,每台服务器中的一个将是一个由两台服务器组成的小型集群 - 三台服务器,它们的数据库在它们之间进行复制。我们在每个“集群”中使用内存缓存。我们甚至可以在这个级别进行负载平衡,我们只是认为我们不需要它,因为数据/用户已经被分割了。

一些问题:

  1. 这是分片吗?请注意,每个集群都服务于给定的一组用户,并且集群之间没有关系。我们在每个集群中没有一个带有联合数据库的主数据库,而是相同的数据库结构,只是它在服务器之间拆分。

  2. 我如何在用户第一次到达时重定向用户(未经过身份验证)?不是在这里应用负载平衡吗?但是如果用户数据在服务器之间拆分?我一直在想,在这里我们会有一个“公共/身份验证集群”来处理未经身份验证的用户,即网站的“公共”部分。并且根据一个非常简单的 memcache db,它会将用户重定向到他们的数据所在的相应集群。如果是这样的话 ..

  3. 我如何重定向它们?我看到的唯一方法是将它们发送到此处解释的内容。只是我不想要 server123.mysite.com。

我认为“公共/身份验证集群”设计得不好。因为我有 2-3 台服务器仅用于为所有用户提供主站点(在身份验证之前),而在后面我有 5-6 个集群,其中一些可能正在睡觉。或相反:我有一个负载很重的集群,而公共集群正在睡觉,因为它的唯一任务是显示主页并处理重定向到登录过程。

如果这一切奏效,

  1. 这个结构好吗?请假设每个用户都很重(事实上,我们不仅有一个 php 正在运行,还有 .NET 和其他服务在运行,等等)。我不认为这是一种矫枉过正的做法,而只是一种处理多个用户的结构。你有其他想法吗?

谢谢你的帮助。

4

1 回答 1

1

基本上我会说,是的,这是分片。

为了避免需要对哪个用户住在哪个集群上有一些“全局”知识(因此您提到了一个 memcache 数据库),您可以使用某种(一致的)散列。

要将用户重定向到正确的集群而不需要单独的主机名,您可以在成功验证后向客户端发送一个 cookie,其中包含用户集群的标识符。负载均衡器可以评估 cookie,以将所有进一步的请求转发到正确的集群。这是负载平衡中“会话持久性”的常见做法。

我认为负载平衡一词仅适用于确实有多个(活动/活动)服务器是为一个用户提供请求的有效候选者。

于 2013-06-07T19:09:55.443 回答