我的理解是它nginx
非常适合提供静态内容。但我找不到任何关于它如何很好地提供大量静态内容的信息。假设我将其用作nginx
Web 服务器和node.js
应用程序服务器,那么我可以将其设置nginx
为反向代理和负载平衡器,这样我就可以生成多个node.js
实例(例如,在反向代理下,我可以运行 5 个node.js
应用程序)。架构如下所示
图片在这里。据我了解,扩展一个网站以提供动态内容(您需要做的就是生成多个nodejs
应用程序)并nginx
提供静态内容非常容易。但是,如果我有大量的
nginx
静态内容请求,而单个应用程序nginx
无法处理所有这些请求,该怎么办?我想我可以生成多个nginx
实例,但在我看来,这样做效率不高。我可以让nodejs
应用程序提供静态内容,但据我了解,由于它的单线程特性,这样做nodejs
效率也会很低。所以,您对如何管理nginx
大量静态内容有什么想法吗?或者提供任何有用的信息
答案1
从 nginx 文档中,您可以尝试一下“优化服务内容的性能”。 https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/
您可能需要预测或说明多少重负载对于您的系统而言才被视为重负载。
进行性能基准测试并检查优化系统是否仍然无法处理请求,如果是,我认为添加更多 nginx 是唯一的出路。
笔记:
- 您还可以尝试使用 AWS S3 或 Google Cloud Storage 来提供静态内容。
- 使用 CDN:Cloudflare 或 Cloudfront AWS
答案2
任何大型静态内容系统(当然称为内容传送网络)都会有多个(Web 服务器)节点,原因如下:
- 多个位置在物理上靠近用户可降低延迟。
- 网络接口速度和内存带宽受到限制。
- 存储 IOPS 有限。
- 可能需要高可用性。
了解单个节点的限制。在测试和生产中尽可能地推动一个节点,尝试各种配置和大小。当超出该范围时,使用您选择的负载平衡解决方案扩展到多个节点:负载平衡式代理、DNS 或网络路由技巧。或者尝试商业 CDN 服务。
如果 CDN 的聚合资源满足要求,运行大量 Web 服务器的任何“低效率”都无关紧要。中型 VM 实例通常价格低廉,您可以启动许多实例,这有助于横向扩展方法。