- 博客(10)
- 收藏
- 关注
原创 十、任务调度(二)
Eb32tree Eb32tree是Ebtree32位版本的一个具体实现。 [ebtree/eb32tree.h] /* This structure carries a node, a leaf, and a key. It must start with the * eb_node so that it can be cast into an eb_node. We could al
2013-05-31 20:52:58
999
原创 九、任务调度(一)
Haproxy的任务调度机制使用的数据结构为弹性二叉树(Ebtree),从源文件中的介绍,应该是作者自己创作并命名的。 本节将会介绍Ebtree的基本概念以及作者实现的一些通用操作。 概念 对于Ebtree的描述如下 [ebtree/ebtree.h] /* General idea: ------------- In a radix binary tree, we m
2013-05-29 21:58:39
963
原创 八、Session的处理
在event_accept小节曾经说过task的process成员是来自于listener的handler成员,而listener的handler成员是在解析配置文件时设置为process_session的。那么接下来就看看Haproxy最主要的任务处理过程是怎么样的。 [sec/sessiom.c]process_session() /* Processes the client, serv
2013-05-01 23:38:19
1250
原创 七、Tcpv4_connect_server函数
[src/proto_tcp.c] tcpv4_connect_server() int tcpv4_connect_server(struct stream_interface *si, struct proxy *be, struct server *srv, struct sockaddr *srv_addr, struct sockaddr *from_addr)
2013-05-01 23:08:04
986
原创 六、event_accept函数
此函数对应于Listner在有新链接的时候调用的read函数。 [src/client.c]event_accept() int event_accept(int fd) { struct listener *l = fdtab[fd].owner;//这个值从前一部分可知 struct proxy *p = (struct proxy *)l->private; //这是在解析配置文
2013-04-28 00:24:28
1274
原创 五、listener fd的初始化
Listener fd的创建以及监听代码位于[src/proto_tcp.c]的tcp_bind_listener函数中。 [src/proto_tcp.c] tcp_bind_listener() int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen) { __label__ tcp_retu
2013-04-28 00:11:58
1195
原创 四、时间
对于一个服务器来说,它对时间的要求并不是特别高,因此可以在程序中维护一个时间,然后在某些条件触发时对这个时间进行更新,程序中的时间均使用这个维护的时间量,这样做能避免每次需要时间的时候进行一次耗时的系统调用,提升程序性能。在Haproxy中,作者正是这样做的。 数据结构 [src/time.c] unsigned int curr_sec_ms; /* millisecond
2013-04-28 00:02:08
911
原创 三、I/O模型
数据结构 [include/types/fd.h] /* info about one given fd */ struct fdtab { struct { int (*f)(int fd); /* read/write function */ struct buffer *b; /* read/write buffer */ } cb
2013-04-27 23:57:00
1257
原创 二、信号
数据结构 [include/types/signal.h] struct signal_descriptor { int count; /* number of times raised */ void (*handler)(int sig); }; struct signal_descriptor signal_state[MAX_SIGNAL]; int signal_qu
2013-04-27 23:34:03
1209
原创 一、概述
在具体的分析程序源代码之前,我准备先看一下Haproxy的doc目录下的architecture.txt文件。 作者在此文件中说,由于涉及到解释性的脚本语言,一个网络应用程序的前端服务器SERVER往往都会承受非常大的压力;当然这也可能依赖于相对压力不是很大的后端的数据库服务器DB。(对于后者,我的理解是当DB慢一点的话,SERVER对于请求的响应就没那么快,新的请求又来到,又要分配新的资源,造
2013-04-22 21:24:32
1625
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人