`
zy116494718
  • 浏览: 476709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基础概念之Master与Worker

阅读更多

1.master与worker

 

nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。我们也可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行。很显然,生产环境下我们肯定不会这么做,所以关闭后台模式,一般是用来调试用的,在后面的章节里面,我们会详细地讲解如何调试nginx。所以,我们可以看到,nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。nginx采用多进程的方式有诸多好处,所以我就主要讲解nginx的多进程模式吧。

刚才讲到,nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。nginx的进程模型,可以由下图来表示:

 

nginx进程模型

现在,我们知道了当我们在操作nginx的时候,nginx内部做了些什么事情,那么,worker进程又是如何处理请求的呢?我们前面有提到,worker进程之间是平等的,每个进程,处理请求的机会也是一样的。当我们提供80端口的http服务时,一个连接请求过来,每个进程都有可能处理这个连接,怎么做到的呢?首先,每个worker进程都是从master进程fork过来,在master进程里面,先建立好需要listen的socket(listenfd)之后,然后再fork出多个worker进程。所有worker进程的listenfd会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。我们可以看到,一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。

那么,nginx采用这种进程模型有什么好处呢?当然,好处肯定会很多了。首先,对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快启动新的worker进程。当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。当然,好处还有很多,大家可以慢慢体会。

分享到:
评论

相关推荐

    结合 Etcd 与 MongoDB 实现一个基于 Master-Worker 分布式 架构的 crontab 系统.zip

    本项目"结合 Etcd 与 MongoDB 实现一个基于 Master-Worker 分布式架构的 crontab 系统"旨在解决这个问题,它巧妙地将 Etcd 作为分布式协调器,MongoDB 作为数据存储,以及 Node.js 作为后端开发语言,共同搭建了一个...

    javaThreadTest

    总的来说,JavaThreadTest所涉及的知识点主要包括:Java多线程、线程池的概念与实现、Master Worker模式、任务提交与结果获取、线程间的通信以及分布式计算的基本原理。理解并掌握这些知识,对于开发高效、可扩展的...

    scss-master.zip

    6. **1 - 相关介绍.md**:这份文档应该是SCSS的基础介绍,包括SCSS的起源、优势、基本语法以及与CSS的关系。 7. **worker**:这可能是一个工作目录,包含了与编译或自动化任务相关的脚本或工具。 8. **docs**:...

    小象sparktraining-master.rar

    本文将深入探讨基于"小象Sparktraining-master"项目的Spark核心概念、架构设计以及实际应用,帮助读者全面理解并掌握Spark的相关知识。 1. Spark概述 Spark最初由加州大学伯克利分校AMPLab开发,是一款开源的大数据...

    vue-webworker-example:Vue.js 中的 Web Worker 示例

    首先,我们需要了解Web Worker的基本概念。Web Worker 分为两种类型: Dedicated Worker 和 Shared Worker。Dedicated Worker 用于一个特定的脚本,而 Shared Worker 可以被多个窗口或标签页共享。在这个Vue示例中,...

    hera-master分布式任务调度源码 .zip

    - **Worker节点**:执行实际的任务,与Master节点保持心跳连接,报告任务状态和资源使用情况。 - **任务调度策略**:Hera-Master可能采用了多种调度策略,如轮询、优先级队列、公平调度等,根据任务的优先级、依赖...

    5-Cluster(集群).pdf

    - `disconnect`:当Worker与Master失去连接时触发。 - `error`:在Worker中发生错误时触发。 - `exit`:Worker进程退出时触发,可能由于正常关闭或异常结束。 - `listening`:Worker开始监听网络套接字时触发。 ...

    基于Akka模拟实现Spark Standalone.pdf

    #### 一、Akka介绍与核心概念 Akka 是一款采用Scala语言编写的库,主要用于简化在JVM平台上构建高并发、可伸缩且具备容错能力的应用程序的过程。它支持Java与Scala两种语言,并通过Actor模型实现了这一点。 **Akka...

    storm-starter-master

    总的来说,"storm-starter-master"是学习和探索Apache Storm实时数据处理能力的理想起点,通过这个项目,开发者可以深入理解流式数据处理的基本概念,以及如何利用Storm构建可扩展、容错的实时处理系统。通过实践...

    kubernetes-basico-master.rar

    1. **Kubernetes基本概念**: Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它提供了一个高度可扩展的架构,可以管理跨多个主机的容器化应用程序。 2. **容器编排**...

    WebWorker:允许您创建工作线程(线程)和动态分配的工作线程池(线程池)

    **WebWorker的基本概念** 1. **主线程**:也称为UI线程,负责处理用户的交互、渲染页面和更新DOM等任务。 2. **Worker线程**:在后台运行,用于处理计算密集型任务,如解码图片、执行大数据分析或进行复杂算法计算。...

    lg8294-JavaScript30-master_javascript_

    理解这些基本概念是成为一名合格JavaScript开发者的前提。 2. **DOM操作**: JavaScript与网页交互的关键在于对DOM(文档对象模型)的理解。项目可能会涉及到元素选择、添加、删除以及修改DOM节点,这是创建动态网页...

    Webworker通勤者:一种协调Webworker工作的有效方式

    然而,Webworker的使用并非没有挑战,其中最大的问题之一就是如何有效地管理和协调多个worker之间的通信。"Webworker通勤者"是一种概念证明,旨在解决这个问题,通过创建一个协调机制,使Webworker能够协同工作,...

    大数据处理期末考试题库.pdf

    【Spark的基础知识】 Spark是一个快速、通用且可扩展的大数据处理框架,它的核心组件包括...以上知识点涵盖了Spark的基本概念、组件、配置、运行模式以及数据处理等方面,是准备大数据处理期末考试的重要参考资料。

    Nginx基本原理

    master进程主要负责管理和监控worker进程,接收外部信号,并在必要时重新启动worker进程。而worker进程则是实际处理网络事件和客户端请求的实体。 - 每个worker进程都是通过master进程fork出来的,它们共享相同的...

    worker_pool

    在IT行业中,`worker_pool`通常指的是在多线程编程中的一个概念,特别是在JavaScript中,由于主线程(也称为浏览器的事件循环)受到单线程执行的限制,不能并发执行耗时任务,所以引入了Web Worker来实现后台计算。...

    webworker-ar.github.io

    1. **Web Worker的基本概念**:Web Worker允许在后台线程运行脚本,处理大量数据或复杂计算,防止主线程(即用户交互的线程)被阻塞。 2. **创建Web Worker**:通过`new Worker()`创建一个新的Worker实例,传递一个...

    1、Kubernetes 开篇-V1.pdf

    本文档对 Kubernetes 的基本概念和组件进行了详细的介绍。从 Kubernetes 的发展历程到其核心组件的解释,文档覆盖了 Kubernetes 的主要方面。 目录 1. Kubernetes 开篇 Kubernetes 是一种容器编排系统,主要用于...

    k8s(kubernetes)集群的两种搭建方式(二进制方式)

    在IT行业中,Kubernetes(简称k8s)已经成为容器编排领域的主流标准,它使得部署、管理和...对于新手来说,建议先熟悉k8s的基本概念和组件,再尝试这种搭建方式。在实践中不断探索和学习,才能更好地掌握k8s的魅力。

    spark部署和基础代码的编写

    在深入探讨Spark的部署和基础代码编写之前,我们先来理解Spark的基本概念、为何要学习Spark以及它的特点。 1. **Spark入门** - **课程目标**: 1.1. 熟悉Spark的相关概念:这包括Spark的核心组件,如Spark Core、...

Global site tag (gtag.js) - Google Analytics