我想我对一些概念感到困惑,这就是为什么我请你帮我解决这个问题:
我们有一个被许多用户(公司)使用的大型网络应用程序,它部署在用户场所。但是现在我们要进行 saas,所以为了设置应用程序的行为,我们正在做一些调整。
为了处理我们的用户,我们的工作方式如下:我们将为每个用户提供一个数据库。当然,我们需要负载平衡,因为我们需要很多服务器,所以我提出了一个“分片”架构。我的想法是让 Web 服务器彼此完全独立。因此,我们将所有用户数据拆分为 10 台服务器。因此,当用户登录时,实际上他将连接到例如服务器 4。实际上,为了保持可用性,每台服务器中的一个将是一个由两台服务器组成的小型集群 - 三台服务器,它们的数据库在它们之间进行复制。我们在每个“集群”中使用内存缓存。我们甚至可以在这个级别进行负载平衡,我们只是认为我们不需要它,因为数据/用户已经被分割了。
一些问题:
这是分片吗?请注意,每个集群都服务于给定的一组用户,并且集群之间没有关系。我们在每个集群中没有一个带有联合数据库的主数据库,而是相同的数据库结构,只是它在服务器之间拆分。
我如何在用户第一次到达时重定向用户(未经过身份验证)?不是在这里应用负载平衡吗?但是如果用户数据在服务器之间拆分?我一直在想,在这里我们会有一个“公共/身份验证集群”来处理未经身份验证的用户,即网站的“公共”部分。并且根据一个非常简单的 memcache db,它会将用户重定向到他们的数据所在的相应集群。如果是这样的话 ..
我如何重定向它们?我看到的唯一方法是将它们发送到此处解释的内容。只是我不想要 server123.mysite.com。
我认为“公共/身份验证集群”设计得不好。因为我有 2-3 台服务器仅用于为所有用户提供主站点(在身份验证之前),而在后面我有 5-6 个集群,其中一些可能正在睡觉。或相反:我有一个负载很重的集群,而公共集群正在睡觉,因为它的唯一任务是显示主页并处理重定向到登录过程。
如果这一切奏效,
- 这个结构好吗?请假设每个用户都很重(事实上,我们不仅有一个 php 正在运行,还有 .NET 和其他服务在运行,等等)。我不认为这是一种矫枉过正的做法,而只是一种处理多个用户的结构。你有其他想法吗?
谢谢你的帮助。