成都创新互联网站制作重庆分公司

nginx实现高并发的示例

这篇文章主要介绍了nginx实现高并发的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

成都创新互联专业为企业提供白云网站建设、白云做网站、白云网站设计、白云网站制作等企业网站建设、网页设计与制作、白云企业网站模板建站服务,10多年白云做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

简单来讲,就是异步,非阻塞,使用了epoll和大量的底层代码优化。

稍微详细一点展开的话,就是nginx的特殊进程模型和事件模型的设计。

进程模型

nginx采用一个master进程,多个woker进程的模式。

master进程主要负责收集、分发请求。当一个请求过来时,master拉起一个worker进程负责处理这个请求。

master进程也要负责监控woker的状态,保证高可靠性

woker进程一般设置为跟cpu核心数一致。nginx的woker进程跟apache不一样。apche的进程在同一时间只能处理一个请求,所以它会开很多个进程,几百甚至几千个。而nginx的woker进程在同一时间可以处理额请求数只受内存限制,因此可以处理多个请求。

事件模型

nginx是异步非阻塞的。

每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。

web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多。这是几个进程就解决高并发的秘密所在。

IO多路复用模型epoll

epoll() ,内核维护一个链表,epoll_wait 直接检查链表是不是空就知道是否有文件描述符准备好了。内核实现epoll 是根据每个 sockfd 上面的与设备驱动程序建立起来的 回调函数 实现的。那么,某个 sockfd 上的事件发生时,与它对应的回调函数就会被调用,来把这个 sockfd 加入链表,其他处于“空闲的”状态的则不会。

select() ,内核采用 轮训 的方法来查看是否有fd 准备好,其中的保存 sockfd 的是类似数组的数据结构 fd_set,key 为 fd,value 为 0 或者 1。

poll()

【总结】:epoll 与 select 相比最大的优点是不会随着 sockfd 数目增长而降低效率。

服务器端负载均衡 Nginx

nginx 是客户端所有请求统一交给 nginx,由 nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。

既请求由 nginx 服务器端进行转发。

客户端负载均衡 Ribbon

Ribbon 是从 eureka 注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。

既在客户端实现负载均衡。

应用场景的区别:

Nginx适合于服务器端实现负载均衡比如 Tomcat ,Ribbon适合与在微服务中RPC远程调用实现本地服务负载均衡,比如 Dubbo、SpringCloud 中都是采用本地负载均衡。

spring cloud的Netflix中提供了两个组件实现软负载均衡调用:ribbon和feign。

Ribbon

是一个基于 HTTP 和 TCP 客户端的负载均衡器,它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载。

springcloud的ribbon和nginx有什么区别?哪个性能好?

nginx性能好,但ribbon可以剔除不健康节点,nginx剔除节点比较复杂。ribbon还可以配合熔断器一起工作,ribbon是客户端负载均衡,nginx是服务端负载均衡。客户端负载均衡,所有客户端节点都维护自己要访问的服务端清单。服务端负载均衡的软件模块会维护一个可用的服务清单,ribbon 是一个客户端负载均衡器,可以简单的理解成类似于 nginx的负载均衡模块的功能。

感谢你能够认真阅读完这篇文章,希望小编分享的“nginx实现高并发的示例”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


新闻名称:nginx实现高并发的示例
文章来源:http://cxhlcq.com/article/isjegh.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部