水平缩放:服务器之间路由用户生成的子域(Horizontal scaling: routing us

2019-09-16 16:47发布

我认为,正在超越一个VPS一个Web应用程序。 该架构包含大量小的用户,每一个都有自己的子域。 用户不进行交互。 负载意味着我将一些用户,所有新用户,到Web应用程序的另一个安装在单独的服务器上。

目前,每一个用户的子域下降到相同的虚拟主机,其中单个PHP前端控制器显示基于主机名相应的内容。 对于* .mydomain.com来有一个通配符DNS记录指向当前服务器。

什么是路由不同的用户子域到不同的服务器我最好的选择?

我的想法:

  • 为每个服务器一个新的顶级域名。 user.s1.mydomain.com,user.s2.mydomain.com等(不雅和泄漏信息)
  • 经营自己的DNS服务器,在服务器之间的路由用户(失败的额外点,不熟悉的技术)
  • 中央前端控制器/平衡器反向代理的每个请求到适当的服务器(失败的额外点,潜在地限制连接)

Answer 1:

在缩放时的应用程序的这一点上,我与中央前负载平衡器去。 Nginx的应处理正在由一个单一的服务器动态提供任何负载。 我们作为nginx的六个动态服务器和一个静态内容服务器的前端,并且没有瓶颈在视线上nginx的。

在你的规模点,设置Nginx的处理所有静态内容本身,并根据需要反向代理动态内容尽可能多盒。 对简单的代理通过设置接近:

upstream upstream_regular_backend {
    fair;
    server 10.0.0.1:80;
    server 10.0.0.2:80;
}

server {
    listen 0.0.0.0:80;
    server_name  example.com;
    proxy_set_header Host $host;
    proxy_set_header  X-Real-IP  $remote_addr;
    location / {
        proxy_pass http://upstream_regular_backend;
    }
}

对于提供静态内容,并传回所有的休息,是这样的:

server {
    listen 0.0.0.0:80;
    server_name  example.com;
    proxy_set_header Host $host;
    proxy_set_header  X-Real-IP  $remote_addr;
    index index.php;
    root /some/dir/:
    location ~ \.php {
        proxy_pass http://upstream_regular_backend;
    }
}

当然,如果你不使用PHP,相应调整配置。

在上游的定义,“公平”; 将负载均衡基于响应时间后端。 对于缓存的动机,你可能要使用“ip_hash;” 相反,因为它会降落的请求从客户端总是在同一台服务器上。

我们的设置是有点路越走越。 我们有nginx的负载均衡进行代理清漆缓存,这又代理了动态内容的服务器。

如果你担心的Nginx是一个单点故障,设置一个辅助服务器准备承担前端的IP在失败的情况下。



文章来源: Horizontal scaling: routing user-generated subdomains between servers