如何为高负载网络优化Nginx和Nodejs(高并发nginx负载均衡策略)

如何为高负载网络优化Nginx和Nodejs(高并发nginx负载均衡策略)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-12-27 19:38:00
文章简介

采用新的配置后,我发现服务器们占用的socket降低了90%。现在可以用少得多的连接来传输请求了。新的输出如下:ss-stotal:558(kernel604)tcp:4675(estab485

2025阿里云双十一服务器活动

采用新的配置后,我发现服务器们占用的socket降低了90%。现在可以用少得多的连接来传输请求了。新的输出如下:ss-stotal:558(kernel604)tcp:4675(estab485,closed4183,orphaned0,synrecv0,timewait4183/0),ports2768transporttotalipipv6*604--raw000udp13103tcp4924911inet5055014node.js得益于事件驱动式设计可以异步处理i/o,node.js开箱即可处理大量的连接和请求。虽然有其它一些调优手段,但这篇文章将主要关注node.js的进程方面。node是单线程的,不会自动使用多核。也就是说,应用不能自动获得服务器的全部能力。实现node进程的集群化我们可以修改应用,让它fork多个线程,在同一个端口上接收数据,从而实现负载的跨越多核。node有一个cluster模块,提供了实现这个目标所必需的所有工具,但要将它们加入应用中还需要很多体力活。如果你用的是express,ebay有一个叫cluster2的模块可以用。防止上下文切换当运行多个进程时,应该确保每个cpu核同一时间只忙于一个进程。一般来说,如果cpu有n个核,我们应该生成n-1个应用进程。这样可以确保每个进程都能得到合理的时间片,而剩下的一个核留给内核调度程序运行其它任务。我们还要确保服务器上基本不执行除node.js外的其它任务,防止出现cpu的争用。我们曾经犯过一个错误,在服务器上部署了两个node.js应用,然后每个应用都开了n-1个进程。结果,它们互相之间抢夺cpu,导致系统的负荷急升。虽然我们的服务器都是8核的机器,但仍然可以明显地感觉到由上下文切换引起的性能开销。上下文切换是指cpu为了执行其它任务而挂起当前任务的现象。在切换时,内核必须挂起当前进程的所有状态,然后装载和执行另一个进程。为了解决这个问题,我们减少了每个应用开启的进程数,让它们公平地分享cpu,结果系统负荷就降了下来:请注意上图,看系统负荷(蓝线)是如何降到cpu核数(红线)以下的。在其它服务器上,我们也看到了同样的情况。既然总的工作量保持不变,那么上图中的性能改善只能归功于上下文切换的减少。

排列不分先后:

1.当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于MySQL,sqlite更容易掌控。

2.关于并行计算,如果能避免就尽量避免。如果无法避免,记住,能力越大,责任越大。如果有可能,尽量避免直接对线程操作。尽可能在更高的抽象层上操作。例如,在iOS中,GCD,分发和队列操作是你的好朋友。人类的大脑没有被设计成用来分析那些无穷临时状态——这是我的惨痛教训所得。

3.尽可能简化状态,尽可能局部本地化。适用至上。

4.短小可组合的方法是你的好朋友。

如何为高负载网络优化Nginx和Nodejs,高并发nginx负载均衡策略

6.如果你认为一个用例场景也许“不会有问题吧”,它也许就是一个月后让你在发布的产品中遭受惨痛失败的地方。做一个怀疑主义者,测试,验证。

7.有疑问时,和团队中所有相关人交流。

8.做正确的事情——你通常会知道这指的是什么。

9.你的用户并不傻,他们只是没有耐心理解你的捷径。

10.如果一个开发人员没有被安排长期的维护你们开发的系统,对他保持警惕。80%的血、汗、泪水都是在软件发布后的时间里流的——那时你会变成一个厌世者,但也是更聪明的“行家”。

11.任务清单是你的好朋友。

12.主动让你的工作更有乐趣,有时这需要你付出努力。

13.悄无声息的崩溃,我仍然会为此从噩梦中惊醒。监控,日志,警报。清楚各种的假警报和不可避免的感觉钝化。保持你的系统对故障的敏感和及时警报。

以上就是如何为高负载网络优化Nginx和Node.js的详细内容,更多请关注主机测评网其它相关文章!

标签:
为什么大多数外贸网站都选择洛杉矶服务器
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!