试着开源LiteCloud项目

所谓LiteCloud,无非就是前些天提到的LightCloud的php版本实现。这个和原来的python版本有一些区别,会造成不兼容,如下:

    1. 把Consistent Hashing算法换成了ketama,在pecl的memcached扩展里有简单方法可以实现,效率比单纯的php好很多,能快个10倍吧。没有重复造轮子,因此我很是得意。
    2. 静态方法调用时,不再支持原来的system参数,原版是用这个来支持多个LiteCloud集群。
    3. 第一个版本,利用memcached扩展来读取tokyo tyrant,所以目前仅支持简单的操作比如get, set, delete, increment。其实再努力一下,也可以支持更多的功能,比如redis。
    4. 去掉了原版的local_cache功能,我觉得这个功能完全可以放在外面,更灵活。

项目主页

目前托管在github上 —— LiteCloud ,使用git以及github的时间不太长,但是很喜欢,欢迎fork。

使用示例

用静态方法调用:

require 'LiteCloud.php';

$config = array(
    'lookup1_A' => '127.0.0.1:41201',
    'lookup1_B' => '127.0.0.1:51201',

    'storage1_A' => '127.0.0.1:44201',
    'storage1_B' => '127.0.0.1:54201',
);

list($lookupNodes, $storageNodes) = LiteCloud::generateNodes($config);
LiteCloud::init($lookupNodes, $storageNodes);

LiteCloud::set('hello', 'world');
print LiteCloud::get("hello"); # => world
LiteCloud::delete("hello");

print LiteCloud::get("hello"); # => nil

或者采用实例化的方式调用,这种方式能够支持多个LightCloud集群

 require 'LiteCloud.php';

$config = array(
    'lookup1_A' => '127.0.0.1:41201',
    'lookup1_B' => '127.0.0.1:51201',

    'storage1_A' => '127.0.0.1:44201',
    'storage1_B' => '127.0.0.1:54201',
);

$cloud = new LiteCloud($config);

$cloud->set('hello', 'world');
print $cloud->get("hello"); # => world
$cloud->delete("hello");

print $cloud->get("hello"); # => nil

看上去和python版本差不多,对吧?

性能测试

这个部分是个重点,之前找到的lightcloud的php版本,性能比原版要慢一个数量级,我可不想在这个地方丢了份。

暂时做了个最简单的性能测试,测试脚本在test目录下。测试条件如下:

    1. 底层采用tokyo tyrant作为存储。
    2. 单个进程重复操作一万次,比如写一万次hello => world,这个测试条件和python版本完全一致
    3. 关闭了local_cache

python版本的测试结果


Finished "Tyrant set" 10000 times in 2.50 sec [4002.0 operations pr.sec]
Finished "Tyrant get" 10000 times in 1.04 sec [9583.7 operations pr.sec]
Finished "Tyrant delete" 10000 times in 7.39 sec [1352.4 operations pr.sec]

LiteCloud的测试结果


Using 1.8229308128357 time to set 10000 values. QPS:5485.67
Using 0.71097207069397 time to get 10000 values. QPS:14065.25
Using 2.1550960540771 time to delete 10000 values. QPS:4640.16

看上去还比较乐观,尤其是delete的性能翻了好几番,几乎要怀疑我在代码实现部分出了差错,在其它方面的表现也是全面超出,因为python版在hash_ring的实现上拖了后腿。

4 Replies to “试着开源LiteCloud项目”

  1. 你好,我是lightcloud for php那个版本的作者。
    之所以比python慢是因为好像python里面又一个函数可以防止重复,具体忘了是什么。
    建议你试一下c,把环的建立放在服务端,这样就不用每次都需要在客户端建立环了,速度可以在python版本上提高30倍

  2. 还有一个就是,amix和你的测试都是初始化一个对象,然后多10000次操作。
    真实情况可能是10000个用户,每个人都需要初始化一次,做一次操作,这样可以测出你的并发量,这个数据可能会更重要些。

  3. 之前的测试为了和amix的测试在同一个起跑线上,所以没有做多次初始化,真实情况下应该是性能有所下降的。

  4. 这是又一种实现与redis相同作用的东东么?

    ps.博客刚被省局通知关闭,别点了。

Leave a Reply

Your email address will not be published.