kmemcache:一种更高性能的memcached替代解决方案

jopen 11年前

Memcached是著名的高性能分布式内存对象缓存服务系统,被Google, 非死book, 搜狐等众多公司应用于动态Web以减轻数据库负载。

    Kmemcache是搜狐基础架构部的同学,将目前最新稳定版本的memcached v1.4.15移植到linux内核的一个开源项目),旨在充分利用硬件资源,提供并发量更高、响应更快的缓存服务系统。

目前除了SASL(一种用来扩充C/S模式验证能力的机制)功能外,kmemcache实现了memcached所有主要功能,包括完整的二进制、文本协议,基于tcpudpunix 域的通信协议,slab分配器动态均衡、hash表扩容等。所有操作、编程接口保持与memcached一致,兼容目前所有的客户端编程接口,可以说现有的所有使用memcached的客户端,不加修改就可以轻易的使用kmemcache服务,或者可以轻易的就能将kmemcache服务器动态添加到memcached集群中。

 

  Kmemcache实现机制

如何改变你的软件,使其规模化?许多只提升硬件性能去支撑项目扩展的经验都是值得借鉴的,然而我们提升了数倍的硬件性能,却换不来相同倍数的程序性能,我们需要知道性能的实际情况。

要达到到更高的水平,需要解决的问题如下:

  Ø  数据包的可扩展性

  Ø  多核的可扩展性

  Ø  内存的可扩展性

数据包的可扩展性:数据包的问题是它们需经内核的处理。网络堆栈复杂缓慢,数据包最好直接到达应用程序,而非经过操作系统处理之后,但是编写自己的网络堆栈代码是件困难的事情,kmemcache利用插口层的回调函数,实现了基于packet的线程调度机制。

多核的可扩展性:采用多核处理器系统,kmemcache利用内核中的工作队列机制,实现处理线程与cpu的绑定,对于3.0之后的内核,需要编写自己的内核线程处理代码。

内存的可扩展性:如大内存页技术等,kmemcache并没有过多的考虑内存方面的问题,目前主要提供了一个buffer 管理器,大部分内存操作,如slab,读写缓冲区都在buffer基础上管理。

项目主页:http://www.open-open.com/lib/view/home/1371386181765

</span>