随笔分类 -  IO模型

摘要:详说 NUMA 标签(空格分隔): Cloud2.0 测试条件 两台机器: CPU: Intel(R) Xeon(R) CPU E5 2620 v3 @ 2.40GHz X 24 Intel(R) Xeon(R) CPU E5 2680 v2 @ 2.80GHz X 40 背景知识 ![300px 阅读全文
posted @ 2016-05-16 10:02 _Boz 阅读(1648) 评论(0) 推荐(0) 编辑
摘要:OVS 配置 VxLAN 背景知识 网络地址空间: Linux network namespace(netns) OVS: Open Virtual Switch VxLAN 实验 通过配置VxLAN, 使得vm A 与 vm B 能够互相通信 步骤 步骤... 阅读全文
posted @ 2015-09-25 15:07 _Boz 阅读(2349) 评论(6) 推荐(1) 编辑
摘要:关于Cgroup的简单测试 [toc] 简单介绍Cgroup (如果对cgroup熟悉可以忽略) 一般情况下,cgroup挂载到一个虚拟文件目录,然后可以通过文件系统的API对其操作。 可以查看mount point 以下非特殊说明,均以ubuntu12.04(3.5.0 23... 阅读全文
posted @ 2015-09-15 17:58 _Boz 阅读(2368) 评论(0) 推荐(0) 编辑
摘要:LVS 测试报告---## 测试计划1. 基本功能测试2. 流量压力测试3. 响应时间测试4. 配置正确性测试5. 灾难恢复测试## 测试点1. 基本功能测试 - 客户端IP地址正确性 - RealServer 访问Internet测试(包括Iptables 规则优先级)2. 流量压力测试 - 流量... 阅读全文
posted @ 2015-03-04 09:52 _Boz 阅读(11471) 评论(6) 推荐(2) 编辑
摘要:**HAProxy** is a high performance load balancer. It is very light-weight, and free, making it a great option if you are in the market for a load balan... 阅读全文
posted @ 2014-12-17 17:42 _Boz 阅读(2890) 评论(0) 推荐(0) 编辑
摘要:# HAproxy 技术分享## 简介HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件---## Features 1.免费 2.能够做到4层以上代理 3.高性能 4.高稳定性---## 使用案例淘宝CDN(HTTP反向代理)---## 测试:##... 阅读全文
posted @ 2014-10-11 18:42 _Boz 阅读(12078) 评论(0) 推荐(0) 编辑
摘要:# Cachedb 网络模块文档## 整体结构- 多路复用 (epoll 模块)- 事件驱动 (事件封装)- 缓冲管理 (上层buffer管理)---## 设计思想> 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚拢于接口处,同时每个模块也只暴露固定的操作接口给上层调用。如果下层需要依赖... 阅读全文
posted @ 2014-09-03 19:05 _Boz 阅读(593) 评论(0) 推荐(0) 编辑
摘要:在看tornado和Nginx代码的时候都会看到在最初事件反应堆初始化的时候都会自初始化一个事件,创建一个管道pipe并绑定到事件队列中。这样的好处是可以优雅的在父进程中向管道pipe[0]发送退出或者其他信号,子进程监听到pipe[1]有事件产生后采取相应的措施。class Waker(inter... 阅读全文
posted @ 2014-05-29 16:47 _Boz 阅读(690) 评论(0) 推荐(0) 编辑
摘要:运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态先从原因分析一下为什么,问题就迎刃而解了。首先是TIME_WAIT: 理解一下TIME_WAIT状态产生的原因,这个问题已经被很多很多的书说烂了,但是为什么很多人还是... 阅读全文
posted @ 2014-05-26 09:59 _Boz 阅读(14221) 评论(0) 推荐(1) 编辑
摘要:由来:公司内部外网记录日志的方式现在都是通过Nginx模块收到数据发送到系统消息队列,然后由另外一个进程来从消息队列读取然后写回磁盘这样的操作,尽量的减少Nginx的阻塞。但是由于System/V消息队列在使用前需要规定消息长度,且结构不一样需要重新定义消息格式等等...所以在增加需求的时候需要修改代码并重新编译,这样带来的坏处可想而知,外网服务器也会因此重启。所以组内有同事准备在Nginx中加入异步写日志的功能,大致方式就是将数据写入到一块内存然后由另外一个进程读取然后flush到磁盘,或者直接使用同步写的方式。然后测试对比后发现其实同步写和异步写差别很小。而且最大的疑惑就是,Nginx的多 阅读全文
posted @ 2013-08-23 16:33 _Boz 阅读(1856) 评论(0) 推荐(0) 编辑
摘要:引言:Nginx模块提供了upstream(上游服务器)的异步回调处理模块开发,以memcached 模块为例commands结构的初始化为相应的命令添加回调函数,用来处理 memcached_pass 这个命令 1 static ngx_command_t ngx_http_memcached_commands[] = { 2 3 { ngx_string("memcached_pass"), 4 NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF|NGX_CONF_TAKE1, 5 ngx_http_memcached_pass, ... 阅读全文
posted @ 2012-08-27 17:44 _Boz 阅读(2710) 评论(0) 推荐(0) 编辑
摘要:引言:上一章讲了关于HTTPServer的原理,这一次通过分析源码来了解更多的细节看看HTTPServer类的组织结构:HTTPServer的主要工作一.提供了一些基础的比如说listen,bind此类共有操作二.完成了一个 _handle_events()的公有回调函数,此函数是 IOLoop的基础,此函数为每一个连接创建一个单独的 IOStream 对象三.start函数,启动HTTPServer,并设置相应的参数(如根据CPU个数来设置进程数等)从HTTPServer类的构造函数可以看出,最重要的参数是设置回调函数,此回调函数用于处理request对象每次有HTTP的请求,都会通过HTT 阅读全文
posted @ 2012-07-24 16:44 _Boz 阅读(3886) 评论(3) 推荐(0) 编辑
摘要:1.tornado简介:http://www.cnblogs.com/Bozh/archive/2012/07/17/2596458.html 2.tornado 网络层IOLoop:http://www.cnblogs.com/Bozh/archive/2012/07/18/2597114.htm 阅读全文
posted @ 2012-07-22 20:17 _Boz 阅读(4178) 评论(1) 推荐(0) 编辑
摘要:引言:第四章讲解的有些乱,主要是代码太长了,而且还是在一章就讲完了,所以我决定将IOStream上层的HTTPServer类分作几章来讲,不按照代码顺序在讲完了IOLoop和IOStream后就知道,第一次在监听套接口的时候需要用到IOLoop,然后创建一个IOStream对象,然后以后的IO操作都由IOStream对象完成所以在上层的HTTP协议处理中,tornado定义了一个HTTPConnection类这个类主要完成的工作就是完成对下,完成HTTP数据包的传输,对上层HTTPserver提供解析后的request对象那么他们之间的工作模式是怎样的呢看看Demo import... 阅读全文
posted @ 2012-07-22 20:04 _Boz 阅读(3744) 评论(2) 推荐(2) 编辑
摘要:引言:在分析了部分IOLoop,了解了其工作原理后,就可以看看建立在IOLoop上层的IOStream。IOStream主要提供的功能就是异步的读写操作。IOStream提供的接口有几个:1.read_bytes(bytes,callback)这个接口就是在有固定的字节的数据到来的时候调用回调函数2.read_until(delimiter,callback)这个接口的作用是在读取到固定的字符序列结尾后调用回调函数 callback3.write(data)异步写,就是将数据拷贝到应用层的缓冲区,由IOLoop下层统一调度看看源码的Demo from tornado import... 阅读全文
posted @ 2012-07-20 09:05 _Boz 阅读(6043) 评论(4) 推荐(2) 编辑
摘要:引言:由于都是在工作当中抽出时间看源代码,所以更新速度比较慢,但是还是希望通过对好的源码的分析和探讨,大家相互学习,发现不好的地方共同讨论。上次讲了IOLoop中的几个重要的方法,inistance() 和 add_handler() .. 今天看看Demo中一个最重要的方法,start(),顺带用stop()收尾 def start(self): """Starts the I/O loop. The loop will run until one of the I/O handlers calls stop(), which will mak... 阅读全文
posted @ 2012-07-19 09:41 _Boz 阅读(5569) 评论(1) 推荐(3) 编辑
摘要:引言:上一章起了个头,讲了tornado的源码结构和IOLoop的简单Demo,这一章就IOLoop类的方法来看看IOLoop提供了哪些功能。看看IOLoop的类组织结构 |---IOLoop ---__init__(self, impl=None) ---instance(cls) ---initialized(cls) ---add_handler(self, fd, handler, events) ---update_handler(self, fd, events) ---remove_handler(self, fd) ---set_blocking_s... 阅读全文
posted @ 2012-07-18 11:35 _Boz 阅读(9452) 评论(2) 推荐(7) 编辑
摘要:引言: tornado是由Facebook开源的一个服务器“套装",适合于做python的web或者使用其本身提供的可扩展的功能,完成了不完整的wsgi协议,可用于做快速的web开发,封装了epoll性能较好。文章主要以分析tornado的网络部分即异步事件处理与上层的IOstream类提供的异步IO,其他的模块如web的tornado.web 以后慢慢留作分析。首先说明几点问题:(1)文章供大家交流使用,如果有错误,发扬开源精神,共同交流(2)文章不加以说明,均以Linux环境为例(3)如果有epoll,tornado默认使用epoll,这里就不分析select和KQueue了(4 阅读全文
posted @ 2012-07-17 21:57 _Boz 阅读(16326) 评论(6) 推荐(4) 编辑
摘要:引言:前几天看了一点InfoQ上大神们很多的总结,服务编程范式以这样的方式进化多进程--->多线程--->非阻塞--->协程。说说协程,找了一些关于GreenLet的资料,协程也称作微线程,是比线程还小的一种执行体。线程确实执行体就是一个函数,在用户空间看来,但是在内核中线程也是一个进程,LWP所谓的轻量级进程,线程也存在自己的上下文运行环境。协程不同于线程的是,线程是抢占式的调度,而协程是协同式的调度,也就是说,协程需要自己做调度。看看一个简单的消费者&生产者模型的python代码:def coroutine(func): def ret(): f = func() 阅读全文
posted @ 2012-05-31 13:29 _Boz 阅读(12250) 评论(1) 推荐(1) 编辑
摘要:引言:持续更新了一段时间的博客,今天把最后一点部分加上,一个简单的反应堆的实现,基于epoll,工作过程上一篇博文已经有所介绍。需要再次提到的就是关于反应堆的使用方式:注册事件(为需要监听的fd加入回调函数)----->将事件加入反应堆------>开始事件循环------>事件发生,调用回调函数第一次加入的描述符可以为监听描述符,即由 socket() 函数创建,当这个描述符有事件发生,意味着有新的连接的到来,调用回调函数handler_accept() 其中这个函数里面涉及到调用 accept()系统调用和为这个新连接分配实例,然后设置这个连接的回调函数,即 handle 阅读全文
posted @ 2012-04-26 11:29 _Boz 阅读(4324) 评论(0) 推荐(3) 编辑

4AI?Z:cp1z?_RJQle1]Gs;P!T)RHroW|