自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Redis源码初探之数据结构-跳跃表

Redis中有两个地方用到了跳跃表,一个是有序集合键,一个是集群节点的内部数据结构。1.数据结构 /* ZSETs use a specialized version of Skiplists */ typedef struct zskiplistNode { sds ele;/**/...

2020-01-19 00:18:32

阅读数 7

评论数 0

原创 Redis源码初探之数据结构

Redis可以存储键和5种不同类型的数据结构,它们是STRING(字符串),lIST(列表),SET(集合),HASH(散列表),ZSET(有序集合)。 1.字符串(String)可以是字符串、整数或者浮点数。Redis对整个字符串或者其中部分执行操作。对整数和浮点数执行自增或者自减操作。 2.链...

2020-01-18 22:56:22

阅读数 16

评论数 0

原创 Nginx源码初探之基础架构 -进程之间的通信

Nginx进程之间的通信机制介绍 进程之间的通信方式如共享内存,套接字、管道、消息队列、信号等。Nginx框架选择了三种方式:共享内存、套接字、信号来访问共享资源。同时Nginx使用了原子操作、信号量、文件锁来实现各个进程直降安全有序的访问资源。1.共享内存 共享内存是Linux下提供...

2020-01-18 17:47:13

阅读数 25

评论数 0

原创 Nginx源码初探之upstream机制 -UPSTREAM机制介绍

upstream机制介绍 Nginx访问上游服务器主要是基于upstream机制。 upstream机制是事件驱动框架与HTTP框架的综合,它既属于HTTP框架的一部分,又可以处于基于TCP的应用层协议。为了帮助Nginx实现反向代理功能,upstream机制处理提供基本的与上游交互的功能之...

2020-01-18 13:32:27

阅读数 34

评论数 0

原创 Nginx源码初探之HTTP模块 -HTTP框架执行流程

HTTP框架主要是针对基于TCP事件框架解决HTTP的网络传输、解析、组装等问题。主要涉及四个方面。第一,集成事件驱动机制,第二HTTP模块协同,第三HTTP框架允许将一个请求分为多个子请求,第四基础工具接口,比如接受HTTP包体,发送HTTP响应头部,响应包体等。。通过HTTP框架处理HTTP请...

2020-01-18 12:31:17

阅读数 8

评论数 0

原创 Nginx源码初探之HTTP模块 -HTTP框架处理阶段

Nginx模块化设计使得每个HTTP模块都可以专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同完成。依照常规的HTTP处理流程,Nginx将这些HTTP模块分为11个处理阶段,对于这11个处理阶段,其中有4个是必须有HTTP框架完成的,其他的7个是可以有HTT...

2020-01-18 10:23:15

阅读数 18

评论数 0

原创 Nginx源码初探之HTTP模块 -HTTP框架初始化流程

静态HTTP框架启动流程 Nginx模块化设计使得每个HTTP模块都可以专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同完成。依照常规的HTTP处理流程,Nginx将这些HTTP模块分为11个处理阶段。Nginx框架的初始化工作主要就是解析nginx.c...

2020-01-18 09:13:36

阅读数 26

评论数 0

原创 Nginx源码初探之事件模块 -定时器实现

Nginx实现了自己的定时器触发机制,与内核无关。用于弥补当内核调用超时等状况下,系统可以主动触发事件。理解定时器主要有两个方面,一个方面是时间管理,另一个方面是定时器的实现方式。 1.时间管理 定时间首先要弄清楚时间管理,Nginx使用全局变量用于缓存时间,这样在获取事件的时候只需要直接...

2020-01-17 09:56:03

阅读数 11

评论数 0

原创 Nginx源码初探之事件模块 - epoll事件驱动

Nginx事件驱动是根据操作系统以及操作系统内核设计了很多不同的驱动方式,epoll事件驱动机制是Unix系统的事件驱动模式。本文重点介绍ngx_epoll_module是如何基于Linux内核实现epoll事件驱动模型,实理解Nginx在几十万并发连接下高效利用服务器资源的基本原理。 e...

2020-01-16 22:18:55

阅读数 14

评论数 0

原创 Nginx源码初探之事件模块 - 连接基数数据结构

Nginx事件处理模型是Nginx事件处理的核心,充分体现了最简业务原则和分段处理的架构理念。 作为Web服务器,Nignx每一个用户请求至少对于一个TCP连接,一个TCP连接至少需要一个读事件和一个写事件(分段原则的体现,即使很简单很明确的需求也会分段处理。)。在这里我们必须理解Nginx事件的...

2020-01-16 17:01:18

阅读数 19

评论数 0

原创 Nginx源码初探之事件模块-用户请求建立连接

事件处理框架介绍 Nginx基于事件驱动架构的Web服务器,负责这个功能的主要模块就是事件处理模块。事件处理模块主要解决如何收集、管理、分发事件(主要是网络事件和定时器事件)。由于网络事件与网卡中断处理程序,内核提供的系统调用密切相关,所以网络事件的驱动既取决与不同的操作系统,也取决于操...

2020-01-14 17:33:26

阅读数 40

评论数 0

原创 Nginx源码初探之基础架构-启动流程

Nginx基础框架介绍 Nginx采用事件驱动架构,多阶段请求异步处理。,简单的说就是事件源产生事件,事件收集器收集事件,分发器分发事件,处理器注册并消费事件。对比传统WEb服务器而言,传统WEB服务器通过进程或许线程处理事件,请求事件从产生到结束处理进程独占内存、CPU、网络等资源。而Ng...

2020-01-14 15:32:43

阅读数 36

评论数 0

原创 Nginx源码初探之基础架构-web服务器的约束

软件设计一方面是功能设计,一方面是架构设计。功能设计主要就是满足软件需要提供的功能,支撑的服务。比如Nginx是一款Web服务器,那么他的功能就必须满足Web传输协议的各种约束,实现Web服务具有的各种功能。架构设计主要是解决如何提高更高效的服务,如何更低成本的维护,如何让服务更稳定健硕这些问题。...

2020-01-14 10:28:40

阅读数 36

评论数 0

原创 Nginx源码初探之数据结构 - 基数树数据结构

基数树介绍 基数树也叫做压缩前缀树,是一种多叉搜索树,对比其他结构跟节省空间。基数树常见于IP路由检索,文本文档的的倒排索引等场景中。同时基数树也是按照字典顺序来组织叶节点的,这种特点使之适合持久化改造,加上他的多道特点,灵活性较强,适合作为区块链的基础数据结构,构建持久性区块时较好的映射...

2020-01-14 09:42:42

阅读数 51

评论数 0

原创 Nginx源码初探之数据结构 - 链接数据结构

ngx_event_t事件和ngx_connection_t连接是处理TCP连接的基础数据结构。Nginx处理请求连接有三个主要的数据结构,ngx_cycle_t全局变量结构体,ngx_connection_t网络链接结构体,ngx_listening_t网络监听结构体。这三个结构体是nginx事...

2020-01-13 15:32:04

阅读数 80

评论数 0

原创 Nginx源码初探之数据结构 - cycle数据结构

ngx_cycle_t介绍 ngx_cycle_t是Nginx的私有结构体,换句话说是Nginx的业务结构体。Nginx核心的框架代码都是围绕ngx_cycle_t展开的。无论是master管理进程、worker工作进程还是cache manager(loader)进程,都拥有一个唯一的...

2020-01-13 14:45:00

阅读数 57

评论数 0

原创 Nginx源码初探之数据结构 - 哈希数据结构

Nginx哈希数据结构介绍 Nginx中的hash数据结构主要用来存储配置数据,比如url=ip的映射关系。Nginx中只提供了初始化的方法,也就是Hash结构一旦初始化后是不允许修改的,这样一方面提高了内存的利用率,另一方面提高了查询效率。 Nginx实现了两类Hash结构,一类是n...

2020-01-13 11:14:34

阅读数 39

评论数 0

原创 Nginx源码初探之数据结构 - 队列数据结构

队列介绍 队列是有序集合,先进先出FIFO,队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等。Nginx数据结构是循环队列,prev前置节点环和next后置节点环。 Nginx链表还是非常有特色的,它是一种轻量级链表,这种链表不包含数据内容,只...

2020-01-13 09:27:08

阅读数 46

评论数 0

原创 Nginx源码初探之数据结构 - 红黑树数据结构

Nginx红黑树介绍 红黑树是Nginx里的高级数据结构。什么是红黑树呢?红黑树是一种平衡二叉树,简单的说就是它是一棵空树,或者左右子树高差绝对值不超过1,且左右子树都是平衡二叉树。时间复杂度O(log n)。除此之外还有如下特性 (1)节点都有颜色,要么黑色,要么红色。 (2)根结点是...

2020-01-12 19:58:01

阅读数 40

评论数 0

原创 Nginx源码初探之数据结构 - 链表数据结构

ngx_list_t 介绍 ngx_list_t是Nginx中使用的较为频繁的数据结构,数据内容基于指针获取,内存分配基于内存池进行。由于数据内容存放的是指针,所以理论上ngx_list_t可以用来构建多维链表甚至是网络结构,只是Nginx原始代码封装的函数中并不涉及这些数据结构的操作(实...

2020-01-12 13:29:54

阅读数 1358

评论数 0

原创 Nginx源码初探之数据结构 - 数组数据结构

nginx内部使用的数组结构是ngx_array_t,ngx_array_t是一个顺序容器,以数组的形式存储元素,并能够在容量达到最大值时动态扩容。Nginx数组属于基础数据结构部分,只要具备一定的开发经验,可以参考自己所熟悉的其他框架的数组。值得重复提出的一点是Nginx数组的内存事宜遵循,Ng...

2020-01-12 12:50:46

阅读数 57

评论数 0

原创 Nginx源码初探之数据结构 - 模块数据结构

Nginx架构最大的特点就是模块化结构体系,ngx_module_s定义了一个模块应该包含的基础属性,包括名称,版本,指令,类型,进程管理,线程管理等内容。 1.数据结构 struct ngx_module_s { /*前七个属性对应于宏NGX_MODULE_V1*/ ngx...

2020-01-10 15:48:17

阅读数 43

评论数 0

原创 Nginx源码初探之数据结构 - 内存池结构

为了避免出现内存碎片,避免反复向操作系统申请内存,Nginx设计了简单的内存池。nginx内存池根据用户请求逐级分配,逐级释放。整体上内存池分为三个等级进程级(master/worker),connection级(用户连接),request级(请求处理)三个不同的层级。启动启动时创建main级别内...

2020-01-10 10:36:28

阅读数 34

评论数 0

原创 Nginx源码初探之数据结构 - 缓冲区结构

Nginx通过内存池使用内存,需要从内存池中申请资源在缓存使用上。可以对零散的缓冲区碎片进行了统一的管理和再分配,从而提高了缓冲区的利用率。其中最底层的数据结构,就是内存块数据结构和内存块链表数据结构。 1.数据结构 ngx_buf_t是Nginx系统中系统分配内存的基本单位。ngx_...

2020-01-10 08:49:28

阅读数 47

评论数 0

原创 Nginx架构之模块化结构体系

备注:随着版本的不同Nginx的版本也会有所不同,比如STREAM模块的出现。具体情况可以参考《Nginx源码初探 -之数据结构 - 模块数据结构》当理解了Nginx模块的设计之后,再看Nginx的结构体系就会有种豁然明朗的感觉。 相比传统Web服务器,Nginx表现的更具有专业性。在架构...

2020-01-09 10:03:17

阅读数 40

评论数 0

原创 Nginx重要概念理解-正向代理和反向代理

Nginx是有俄罗斯人伊戈尔·赛索耶夫(Igor Sysoev)为俄罗斯访问量第二的rambler.ru站点开发的轻量级Web服务器,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服...

2020-01-08 14:21:32

阅读数 38

评论数 0

原创 企业级服务高可用部署-应用层双活策略

随着信息技术的快速发展,企业应用规模也在迅速扩大,客户对应用的服务质量要求也越来越高。然而随着近年来多家网络运营商DNS解析故障,网络丢包,网络抖动等问题一直没有得到很好的解决,企业应用双活逐步成为近年来很多公司IT规划建设的重要方向。 双活包含网络双活和应用双活,在应用层面上分为“同城双...

2019-12-25 23:25:38

阅读数 38

评论数 0

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