自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(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关注的人

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