自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吹牛要纳税的专栏

书写是为了更好的思考

  • 博客(60)
  • 资源 (24)
  • 收藏
  • 关注

原创 博客搬家

csdn的博客将不再更新,后续的内容会迁移到个人独立博客。希望关注我的朋友,去那里我们继续交流讨论,再见。

2016-01-06 15:11:10 3489 1

原创 缓存服务器设计与实现(七)

本文讲缓存中的内容管理–-目录的删除

2016-01-05 15:42:15 3251 1

原创 缓存服务器设计与实现(六)

本文讲缓存中的内容管理--文件的删除。

2016-01-05 15:40:07 4892

原创 leveldb设计分析之log

在leveldb中log的意义是什么? 所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点: 1可以将随机的写IO变成append,极大的提高写磁盘速度; 2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难。log的结构+-------------+-------------+-------------+--

2015-09-25 10:49:41 4613

原创 leveldb设计分析之memtable

在Leveldb中,所有内存中的KV数据都存储在Memtable中,物理disk则存储在SSTable中。在系统运行过程中,如果Memtable中的数据占用内存到达指定值(Options.write_buffer_size),则Leveldb就自动将Memtable转换为Memtable,并自动生成新的Memtable。在leveldb中存在的5种keyParsedInternalKeyIntern

2015-09-23 13:54:53 4633 1

原创 腾讯协程库libco的原理分析

