分类: C/C++
2014-05-05 14:59:14
原文地址:Memcached源码解读(全局) 作者:CUKdd
1. 介绍
先引用一下介绍一下:
“Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
Memcached由Danga Interactive开发,其最新版本发布于2011年11月,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。”
Memcached的并发编程模型是通过libevent库来提供的。可以在不损失高并发性能的情况下,移植到Linux,*BSD,Mac OS X,Solaris和Windows系统上。Memcached通过在内存中维护一个大型的Hash链表来实现高性能的内存对象缓存系统。
Memcached采用的是单进程多线程的编程模型。通常来讲,可开启的线程数量受制于主机的CPU核数。由于是基于libevent而开发的,那么Memcached内部的每一任务的处理都是基于事件(event)的。并且为了得到较高的处理性能,Memcached又在event之上增加了“单事件,多处理”的机制。也就是在单次事件中,可以处理多个客户请求。类似于Linux内核驱动中的数据接收与发送处理模型中的NAPI(New Application Programming Interface)的工作原理,这样可以获得很大的性能提升。
2. 文章的组织方式
在接下来的连载文章中,我将按照如下的次序解读Memcached源码:
以上各点有可能单独成为一篇文章,有可能合并,是具体情况而定。总体感觉Memcached的编程模型没有什么新的,奇特的地方,很容易理解与解读。欲知高级点的编程模型理念,请参考我得另一篇博文:Nginx内核详解。
这里就先介绍这么多,欲知后续精彩的部分,敬请期待连载文章吧^_^
祝好!