我读了 'youtube-建筑'但还有一点不明白。
假设我要交付的内容比较大,并且一个负载均衡器 (nginx) 通过反向代理指向例如 10 个后端服务器 (java/jetty)。现在假设每个服务器的速率为 1 GBit/s。
当应用程序获得更多用户时,我有一些选择:
- 降低每个连接的最大下载速率。这样少数重度用户就不会影响其他用户的连接。(可扩展性有限)
- 重定向到后端服务器,以便客户端直接在那里下载,带宽成倍增加。(“youtube”风格?)
- 使用 DNS 负载平衡,带宽也会成倍增加。问题:我对负载平衡选择过程没有太多控制权
还有其他选择吗?
例如,第二个选项没有重定向?或者,客户端只加载应用程序的薄层(如“youtube.com”),然后从不同的域(如“xy.googlevideo.com”)下载视频,这是正常的吗?
答案1
在扩大规模和扩大横向扩展方面有多种选择。
将您的静态内容放在 CDN 上。这些内容将分布在互联网上,希望靠近客户。Youtube 绝对可以被视为 CDN,但请记住,他们的架构多年来一直在变化。
自行扩展。使用 DNS 或任播或向架构添加层。适应不止一个服务器守护进程的复杂性。另请参阅:扩展软件负载均衡器的典型方法是什么?
扩大规模。为负载均衡器获取更多带宽,例如多个 10 Gb 链路。检查您的软件是否可以扩展。