load-balancing - 分片和负载均衡器 : how does it works?

标签 load-balancing sharding high-availability

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

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

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

一些问题:

  • 这是分片吗?请注意,每个集群都服务于给定的一组用户,并且集群之间没有关系。我们在每个集群中没有一个带有联合数据库的主数据库,而是相同的数据库结构,只是它在服务器之间拆分。
  • 我如何在用户第一次到达时重定向用户(未经过身份验证)?不是在这里应用负载平衡吗?但是如果用户数据在服务器之间拆分?我一直在想,在这里我们会有一个“公共(public)/身份验证集群”来处理未经身份验证的用户,即网站的“公共(public)”部分。并且根据一个非常简单的 memcache db,它会将用户重定向到他们的数据所在的相应集群。如果是这样..
  • 我如何重定向它们?我看到的唯一方法是将它们发送到类似解释 here 的地方.只是我不想要 server123.mysite.com。

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

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

  • 谢谢你的帮助。

    最佳答案

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

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

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

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

    关于load-balancing - 分片和负载均衡器 : how does it works?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406064/

    相关文章:

    postgresql - 在 postgresql 中水平分片的好方法是什么

    hadoop - namenode ha故障转移时间

    centos - 无法映射名称 UUID |心脏起搏器 | Linux集群

    amazon-web-services - 应用程序控制的 session 粘性: enable stickiness on all cookies?

    LAMP 服务器中的 PHP 请求平衡

    apache - 相对链接(来自 https)给出 301 永久移动(到 http)

    nginx - 如何使用 ingress nginx 负载平衡套接字

    elasticsearch - Elasticsearch只读单节点集群的设置

    mysql 分片案例研究链接或论文

    kubernetes - k3s 嵌入式 etcd HA 解决方案不需要负载均衡器吗