View
159
Download
0
Category
Preview:
DESCRIPTION
CSF 3.0 架构解析与 应用. CSF 3.0 架构解析与应用. CSF 2.0 以后对于使用方式做了一些改进,同时内 建了 monitor 模块并且提供 python 版的客户端 最新的 3.0 版本还提供了响应 -HUP 在线配置的 功能 CSF 作者:朱岩 讲解:张烁. CSF 3.0 架构解析与 应用 > CSF 基础应用部分. CSF 基础应用部分. CSF 3.0 架构解析与 应用 > CSF 基础应用 部分 > CSF 简介. CSF 简介. - PowerPoint PPT Presentation
Citation preview
CSF 3.0 架构解析与应用CSF 2.0 以后对于使用方式做了一些改进,同时内建了 monitor 模块并且提供 python 版的客户端
最新的 3.0 版本还提供了响应 -HUP 在线配置的功能
CSF作者:朱岩讲解:张烁
CSF 3.0 架构解析与应用
CSF 基础应用部分CSF 3.0 架构解析与应用 > CSF 基础应用部分
CSF 简介 CSF —— Common Server Framework 是一个通用服务器框架。 CSF 提供网络服务器系统的基本功能,包括:1. 经过封装的网络通信部分。2. 使用 memory pool ,使内存操作更加高效。3. 使用 thread pool ,节省每次创建线程开销。4. 支持多条多级流水线,用固定数量的线程完成每级流水线的处理。
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 简介
CSF 的数据流
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 的数据流
2.0 版本后的主要变化 耦合度更低 2.0 版本以后彻底把 protocol 和 mod 模块从 CSF 中分开: CSF: binary excutable file PROTOCOL : binary dynamic lib (.so) MOD: binary dynamic lib (.so) 明显区别于以前 protocol 和 csf 连接成一个可执行文件的做法。
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化 > 耦合度更低
2.0 版本后的主要变化 Protocol 模块的接口变化: 头文件仅需要包含: protocol_def.h ( 必须 ) log.h ( 仅当需要使用 CSF 日志时 ) confparser.h ( 仅当需要使用配置分析模块时 ) 不再需要 register_protocol_name 。 当前 protocol name 可以通过
get_protocol_name() 获取。
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化 > Protocol 模块的接口
2.0 版本后的主要变化 Mod 模块的接口变化: 头文件: mod.h ( 必须 ) log.h ( 仅当需要使用 CSF 日志时 ) confparser.h ( 仅当需要使用配置分析模块时 ) 传递函数指针更简洁。 摒弃以前手动设置二重指针,直接使用设置函数。
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化 > MOD 模块的接口
2.0 版本后的主要变化 Mod 模块新的初始化过程:int mod_init(char *mod_name){ CSF_UNUSED_ARG(mod_name);
set_request_init(init_func);set_request_deinit(NULL);set_request_handler(handler_func);
return (0);}
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化 > MOD 模块的接口
Mod 模块新的初始化实例:
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化 > MOD 模块的接口
2.0 版本后的主要变化 配置文件 sl.conf 随需而变
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化 > 配置文件
CSF 3.0 监视器 CSF 从 2.0 以后便增加了监视器功能,用于 CSF 内部和 protocol 、 mod 模块的运行时变量监测。 CSF Monitor 支持大多数常见数据类型 默认端口: 22222
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 监视器
CSF 3.0 监视器数据源(CSF, protocol, mod)
CSF Monitor服务器(内建, CSF monitor protocol)
CSF Monitor 客户端(python)
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 监视器
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 监视器
CSF 3.0 –HUP 配置重载
CSF Respons
e
CONFIGRELOADER
HUP
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 –HUP 配置重载
CSF 3.0 –HUP 配置重载CONFIGURERELOADER
屏蔽原流水线,根据配置创建临时流
水线
等待原流水线工作结束将临时流水线上下
文恢复到原流水线
RELOADERRESET
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 –HUP 配置重载
CSF 3.0 –HUP 配置重载 能替换除 port, timeout, protocol 外的任意配置项。 可以完全替换 protocol 和 mod 模块。 响应 -HUP 时 CSF 会将 monitor 的数据自动注销。 NOTICE: Reloader module is a beta
version.
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 –HUP 配置重载
CSF 架构解析部分CSF 3.0 架构解析与应用 > CSF 架构解析部分
CSF 工作方式
Protocol
• Available for mempool• Single threaded• Functions called by event• Trylock widely used
• Event driven• Non-block I/O• Memory pool• Thread pool for MOD• Single threaded
• Multi level pipeline• Maximum 16 pipelines• Data flow control
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF 工作方式
CSF 整体构成CSF配置文件
Confparse
rModule配置器
CSFServer
Protocol配置器
Data递送
Pipeline多线程组
Protocol组件
Mod组件
CSFMonitor
CALL
Submit request
Generate
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF 整体构成
CSF pipeline 初始化
Thread list
Pcb Array(0-15) global
PCB 0Pipeline
control block
Sl.conf
PCB NPCB 1 ……
RQCB for MOD 0
Request queue control block
Pipeline id = 0
MOD 0
MOD 1
MOD 2
RQCB for MOD 1
Request queue control block
RQCB for MOD 2
create
0
create
1 . . N
PIPELINE THREAD 1
Control block of pipeline’ s threads
PIPELINE THREAD N
Pipeline id = N
MOD 0
RQCB for MOD N
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF pipeline 初始化
CSF PROTOCOL 流程新连接(conn)
Libevent监听端口
accept新的连接
listen fd
调用xxx_session_start函数
将新连接加入事件集合
监听conn
Libevent监听conn端口
EV_READevent
conn fd
调用session
_entry函数
返回值指定结束?
删除事件 & 调用
session_endYES
NO
submit_request用户在合适的时候调用
Submit_request将指定数据提交到pipeling模块
新连接connected
connclosed
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF PROTOCOL 流程
CSF submit request 流程SubmitRequest
starts
生成请求 临时队列空? 获得first queue锁?YES
NO
获得first queue锁?
NO
插入到临时队列
NO
插入到first
queue
YES
YES
插入到临时队列
将临时队列连接到first queue尾
插入到first queue
解锁
解锁
SubmitRequest
ends
给workerThread 发信号
给workerThread 发信号
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF SUBMIT REQUEST 流程
CSF worker thread 流程worker threadStarts
Worker初始化 互斥锁 主队列是
否为空?挂起,等待条件变量
检查线程generation和当前全局generation
代数相等?
解锁
NO
YES
从队列头取出一个请求并将相应节点
删除
YES
解锁,执行
NO
有下一级?提交到下一级队列 提交到完成队列 worker
threadreturns
NOYES
generation线程的generation,即“ 代” 是在初始化时确定的。全局代是为更新线程所设计,用来实现线程
的新老更替
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF WORKER THREAD 流程
CSF 完整数据流libevent
CSFEvent
handlerProtocol组件
Request queue
Level 1
CSF MOD 组件
Request queue
Level N
Request donequeue
MOD handler
Response& free
Prot data processed
Protocol data
socket data Protocol data
Protocol data
CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF 完整数据流
请提问:1. 前面的哪个页面没有看明白?2. 其他任何问题?
CSF 3.0 架构解析与应用 > 请提问
CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 简介CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 的数据流CSF 3.0 架构解析与应用 > CSF 基础应用部分 > 2.0 版本后变化CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 监视器CSF 3.0 架构解析与应用 > CSF 基础应用部分 > CSF 3.0 –HUP 配置重载CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF 工作方式CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF 整体构成CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF pipeline 初始化CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF PROTOCOL 流程CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF SUBMIT REQUEST 流程CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF WORKER THREAD 流程CSF 3.0 架构解析与应用 > CSF 架构解析部分 > CSF 完整数据流
Recommended