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