- 博客(26)
- 资源 (33)
- 收藏
- 关注
原创 kubernetes架构及核心组件简介
kubernetes是谷歌开源的容器编排调度系统解决方案,已成为事实上的容器编排调度行业标准。标准的kubernetes以集群的方式部署,如下所示:k8s集群内有两种类型的节点,分别是control Plane(master)和node。mastermaster节点运行k8s的大部分核心组件,包括apiserver,scheduler,controller-manager,etcd等,k8s作为容器编排调度系统的大部分职责都在master节点实现。etcdetcd是k8.
2021-03-08 15:17:23
459
2
原创 nginx事件模块之ngx_epoll_module源码分析
ngx_epoll_module是nginx众多事件模块的其中一个,它利用linux的epoll模型实现nginx事件框架所定义的事件模块接口。运行在linux系统上的nginx默认使用该模块作为事件框架的底层实现。ngx_epoll_module主要是实现了ngx_event.h中规定的事件模块的接口,即实现了ngx_event_module_t中定义的那组回调函数,如下代码片段所示:stati...
2018-02-09 15:10:15
809
原创 nginx事件处理框架及源码解析
nginx的中的事件可以分为两类:系统事件和定时器事件。系统事件指的是由操作系统通知给nginx的事件,例如各种IO多路复用api(select,epoll_wait等)返回的事件,定时器事件是指由nginx的定时器模型产生的超时事件。由于事件处理机制与生俱来的复杂性,为了方便管理,降低开发难度,nginx的事件处理框架将事件的管理抽象成一系列的接口,这些接口屏蔽了事件处理的底层细节,外部只需要关...
2018-02-09 14:48:58
676
原创 nginx的内存池设计
为了方便管理内存和文件等计算机资源,提高运行效率,nginx实现了自己的内存池。除了启动过程中在尚未创建内存池之前的阶段是直接使用系统的内存管理接口之外,nginx的内存管理都是通过内存池进行的。nginx的内存池源码位于ngx_palloc.c和ngx_palloc.h中。首先看内存池相关的数据结构的定义:struct ngx_pool_s { ngx_pool_data_t d
2018-02-07 11:10:47
494
原创 http框架核心之ngx_http_core_module.c
ngx_http_core_module.c是http框架代码中最重要的一部分。nginx中http协议的实现,http框架的大部分核心指令,http请求整个生命周期的处理流程(也可以说是http请求的处理框架)都在这里实现。...
2018-02-05 15:59:08
628
原创 http框架核心之ngx_http.c源码分析
ngx_http.c内主要实现了一个模块:ngx_http_module。ngx_http_module是nginx的http框架的一部分,它是所有http模块能够被加载的唯一入口,承担了http块配置解析,合并,以及http框架及其相关数据结构的初始化。它本身是NGX_CORE_MODULE类型,只有一个指令,就是http,如下所示:static ngx_command_t ngx_http_...
2018-02-05 15:27:18
624
原创 nginx的http模块配置接口以及http框架配置内存布局
http模块是nginx中数量最多,也是配置最复杂的模块。http模块的配置最多可以分为三级,分别是http级别,server级别和location级别。nginx为http模块定义了一组接口,用于模块创建,设置,合并各级别的配置项。在配置读取阶段一共有9个接口,在不同阶段,不同位置被调用。其中8个在ngx_http_module_t中定义,这8个回调是模块级别的,还有1个是指令级别的,由模块的指
2018-02-05 10:01:40
689
原创 nginx错误日志模块ngx_errlog_module
ngx_errlog_module模块是nginx中第二个被执行的模块,它是nginx用来为其它模块提供日志记录功能的基础模块,http,mail,stream等模块都会调用该模块的接口实现日志记录功能。该模块提供了一个指令:error_log,用于指定全局范围的日志配置,指令的定义如下:static ngx_command_t ngx_errlog_commands[] = {
2018-02-02 18:09:00
1978
原创 nginx核心模块ngx_core_module分析
ngx_core_module是nginx中最为核心的一个模块,也是第一个被加载的模块。为什么它是第一个被加载的呢?我们先看它的配置结构体定义:typedef struct { ngx_flag_t daemon;//是否守护进程模式 ngx_flag_t master;//是否以单master进程方式运行
2018-02-02 17:47:57
811
原创 nginx定时器分析
nginx的定时器用于向其它模块提供非操作系统事件的管理接口,源码位于ngx_event_timer.h和ngx_event_timer.c中。nginx的定时器管理是通过红黑树实现的。红黑树的每一个内节点都代表一个定时器事件,节点的值是定时器的超时时间戳,以毫秒为单位,树的最左边的节点的值最小,这意味着树的最左边的节点就是距离超时时间最近的事件,最右边的节点就是距离超时时间最远的事件。添加,
2018-02-02 17:18:05
445
原创 nginx字符串格式化函数
nginx自定义/重命名了很多数据类型,为了在打印日志时能够方便的打印这些数据类型,nginx实现了自己的字符串格式化函数,其中核心是ngx_vlsprintf,它支持多种自定义数据类型的格式化,如下所示: * supported formats: * %[0][width][x][X]O off_t * %[0][width]T t
2018-02-02 17:13:04
3495
原创 nginx配置的内存布局
nginx的配置系统很灵活,不但支持模块自定义配置项,而且支持多级配置以及合并多级配置项。这样的设计使得nginx的配置在内存中的布局也是分成多级的,比较复杂。因此,这里采用一种自顶向下的方式进行逐级剖析。这里需要先说明一下nginx指令的上下文环境以及有效上下文环境。nginx配置的上下文环境指的是指令在配置文件中的位置,比如配置文件全局,http块全局,http server块, mail
2018-02-02 16:49:00
3203
原创 nginx的模块加载顺序
nginx是按照模块类型的先后顺序来加载模块的,如下所示核心模块 > 事件模块 > 线程池模块 > http模块 > 邮件模块 > stream模块 > 其它模块核心模块加载顺序ngx_core_modulengx_errlog_modulengx_conf_modulengx_openssl_modulengx_
2018-02-02 15:20:22
1563
原创 nginx工作模式
nginx有两种工作模式:master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的特点和适用场景。master-worker该模式下,nginx启动成功后,会有一个master进程和至少一个的worker进程。master进程负责处理系统信号,加载配置,管理wo
2018-02-02 15:03:56
6688
原创 nginx配置解析过程分析
nginx在启动,reload和平滑升级时,都会重新加载配置。重新加载配置分成两步:1. 重新加载命令行参数(-g)中定义的全局配置2. 重新加载配置文件中的配置解析配置的核心函数是ngx_conf_parse,不论是解析命令行定义的全局配置还是解析配置文件内容,最终都会调用该函数。函数的原型如下:char *ngx_conf_parse(ngx_conf_t *cf, n
2018-02-02 14:39:46
1307
原创 nginx的配置文件及指令介绍
nginx的配置文件是由一系列的指令构成的。指令可以分为三种:注释,普通指令和块指令。nginx在解析配置文件时,只会解析普通指令和块指令,直接忽略注释,如下面的示例配置所示:#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_
2018-02-02 13:17:58
301
原创 nginx的模块化设计思想
nginx的代码中,除了部分底层的核心代码之外,基本上所有的功能都是通过模块化的方式实现的,这样的设计为nginx的功能拓展提供了极大的灵活性。nginx的模块贯穿了从启动,运行一直到结束的nginx进程的整个生命周期。实际上,在每个阶段,是由nginx核心以及模块自身的配置共同决定哪些模块可以参与,如何参与到当前阶段的运行中。目前,nginx支持多种类型的模块,它们功能定位各有不同,运行的上
2018-02-02 11:43:14
910
原创 nginx的基本数据结构
ngx_str_t源码文件:ngx_string.h|c定义:struct ngx_str_s { size_t len;//字符串长度 u_char *data;//字符串起始地址} ngx_str_t;说明:ngx_str_t是nginx使用的字符串类型,ngx_str_t用len成员来表示字符串的长度,c标准库中的
2018-02-01 19:16:17
489
原创 nginx的configure脚本分析
#!/bin/sh# Copyright (C) Igor Sysoev# Copyright (C) Nginx, Inc.LC_ALL=Cexport LC_ALL#options处理命令行选项,并根据选项值和默认值设置全局变量. auto/options#获取makefile,ngx_mo
2018-02-01 19:15:12
424
原创 ngx_cycle_t结构体及ngx_cycle_init函数分析
一 ngx_cycle_t结构体ngx_cycle_t对应于nginx的一次启动,配置重新加载,或者平滑升级。struct ngx_cycle_s { void ****conf_ctx;//配置上下文 ngx_pool_t *pool;//内存池 ngx_log_t
2018-02-01 18:57:41
505
原创 nginx启动流程分析
/* 以下只分析linux环境下的启动流程,非linux环境略过 */int ngx_cdeclmain(int argc, char *const *argv){ ngx_buf_t *b; ngx_log_t *log; ngx_uint_t i; ngx_cycle_t *cycle, i
2018-02-01 17:08:53
355
原创 linux环境纯命令行俄罗斯方块C语言版
#include #include #include #include #include #include #include enum { S_VERTICAL, S_HORIZON, S_SQUARE, S_THUNDER_1, S_THUNDER_2, S_THUNDER_3, S_THUNDER_4, S_EL_1, S_EL_2,
2018-01-30 17:10:00
1536
2
原创 解数独算法,用C语言递归实现
前几天在看离散数学及其应用第七版的时候,看到了数独的相关章节,就自己写了一个数独的解法,先记下来。生成数独的方法以后再写#include // 寻找下一个未填充的单元int find_next_empty(int arr[9][9], int *row, int *col){ int i, j; for (i = 0; i < 9; i++) for (j = 0; j <
2014-12-22 10:28:04
6508
3
原创 构造螺旋矩阵
void fill_spiral_matrix(int row, int col, int **a){ int start, i, j, min, cnt; int totalnum = row * col; int currow, curcol; min = row < col ? row : col; cnt = min / 2; for (i = 0; i < cnt;
2013-04-24 15:36:53
588
原创 生成随机长度的字符串
#include #include #include #include #define STRSIZE 8#define LOOP 100char chrtbl[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-";static int chrtbl_size = sizeof(chrtbl)
2013-03-07 22:53:09
696
原创 linux下sqlite3插入性能测试
今天上班的时候,突发奇想,不知道sqlite3的插入性能如何,于是做了如下测试。1. 创建空表userinfoCREATE TABLE userinfo ( "username" TEXT, "address" TEXT, "sex" TEXT, "email" TEXT, "tel" TEXT, "other" TEXT
2012-02-15 16:31:24
2047
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人