Nginx 是事件驱动,可是它运行的项目是事件驱动吗?

2015-05-10 17:45:54 +08:00
 KyL

我知道Nginx是事件驱动而不是基于分离进程的。同时Nginx可以通过uWSGI,FastCGI等协议来Hold住PHP/Py/RoR构建的Web App。请问当这种情况下,业务逻辑本身怎么能够变成事件驱动呢?还是说只能用C写一个业务逻辑的Module,集成进Nginx里面才行?本人刚刚接触Web Server等概念,对此一直想不通。

3581 次点击
所在节点    NGINX
13 条回复
Septembers
2015-05-10 17:48:32 +08:00
你需要先了解Event Loop
see http://en.wikipedia.org/wiki/Event_loop
KyL
2015-05-10 18:53:01 +08:00
@Septembers 你的意思是Nginx是一个Dispatcher,Web App是Callback function?
ryd994
2015-05-10 23:06:36 +08:00
Nginx都已经处理好了,为什么要把后端也事件驱动?要是那样的话要Nginx何用?
Septembers
2015-05-11 00:01:17 +08:00
@ryd994 nginx作为 前端 能起到 流量整形 的作用
holulu
2015-05-11 09:33:41 +08:00
nginx 只负责前台请求的处理和转发,和后台没有关系的。如果后台用 PHP/Py/RoR ,还是按照它们自身的方式来运行,也就是本来是多进程就还是多进程,本来是多线程就还是多线程,不会因为用了 nginx 就改变的。
KyL
2015-05-11 10:16:20 +08:00
@holulu 也就是说有多少个Requests进来,后天的PHP就会开多少个进程来处理Requests?那么Nginx本身的优势是什么?仅仅是转发的话,应该也消耗不了多少资源吧?
luciferlu
2015-05-11 10:32:14 +08:00
后端是单节点时,多进程能够充分利用CPU多核的资源。当后端是多节点时,Nginx可以将request按照配置的负载均衡策略分发到后端多个节点上,当然多节点时,每节点可以运行多个进程。反向代理本身的逻辑很简单,是重度网络IO的应用。基于事件的异步IO,Nginx能够比同步IO多得多的并发。后端的应用可以根据应用的特性以及开发的难度,来决定是否使用事件驱动。我认为如果重点是业务逻辑及计算,没有必要为了事件驱动而增加开发的复杂度,带来更多的不定因素。如果是处理大量并发,IO的应用,事件处理能够提高单进程的处理能力,节省硬件资源
holulu
2015-05-11 10:52:47 +08:00
@KyL 就是做转发。如果后台是多机器了,也可以做负载均衡。还可以限制请求速率,对请求和响应做些修改等等。其实这些都是转发附带的功能了。
nginx 的优势就是解决 C10K 问题,同时接受大量请求。例如做负载均衡的时候,就是一台 nginx 的机器就可以负责给后台几十机器做转发了。
KyL
2015-05-11 11:29:18 +08:00
@holulu 如果是单机Server的话,每个Request,PHP都要开一个进程的话,那么Nginx相对于Apache有什么优势呢?还是差不多?
holulu
2015-05-11 14:24:00 +08:00
@KyL 如果 PHP 的话,看用什么方式吧,可以是 Apache 一起来处理 PHP ,也可以 Apache 转发给 PHP 来处理。如果 Apache 处理的话,如果 PHP 程序有问题 ,就连累到 Apache ;如果是转发的话,除了 PHP 开一个进程来处理之外,Apache 也要开一个进程来处理这个连接,而 nginx 则是一个 worker 进程可以处理多个连接
julyclyde
2015-05-11 17:02:13 +08:00
不存在“它运行的”什么东西。它只是通信转发而已,通信这部分是event loop的
KyL
2015-05-12 11:10:33 +08:00
@holulu 可以理解成一个Worker处理几个连接和它们对应的几个PHP进程呢?
mkeith
2015-05-20 15:01:31 +08:00
woker 约等于 CPU的个数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189979

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX