流式计算-low watermark机制

前言 最近在学习流式计算相关的知识,在阅读了MillWheel论文以及DStream相关实现后,在这里对low watermark机制做一个总结与介绍。 Window 实时数据流是永不停歇的,我们无法获取所有的数据并产出一个最终的结果。很多情况下我们更关心的是最近的状态,而不是从实时数据...

2018-06-24 20:54:27

阅读数 917

评论数 0

nginx源码阅读(十五).事件模块小结(从解析配置到事件的处理)

前言 配置项结构体的创建及赋值 初始化工作 处理事件 小结 前言本小节主要是整理一下前几节分析的nginx的核心模块的ngx_events_module以及事件模块,关于事件模块什么时候初始化以及事件的处理等,因此不会涉及到太多具体的代码,主要是把握事件模块的整体。配置项结构体的创建及赋值在使用一...

2017-11-13 09:10:23

阅读数 565

评论数 0

nginx源码阅读(十四).惊群问题的解决

前言 accept导致的惊群问题 epoll导致的惊群问题 多个进程共用一个epfd 多个进程有自己的epfd 小结前言本小节将看到nginx中解决惊群现象的方法。所谓惊群现象,简单的来说就是当多个进程或线程在同时阻塞等待同一个事件时,如果该事件发生,会唤醒在等待的所有的进程/线程,但最终只可能有...

2017-11-11 22:31:41

阅读数 790

评论数 0

nginx源码阅读(十三).新建连接并处理就绪事件

前言 如何建立新连接 建立新连接的回调函数 处理事件 小结前言本小节主要讨论事件模块中如何接受新连接,其中涉及到了惊群以及负载均衡的处理。如何建立新连接之前在分析ngx_event_process_init函数时,将所有空闲连接形成链表之后,它会遍历所有监听端口并将其读事件的回调函数设置为ngx_...

2017-11-09 22:12:01

阅读数 503

评论数 0

nginx源码阅读(十二).定时器及超时事件的管理

前言 时间缓存 缓存时间的精度 定时器的实现 小结前言本小节将分析nginx定时器以及时间管理部分的知识,当事件超时时,会触发nginx中的超时机制进行处理。nginx的定时器的底层实现是使用的红黑树,这里就不去讲解红黑树了,网上有很多资料。时间缓存nginx为了性能方面的考虑,并不是每次需要获取...

2017-11-08 16:15:25

阅读数 657

评论数 0

nginx源码阅读(十一).ngx_epoll_module模块(上)

前言 模块的通用接口 感兴趣的配置项 存储配置项的结构体 事件模块的通用接口 小结 前言事件模块中有封装了多种I/O多路复用机制的模块,这里只分析epoll对应的ngx_epoll_module模块,如果你对其他的感兴趣,可以参照本小节分析的源码及步骤,因为其他驱动模块的实现与ngx_epoll_...

2017-11-07 21:55:57

阅读数 639

评论数 0

nginx源码阅读(十).ngx_event_core_module模块

前言 所有模块的通用接口ngx_module_t 感兴趣的配置项ngx_event_core_commands 存储配置项的结构体ngx_event_conf_t 事件模块的通用性接口ngx_event_module_t 小结前言本小节将进入到ngx_event_core_module模块,它是所...

2017-11-06 21:31:45

阅读数 639

评论数 0

nginx源码阅读(九).事件及连接的定义、连接池

前言 事件的定义 连接的定义 关于连接池 小结前言本小节将分析事件模块中事件的定义以及连接池等相关定义,方便我们后面对事件模块中的模块进行分析。事件的定义每个事件由ngx_event_s表示:struct ngx_event_s { /* 跟事件相关的对象。通常指向ngx_connecti...

2017-11-06 08:52:47

阅读数 634

评论数 0

nginx源码阅读(八).ngx_events_module模块

前言在上一小节中我们对模块的整体有了一定的把握,本小节将进入到事件模块的分析中,了解nginx是如何收集、管理、分发事件的。nginx将网络事件以及定时事件集成到一起进行管理,由于各平台的I/O多路复用机制不同,但是nginx支持多个操作系统,因此在事件模块中也实现了多种针对不同平台下封装I/O多...

2017-11-04 22:01:25

阅读数 635

评论数 0

nginx源码阅读(七).nginx的模块化设计

前言 高度模块化是nginx的一个特点,在正式进入到具体的模块之前,有必要从整体把握各模块之间联系与nginx对模块的控制。在前面的分析中其实已经使用了模块中提供的方法,比如worker进程的工作循环中调用的ngx_process_events_and_timers()函数,用于处理事件。 ...

2017-11-03 21:43:53

阅读数 631

评论数 0

nginx源码阅读(六).内存池

前言本小节中,我们将看到内存池的实现。由于nginx是由c语言实现,并没有垃圾回收机制,比较容易导致memory leak,因此nginx实现了自己的内存池,将内存的管理和释放交给内存池,而需要申请内存的地方直接使用内存池来申请内存即可,每个连接/请求都会新建一个内存池。既然释放内存是由内存池来释...

2017-11-02 22:05:21

阅读数 552

评论数 0

nginx源码阅读(五).worker进程的工作循环

前言在上一小节中,我们看到了nginx是如何使用master进程创建子进程,以及存储子进程的状态,也知道了进程间通信采用的是socketpair机制。接下来我们将重点分析ngx_spawn_process调用的proc函数,即worker进程的工作循环。ngx_worker_process_cyc...

2017-11-01 21:27:43

阅读数 525

评论数 0

nginx源码阅读(四).创建子进程(worker和cache)

前言 在上一小节中,我们主要分析了master进程的工作循环。本小结中,我们将看到nginx是如何创建worker进程的。在上一小节中分析master进程的工作循环时,调用了ngx_start_worker_processes函数,但是其内部调用的创建子进程的代码在ngx_spawn_proce...

2017-10-31 19:50:31

阅读数 775

评论数 2

nginx源码阅读(三).master进程的工作循环

前言在上一个小节中,我们分析了一下nginx的初始化工作,在最后部分nginx进入多进程工作模式/单进程模式。单进程模式一般用于调试,实用性不高。本小节将分析master和worker进程所做的一些工作,比如master如何控制worker进程以及worker进程执行的流程。首先需要知道nginx...

2017-10-30 21:59:46

阅读数 928

评论数 0

nginx源码阅读(二).初始化:main函数及ngx_init_cycle函数

前言在分析源码时,我们可以先把握主干,然后其他部分再挨个分析就行了。接下来我们先看看nginx的main函数干了些什么。main函数这里先介绍一些下面会遇到的变量类型:ngx_int_t: typedef intptr_t ngx_int_t; 64位机器上,intptr_t为long int, ...

2017-10-29 21:45:49

阅读数 1251

评论数 0

nginx源码阅读(一).综述

前言 nginx作为一款开源的轻量级高性能web服务器,是非常值得立志从事服务端开发方向的人学习的。现今nginx的最新版本是nginx-1.13.6,代码量也日渐庞大,但是由于其核心思想并没改变,为了降低阅读难度,我选择的是nginx-1.0.15版本,并且由于时间和水平有限,重点关注的是ng...

2017-10-28 09:33:43

阅读数 6339

评论数 0

(零)阅读源码的工具及参考资料

工具分析源码,首先对工具的准备很重要,在windows有阅读源码的利器source insight,但是由于我的日常系统是centos,并且不想在虚拟机下进行分析,所以找了一些linux阅读源码的工具。 我使用的主要工具是:ctags+cscope 接下来我简单介绍一下这些工具的使用ctags...

2017-09-04 09:49:32

阅读数 1074

评论数 0

(十九)对libevent源码分析的总结

前言在写对libevent源码分析之前,其实已经阅读过几遍libevent源码,结果在分析的时候,还是遇到了一些障碍,不过还好都解决了。由于在真正意义上,这是我第一次分析超过万行的源码,所以可能在分析的过程中,有些遗漏难免发生,后面发现的时候再补上,如果有错误的地方,希望大家指出。总结libeve...

2017-09-04 09:36:00

阅读数 657

评论数 0

(十八)bufferevent的读写回调函数及对外接口

前言在上一节中,我们介绍了bufferevent实现自动管理的基本思想(水位线机制),在本小节中,我们将介绍bufferevent_readcb、bufferevent_writecb等函数,了解它工作的全过程。bufferevent_readcbstatic void bufferevent_r...

2017-09-03 17:02:53

阅读数 2165

评论数 0

(十七)bufferevent的管理

前言在上节中,我们将evbuffers剩余的内容,比如读/写操作进行了剖析。接下来,我们将对bufferevent进行分析,它主要实现了对缓冲区的自动管理。 在本节中,我们先介绍相关结构体以及一些管理操作,相关代码在evbuffer.c以及event.h文件中。struct buffereven...

2017-09-03 15:21:28

阅读数 557

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