我们以example_echosvr.cpp为例子,这个例子的作用就是读取客户端的请求,然后按原样返回给客户端。在它的main函数里创建了proccnt进程,每个进程里有cnt个task。这里的proccnt和cnt都是来自运行参数。for(int i = 0; i < cnt; i++) { task_t * task = (task_t*)calloc( 1,sizeof(task_t)

2015-09-23 10:17:43 19977 5

原创 关于MP4视频拖动的原理与分析(一)

本来想说说关于mp4和一些常见视频文件格式方面的历史。现在想想没啥必要,毕竟本文是在讲关于mp4点播拖动方面的技术细节。绪论,前言神马的显得有点多余。说起MP4,不得不提“Digital container format”的概念。维基百科给出解释: A container or wrapper format is a metafile format whose specification des

2015-07-22 17:46:51 14087 3

原创 缓存服务器设计与实现(番外篇)

这个系列又更新了。今天谈一个问题,目前cache软件在业界的使用现状。cache系统其实最大的使用场景,还是主要集中在CDN厂商里。大概在2010年之前,各大CDN厂商基本清一色的使用squid。那时候的squid是绝对的主力。squid的作为cache领域的鼻祖,正是由于历史的久远,很多近10年左右流行起来的很多系统特性,它本身并不支持。比如sendfile,splice和多核等方面的支持,由于这

2015-06-14 22:01:06 4435

原创 缓存服务器设计与实现(五)

上次讲到lru与缓存重建,这次主要讲一下关于过期处理的一些主要问题。在讨论这个问题之前,有个相关的问题需要大家有所了解。就是对于一个缓存如期只来说,什么东西应该缓存,什么不应该缓存。这是一个比较复杂的问题,涉及到http协议的诸多细节。这里赵永明大哥写了一篇文章,讲得很详细,虽然是以ATS为背景讲的,但是思路是想通的,大家可以点击这里去看一下,文章名字很骚气叫“to cache or not to

2014-10-10 17:59:57 4539 2

原创 在小公司里混

最近这段时间公司在招人,我也面试了不少应聘者,以30岁上下,工作5年左右的人居多。这个年龄段其实是中小公司的主要选择对象,这类公司一般招人都是为了项目需要或者急需熟手来干活,而很少像大公司那样,招一些有潜力,底子好,有上进新的应届学生。在市面上有能力的新人往往在校招阶段就被大公司靠着自己的招牌和有竞争力的薪资待遇收拢到旗下,而对于社招,更是优中选优,挑三挑四。总而言之,大厂把品相好的果子挑走之后,

2014-04-05 21:44:48 5933 6

原创 诡异的_GNU_SOURCE宏

好久没更新博客了,突然来一篇,这...难道是干货?......请您在看正文之前允许我说几句话,。好了看下面的内容:诡异代码之test.c:#include int main() {     struct aioinit aa;     aa.aio_threads = 10;     return 0;}使用gli

2013-11-13 18:24:55 5023

原创 TCP协议经典rfc主题总结

Richard Stevens的书虽好,但是他所要表达的是让你知其然。对于想精通tcp的同学来说,光知其然是远远不够的,你还需要更多的时间去了解其所以然,而翻阅rfc文档就是一种最好的方式,这样你就明白tcp为何这么设计了。这里总结了一下tcp核心主题对应的rfc文档,方便自己和大家查阅。

2013-08-10 13:29:38 8218 3

转载 TCP协议疑难问题集锦

原文出自:http://blog.csdn.net/dog250/article/details/66124961.网络协议设计ISO提出了OSI分层网络模型,这种分层模型是理论上的,TCP/IP最终实现了一个分层的协议模型,每一个层次对应一组网络协议完成一组特定的功能,该组网络协议被其下的层次复用和解复用。这就是分层模型的本质,最终所有的逻辑被编码到线缆或者电磁波。 

2013-08-10 10:58:44 4342 1

原创 代理服务器中的内容防拷贝技术

代理服务器,广义上包括正向反向代理,httpcache等等,他们都要处理一个问题,就是从上游取得数据让后发往下游。这块有许多细节要处理,特别是如何避免内容的多次拷贝。nginx在这方面做得很不错,我们拿它来分析下,希望能学到一些东西。

2013-08-08 22:45:48 6354

原创 关于异步,同步,阻塞与非阻塞

如果你想吃一份宫保鸡丁盖饭:同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊!同步非阻塞:在饭馆点完餐,就去遛狗了。不过溜一会儿,就回饭馆喊一声:好了没啊!异步阻塞:遛狗的时候,接到饭馆电话,说饭做好了,让您亲自去拿。异步非阻塞:饭馆打电话说,我们知道您的位置,一会给你送过来,安心遛狗就可以了。上面的比喻给出一个形象的感觉,这里有一段关于Reactor和Pro

2013-07-12 15:59:26 7767 2

原创 搞科研也是一条出路

以前感觉搞科研很屌很牛b,童年的梦想居然还是科学家,后来发现,现实真是一把杀猪刀,把童年的那点很萌的想法给削得一干二净。最近去了趟杭州,跟大学宿舍的一个兄弟聚了聚。人家现在在浙大读研,今年就转博了。怎么说呢,这哥们在我眼里绝对不是搞科研的料,而且他本人对科研更是一点兴趣都没有。怎么解释现在这个状况呢。。。跟他聊完之后,我发现世界已经不是我以为的那个样子了。想起了一句话:“你以为你以为的就是你以为的

2013-06-25 14:57:53 6660 16

原创 关于ngx_trylock_accept_mutex的一些解释

关于nginx里面accept互斥锁的处理,群里讨论了很多次,很多人都提出了各种问题,比如问到:在ngx_process_events_and_timers中,为什么在释放ngx_accept_mutex之后,不把ngx_accept_mutex_held清零?if (ngx_accept_mutex_held) { ngx_shmtx_unlock(&ngx_accept_mutex

2013-06-12 21:57:58 5614 1

原创 关于ngx_epoll_add_event的一些解释

static ngx_int_tngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags){ int op; uint32_t events, prev; ngx_event_t *e; ngx_conne

2013-06-12 21:16:17 7033 1

原创 一个类型转换引起的Bug

最近有个bug实在让人抓狂,仅仅是由于一个简单的类型强转导致的,这里给大家讲讲。这是pwrite系统调用的接口说明,我们关注最后一个参数:ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);我们有个接口实现是:int storage_write_meta_info(int fd, voi

2013-03-27 17:52:22 4298 1

原创 nginx缓存过期管理小结

先看一个经典的配置,注意红色部分:proxy_cache_path /cache levels=1:2 keys_zone=cache_pool:512minactive=1m max_size=10g;location ~ .*\.(jpg|gif|png)${    proxy_next_upstream   http_502 http_504 error timeout in

2013-03-25 22:05:09 10837

原创 缓存服务器设计与实现(四)

这里我们聚焦一个问题,就是缓存满的情况。一般的cache都会配置容量,无论是内存缓存还是磁盘缓存,都不能无节制的去使用他们。这里以磁盘缓存为例,如果配置的限额已用完,该如何处理呢?        对于nginx,如果你开启了cache功能,那么你通过ps命令看到这样的进程:cache manager process。其实这个进程的作用主要是在文件失效或者磁盘空间不足的时候,删除

2013-02-19 17:41:16 4259

原创 缓存服务器设计与实现(三)

这里我们讨论一个比较重要功能,在之前的文章中提到过,取源合并。为什么要单独把它拿出来讨论呢?其实主要是出于个人工作的角度。之前公司里的cache需要这样一个功能,现有的squid该功能不完善,并且也不太适合我们的业务。然后我们分别在cache和nginx上加了这个功能,不过现在的nginx版本已经原生支持了。呵呵,您也许不知道我们的nginx可是0.7.x的版本,我们当时开发的时候还在想,也许不久

2013-02-16 17:59:01 4420 6

原创 困扰nginx初学者的两个小问题

通过在群里大家的讨论,我总结了两点问题,很多初学者都问过:1. ngixn事件处理中关于active和ready的问题2. ngx_connection_t与ngx_http_connection_t结构的区别与联系这里分开讨论下。1. ngixn事件处理中关于active和ready的问题        这俩成员何时为0,何时又被置1,把很多人搞迷糊了。其实从ngin

2013-02-05 10:07:17 4497

原创 缓存服务器设计与实现(二)

我们现在讨论算是最简单的情景,即服务器还没有文件缓存,第一个需要缓存的请求的处理过程。当然需要关注的情景有很多,一个一个来吧。       在缓存服务器设计与实现(一)中讨论的都是一些准备工作,我们接下来要关注从后端机器取回数据以后进行缓存的情景。首先来探讨一个问题,以nginx为例,它是在取后端数据之前就创建了缓存对象,那么从整个系统的角度来看,创建缓存对象的过程包括在内存中建立

2013-02-05 09:39:52 5719

原创 缓存服务器设计与实现(一)

这里我们nginx的cache系统为线索,来探讨一个缓存服务器的设计和相关细节,我尽量站在设计和框架的角度来分析,限于篇幅这里不再去撸代码了,相关的细节,欢迎大家一起参与讨论。    一个cache服务器中从后端取得文件之后,要么直接发送给客户端(学名叫透传),要么缓存在本地,后续相同的请求访问到cache服务器时,就可以直接拿本地的拷贝来用了,如果可以用的话。如果本地缓存的文件被

2013-01-23 17:56:00 6770 2

原创 关于nginx中upstream机制的思考

网上搜过upstream相关分析的同学可能都已经有了大概的了解了,而且很多大牛分析的也很棒,我这里为什么还要多说几句呢?一来是总结自己的一些理解,二来是对前辈分析的一些补充,希望能带给大家更多启发。先给出阿里技术牛们的总结和分析,供大家参考:http://tengine.taobao.org/book/chapter_05.htmlhttp://www.pagefault.info

2013-01-22 22:36:09 9341 3

原创 linux内核调试环境的搭建(使用qemu)

这里说明下,本人调试的内核版本是2.6.11.12,为什么去调试这么“古老”的版本?原因不多说了,你手头也许正拿着ULK3,而它针对的内核版本正是2.6.11,有比这更好的理由吗?而且这个版本不算旧,已不算新,我认为还算不错,想想当下还有如此多的人在学习0.11的道路上笃定的前行,讨论关于版本的事情,真的没什么意义。只要你认为有用,能学到东西,做什么别人都不会说你错!接下来,我尽量把我

2012-08-04 20:30:05 4446 3

原创 nginx中hash表的设计与实现

在nginx中使用的hash中一个非常核心的函数就是ngx_hash_init,由于nginx这个hash表是静态只读的,即不能在运行时动态添加新元素的,一切的结构和数据都在配置初始化的时候就已经规划完毕,所以“init”过程的优劣,对运行时查找的性能影响非常大。在正式分析之前,下面的这个连接给出了一个非常详细的hash结构的整体布局,对理解代码帮助会很大,一定要仔细看一下。http:

2012-07-31 23:36:48 5333

原创 关于内核学习的一些个人看法!

今天必须吐槽一下!    我有个搞内核的同事说过:对现在的新人来说,内核的学习曲线越来越陡了,不知道搞内核的这些前辈退休以后,后辈能否扛起内核这个重担。。。开始的时候还不以为然,随着这几天陆续接触内核代码,才深刻的体会到这句话的滋味。    举一个最简单的例子,我看的内核代码是2.6.11,选这个版本的原因很简单,因为有ULK3,这对于新人来说很重要,结合代码看书可

2012-07-16 19:01:39 2882 2

原创 从nginx角度看服务器多进程模型设计(二)

在ngx_master_process_cycle中要处理众多的全局变量,正是通过一些信号处理函数设置这些变量,才会后面检测到一些事件的发生。我们来看看都有哪些预定义的事件,以及他们是如何被处理的。多数的事件来自于nginx的用户,他们可能终止nginx,重启,重读配置等等,这些操作则主要依赖于信号,在nginx官网,给出了比较全面的控制命令介绍,用户可以通过他们来控制nginx的行为

2012-06-05 16:34:20 2874

原创 从nginx角度看服务器多进程模型设计(一)

多进程你可能很熟悉,也许有一套自己的使用习惯和方法。这东西没有什么权威建议,书上只是给出了基本知识点,至于具体怎么去用,因人而异。nginx在多进程设计方面有很多值得学习和借鉴的东西,我认为是一套比较好的实现方案。你也许认为这东西很简单,是老生常谈的东西了,但是我这里要提醒你一下,俗话道酒是陈的香,越经典的东西越值得去琢磨,不要对自己太自信。善于思考的家伙总是会在一些老的技术上给你许多新鲜的见解,

2012-06-05 16:25:54 3044 1

原创 研究技术要多多思考

我们知道一个新知识在大脑中生根发芽,其实是一个跟以往知识发生联系的过程,为什么死记硬背容易忘记?道理是很简单的,孤岛从来都是大脑中遗忘对象的最佳候选,做为一个跟以往经验发生交互和连接的新知识,从生理学的角度来讲,在突触的连接数量和健壮性上有着明显的优势。    扯完关于生理上的知识后,我们应该得到某些启发,如何让新知识跟已有的认知系统发生足够的联系呢?答案很简答,那就是多去思考,多问自

2012-05-26 10:09:58 2692 5

转载 INT13中断详解

直接磁盘服务(Direct Disk Service——INT 13H)  00H —磁盘系统复位 01H —读取磁盘系统状态 02H —读扇区 03H —写扇区 04H —检验扇区 05H —格式化磁道 06H —格式化坏磁道 07H —格式化驱动器 08H —读取驱动器参数 09H —初始化硬盘参数 0AH —读长扇区 0BH —写长扇区

2012-05-19 21:59:59 12410

原创 再谈nginx变量(二)

nginx中除了一些内建变量,自定义变量(通过set指令定义的),还有一类比较特别的变量,我称它们为特殊前缀变量,这类变量多数在内建变量数组内是找不到的,形式可以分一下几类:$http_xxx, $sent_http_xxx, $upstream_http_xxx, $cookie_xxx, $arg_xxx。其中有些常见的http_xxx和sent_http_xxx(其实主要是一些hea

2012-05-11 16:55:26 4180

原创 关于nginx中的四级指针

在nginx中有个四级指针,void **** conf_ctx,那么这个四级的指针在什么情况下用到呢?答案可以在events block中找到。在处理events这个指令时,它在conf_ctx中某个地方占住一个位置(指针看成数组),以index代表此处的下标。在ngx_events_block函数中,先会申请一个指针,即代码中的ctx:ctx = ngx_pcalloc(cf-

2012-05-10 15:34:48 4346

原创 nginx中事件模型中instance变量的处理细节

nginx事件模型中的instance变量,实际上是为了处理使用epoll时,可能出现的所谓“stale event”,先看下man的解释。 man 7 epoll:/* If you use an event cache or store all the fd’s returned from epoll_wait(2), then make sure to prov

2012-05-03 14:44:55 4841 5

原创 再谈nginx变量(一)

这里以ngx_http_script_compile为线索,看一下nginx的变量原理中还有哪些值得挖掘的地方。ngx_http_script_compile函数被调用,一般都是用来处理变量的,特别是在配置处理阶段,出现变量的时候(即"$"开头的配置),一般都会使用这个函数来做处理,生成所谓的“运行时处理机“。在函数的开始,有个ngx_http_script_init_arrays函数,从字面

2012-04-26 21:22:45 6219 2

原创 使用kbuild构建bzImage内核映像

这里通过以下三个最经典的步骤来分析下,一个bzImage内核映像是如何配置编译,并最终安装使用的。当然在整个内核构建过程中,还支持许多的特性,相信这个经典过程明确之后,分析其他的情况就不会太难了,这里以x86体系来做分析。分析版本2.6.34.1(1) make menuconfig研究代码最好的方法就是手眼并用,看代码的同时多多动手调试,我们先贴出了它实际运行的过程:[roo

2012-04-19 10:20:56 2361 1

原创 nginx中rewrite模块break和last原理详解

在使用nginx重写(即rewrite)机制时,大家一般会用到last和break,关于这两个指令的作用,网友问的挺多,网上的讨论也挺多,这里做个总结:网友的给力解释:last:    重新将rewrite后的地址在server标签中执行break:    将rewrite后的地址在当前location标签中执行nginx官方解释:last:    stops proc

2012-04-18 23:46:20 21777 1

原创 关于nginx配置解析中merge操作的探讨

我们先来看看http module的类型的结构体:typedef struct {    ngx_int_t   (*preconfiguration)(ngx_conf_t *cf);    ngx_int_t   (*postconfiguration)(ngx_conf_t *cf);    void       *(*create_main_conf)(ngx_conf

2012-04-12 14:47:07 5576 1

python-3.2源码

流行动态语言python动态语言的源码,方便大家了解和研究python的实现机理。

2011-05-17

XDE32反汇编引擎源码

开源反汇编引擎,支持32位机器码,目前对63位机器码不能识别,功能强大

2011-03-20

Programming the Microsoft Windows driver model中文版

windows 内核及其驱动开发的权威参考资料

2011-03-20

linux面试笔试题及答案大全

非常全面的linux笔试面试题库,包含linux绝大部分的常考点和易错点,适合初入职场的童鞋参考和学习!

2011-02-21

清华大学CUDA并行程序设计教程

CUDA超大规模并行计算的训练教程,来自清华大学微电子学院的权威教程,前沿经典!

2009-07-18

IDA pro教程2

IDA pro的第二份材料,继上次的IDA pro教程1系列!

2009-07-18

IDA pro反汇编教程1

鼎鼎大名的IDA pro,反汇编领域的老大!由于操作复杂,很多人都感叹于掌握它的困难,以上资料将给你关于它的最权威而其是最详细的说明,让你轻松成为反汇编的高手!

2009-07-18

百度之星历年预决赛试题(包括2009年)

囊括了从2005年至今的所有比赛试题,提供了详细的答案!大家可以借鉴一下,对提高自己今后的编程水平有一定的帮助!

2009-07-18

XML指南(实战性宝典)

这是一份可以使你的XML知识应用到实战的资料,其中包括了大量的相关实例,结合具体的语法和结构,详细分析!

2009-07-18

XML终级教程(英文版)

XML终级教程,出自大师之手,引进的英文原版!内容详细,深入浅出!

2009-07-18

SVN客户端(TortoiseSVN)官方手册

著名的SVN版本控制的客户端软件,功能强大!手册详细的说明了从安装配置到日常应用的基本操作和注意事项等!值得学习

2009-07-17

windows内核研究(部分微软内部资料)

收集的有关windows内核的相关的知识和内幕,其中包括了一些来自微软内部的资料和培训材料,是研究windows内核特别是NT技术的重要材料!

2009-07-17

最新C99官方标准(英文版)

这是C语言国际标准委员会公布的C99标准,现在已经成为实际的标准,许多的编译器厂商都已经为此做了相应的更新,许多的新的关键词被加到了其中,使得广大的程序员获得了更大的方便!

2009-07-17

微软求职大礼包,微软巨献!

微软专门为应届毕业生准备的求职面试技巧,也是IT毕业生了解微软,走进微软的第一步!

2009-02-05

ping命令原理分析及源码!

经典的ping命令的详细全面的讲解,让你能够深入的了解网络测试原理!

2009-02-05

DDos攻击详解,攻防策略分析

DoS 攻击、DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service 的简写就是分布式拒绝服务,而DRDoS就是Distributed Reflection Denial of Service的简写,这是分布反射式拒绝服务的意思。

2009-02-05

游戏脚本语言(ruby初步)

了解游戏脚本编程的基础,初步了解ruby的语法和基本用法。联系python和lua(WOW用到的脚本语言),让你透视脚本语言的奥秘!

2008-12-26

FreeBSD使用手册

从FreeBSD的安装到使用,对于入门者是一本很好的指导性的书籍。初步的掌握FreeBSD的知识,为将来学习高级的FreeBSD技术打下基础

2008-12-26

Google搜索技术解析 页面排序技术展示

解密Google pagerank算法 剖析Google页面排序的奥秘

2008-11-19

windows 启动 过程

windows启动过程详解 了解windows启动的细节

2008-11-15

vc6.0游戏编程 经典丛书

游戏编程实战!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2008-11-15

反汇编教程

反汇编一直是一项比较尖端的技术,技术要求很高。本教程比较全面的讲述了反汇编的一些基本原理!

2008-06-26

javascript基础教程

java脚本入门级教材

2008-01-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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