Chinaunix

标题: 【开源】支持master-slave分布、支持跨通道消息订阅的开源高效消息队列 [打印本页]

作者: cwinux    时间: 2010-11-03 20:13
标题: 【开源】支持master-slave分布、支持跨通道消息订阅的开源高效消息队列
本帖最后由 cwinux 于 2010-11-08 16:00 编辑

消息队列系统是当前动态系统必备的部件。已有的消息队列系统要么庞大,要么太简单,在高效、简单、可靠性上很难全部兼顾。为了保证消息队列的可靠性,在使用httpsms、memcacheq等简单消息队列的时候,往往需要将消息保存到数据库中,并通过复杂逻辑进行控制处理。
      1、 针对这种现状,开发了一个实用、高效的简单队列系统,功能特性如下:
        1、支持高并发的消息接收               
        2、支持消息的持久化存储
        3、支持消息的顺序异步分发
        4、支持master-slave级联
        5、支持tcp、unix-domain网络协议
        6、支持消息分组与消息类型
        7、支持基于消息分组、类型的消息订阅
        8、支持基于消息订阅机制的消息反复获取
        9、支持基于消息订阅机制的多消息队列
        10、支持基于用户名、口令的鉴权
        11、通过mq_proxy,实现基于消息group的消息push控制。
        12、通过mq_proxy,实现基于消息group的消息用户鉴权。
        13、通过mq_proxy,实现消息发送速率的控制。
        14、通过mq_proxy,提高消息队列的数据接受的高并发性。
        15、支持连接的keep-alive
        16、支持消息窗口,控制消息发送的速率(1~512)
        17、支持0~10M的消息包。
      [b 下载地址:   https://sourceforge.net/projects/cwinux/
      [b 实用的架构蓝图如下:
            
      [b 性能测试:
           测试环境与架构:
           
           消息接受性能-表:
            
           消息接受性能-曲线
            
           消息fetch性能-表
            
           消息fetch性能-曲线
            
      [b 产品license:
           版权声明:
                 本软件为个人所有,遵循GNU LGPL(http://www.gnu.org/copyleft/lesser.html),
           但有以下例外:
                 腾讯公司及与腾讯公司有直接业务与合作关系的公司不得使用此软件。原因可参考:
           http://it.sohu.com/20100903/n274684530.shtml
           联系方式:email:cwinux@gmail.com;微博:http://t.sina.com.cn/cwinux
      介绍ppt文件
            introduce-v1.3.1.rar (511.94 KB, 下载次数: 143)

     [b mq v.1.3.1已经发布
            v1.3.1的变化如下:
            1、修订了v1.3.0的几个bug,其中一个严重bug会造成服务core。(若分发连接在report sid前关闭,则会造成服务的core)
            2、增加了mq_proxy服务,此服务的功能是:
                 2-1:承担mq服务的高并发数据接受造成的数据分发延时。
                 2-2:可以基于消息的group,对每个group进行权限验证。(不同的产品,可以共用一个mq)
                 2-3:控制mq可以接受的group。
作者: cwinux    时间: 2010-11-03 20:19
消息队列基于cwinux开源系统v1.2.0, cwinux自1.0版后,底层采用libevent。只支持linux操作系统。
作者: lnitcscq    时间: 2010-11-03 20:27
我是不是可以免费使用啊
作者: cwinux    时间: 2010-11-03 20:30
回复 3# lnitcscq

只要与腾讯没有业务与合作关系,免费使用。LGPL是比GPL更宽松的开源协议。
非常适合与论坛、微薄等动态产品的消息同步。
作者: lnitcscq    时间: 2010-11-03 20:32
怎么解压出错了
作者: cwinux    时间: 2010-11-03 20:38
回复 5# lnitcscq

哪个文件解压出错?
是introduce.rar吗?还是sourceforge上的cwinux1.2.0.tar.gz?
作者: 幻の上帝    时间: 2010-11-03 20:51
囧……这个例外本身可能就算是GPL/LGPL violation了。
作者: cwinux    时间: 2010-11-03 21:38
回复 7# 幻の上帝

这是专有license,不是完全的LGPL。在不违背例外的情况下,与LGPL等同。
作者: ecjtubaowp    时间: 2010-11-03 22:27
看看。
作者: 幻の上帝    时间: 2010-11-03 22:59
回复  幻の上帝

这是专有license,不是完全的LGPL。在不违背例外的情况下,与LGPL等同。
cwinux 发表于 2010-11-03 21:38


意思我理解……不过这不能叫“遵循”了吧……
对于lisence这类,措辞最好还是严谨一些。
作者: cwinux    时间: 2010-11-03 23:14
意思我理解……不过这不能叫“遵循”了吧……
对于lisence这类,措辞最好还是严谨一些。
幻の上帝 发表于 2010-11-03 22:59


谢谢提醒,欠考虑了。但已经发布,不会轻易改的。
作者: ydfgic    时间: 2010-11-05 15:01
看了lz的博客,想不到是前同事,是国际理想大厦17层,还是19层? :)
作者: surpass_li    时间: 2010-11-05 15:05
收藏备用
作者: cwinux    时间: 2010-11-05 15:12
回复 12# ydfgic

17层
作者: ydfgic    时间: 2010-11-05 22:18
回复 14# cwinux


    呵呵,我也是在17楼研发的,不过已经离职一年了
作者: nblinux001    时间: 2010-11-06 10:55
很赞啊。
研究一下
作者: linux_kejun    时间: 2010-11-06 11:39
文档挺全面,很不错,先学习,谢谢前辈!
作者: redor    时间: 2010-11-07 18:11
回复 1# cwinux


    这个性能这么NB? 并发能达到20000? 用什么工具测试的? 有点怀疑
作者: redor    时间: 2010-11-07 18:14
回复 2# cwinux


    既然libevent unix系列应该都支持的吧
作者: redor    时间: 2010-11-07 18:16
回复  lnitcscq

只要与腾讯没有业务与合作关系,免费使用。LGPL是比GPL更宽松的开源协议。
非常适合与 ...
cwinux 发表于 2010-11-03 20:30



    既然都LGPL了 就没必要搞什么例外了.... 不然就不要滥用LGPL了吧? 我的代码从来都是BSD协议, 要用随便用. 既然开源就大度一点好, 毕竟这不是软件产品. 几行代码而已.
作者: cwinux    时间: 2010-11-07 19:07
回复 18# redor

mq项目的test_import目录下的工具测试的。

这是没有问题的。
5万都测试过。只不过会造成内核的崩溃,因此没有将性能指标列出。
作者: cwinux    时间: 2010-11-07 19:11
回复 19# redor


  只测试了linux,具体就是centos的32与64bit。

  对于其他没有测试,对于aix、hp等,应该会有一些问题。
作者: cwinux    时间: 2010-11-07 19:12
回复 20# redor

    既然拿出来了,也就没有什么保留。但个人有喜好!任何一个系统,都会有个人的标签的。
作者: 迷離    时间: 2010-11-07 23:01
不错嘛 下来看看
作者: cx6445    时间: 2010-11-08 09:39
用了epoll,并发不是问题,只要内存够100万并发连接都行。不知道测试背景是多少个TOPIC?多个生产者发送多个topic,并且有多个订阅者的状态,能看到top状态就好了。
作者: redor    时间: 2010-11-08 10:09
本帖最后由 redor 于 2010-11-08 10:35 编辑
用了epoll,并发不是问题,只要内存够100万并发连接都行。不知道测试背景是多少个TOPIC?多个生产者发送多个 ...
cx6445 发表于 2010-11-08 09:39



  这个结论怎么得出来的? 单机并发100w?长连接?短连接? 还是分布式系统并发 分布式并发其实没什么意义, 无外乎就是机器数量.
我觉得大家理解的并发好像不一样, 我理解的并发是每秒实际能处理的请求数量, 很多人理解的是我同时多少连接.
作者: newmax123    时间: 2010-11-08 10:20
没什么稀罕的。
作者: surpass_li    时间: 2010-11-08 10:27

作者: cwinux    时间: 2010-11-08 11:28
本帖最后由 cwinux 于 2010-11-08 13:49 编辑

V1.3.1版本已经发布。
    v1.3.1的变化如下:
            1、修订了v1.3.0的几个bug,其中一个严重bug会造成服务core。(若分发连接在report sid前关闭,则会造成服务的core)
            2、增加了mq_proxy服务,此服务的功能是:
                 2-1:承担mq服务的高并发数据接受造成的数据分发延时。
                 2-2:可以基于消息的group,对每个group进行权限验证。(不同的产品,可以共用一个mq)
                 2-3:控制mq可以接受的group。
作者: cwinux    时间: 2010-11-08 16:55
欢迎大家提需求。高效、可靠消息队列是互联网2.0产品的重要部件。
接下来,mq将支持http、memcache两个协议。
作者: cx6445    时间: 2010-11-08 19:52
这个结论怎么得出来的? 单机并发100w?长连接?短连接? 还是分布式系统并发 分布式并发其实没什 ...
redor 发表于 2010-11-08 10:09



    当然是单机100万TCP链接,你理解的并发是单机每秒完成的tps吧。
作者: cwinux    时间: 2010-11-08 21:24
回复 31# cx6445

你能说一下你服务器的配置吗?一般的linux服务器,10万个链接就有点吃不消了。
作者: cugb_cat    时间: 2010-11-08 22:03
本帖最后由 cugb_cat 于 2010-11-08 22:04 编辑

说实在的,腾讯还真不会用你这玩意儿。。。。。
不是跟你赌气,你这个东西用不到线上,腾讯有好多你这样的轮子排队呢。
作者: cwinux    时间: 2010-11-09 08:59
本帖最后由 cwinux 于 2010-11-09 09:00 编辑

回复 33# cugb_cat

用不用不重要,重要的是一种态度与行动。再华丽的皇宫也是有垃圾桶、臭粪坑的;因此也别把腾讯说的那么不可一世。
作者: redor    时间: 2010-11-11 09:31
回复 31# cx6445


    这种并发毫无意义... 一般来说的并发都是指一秒能处理的请求数.
作者: redor    时间: 2010-11-11 09:32
回复 32# cwinux


    别说10w 到2w内核都已经够忙了.
作者: redor    时间: 2010-11-11 09:34
说实在的,腾讯还真不会用你这玩意儿。。。。。
不是跟你赌气,你这个东西用不到线上,腾讯有好多你这样的 ...
cugb_cat 发表于 2010-11-08 22:03



    其实他这个MQ应该说还是有点用处,不过我最近也在打算搞一个分布式计算的平台, message queue在多任务/多线程/分布式处理上还是有点用处.
作者: hobbs136    时间: 2010-11-11 10:04
回复  cwinux


    别说10w 到2w内核都已经够忙了.
redor 发表于 2010-11-11 09:32



    我理解的并发也是每秒能够处理的链接数,每个连接都占用一个文件描述符的,100w数量,那文件描述符也忒大了吧。再说光连接上,反应非常迟钝,得不偿失
作者: cugb_cat    时间: 2010-11-11 10:32
本帖最后由 cugb_cat 于 2010-11-11 10:34 编辑
其实他这个MQ应该说还是有点用处,不过我最近也在打算搞一个分布式计算的平台, message queue在多 ...
redor 发表于 2010-11-11 09:34


其实在生产环境上,不太可能用这种刚发布的第三方系统,风险非常大的,宁可自己开发。当然,像mysql、ice等应用广泛的,还是会用的。
而且,lz这个没有实际运行环境的检验,只是说自己做压测出来的结果,意义不是很大,比如google开源的东西,都是在google内部广泛使用的,别人用起来也比较信任。

btw 我现在做的项目正在公司内部推广,也向领导申请开源了,希望能如愿,呵呵。
作者: cwinux    时间: 2010-11-11 14:31
本帖最后由 cwinux 于 2010-11-11 16:17 编辑

回复 39# cugb_cat

有点太主观臆测了。
cwinux这个项目,已经成了某个公司的开发平台。
而mq系统,也是非常成熟。而且也将在一个大互联网公司中使用。
为什么要优先做mq,是因为面向消息而不是数据,将是日后各个互联网公司的转变方向。
我本周将启动一个基于此mq的onboard的开源项目,这是一个分布式的、可持久化存储的高并发记事本系统,实现如下功能:
1、计数器:使用场景如投票等业务。
2、内容文本:使用场景如网站通知、排行榜等。
3、列表:使用场景如体育直播、论坛前N页。可以解决论坛列表页的动态、一致cache的问题。
作者: cwinux    时间: 2010-11-11 14:33
回复 38# hobbs136


我接触的一般并发连接也就到3~4万左右。一般的服务器超过8万内核就会出问题。
作者: cwinux    时间: 2010-11-11 14:36
其实他这个MQ应该说还是有点用处,不过我最近也在打算搞一个分布式计算的平台, message queue在多 ...
redor 发表于 2010-11-11 09:34


数据的最终一致性,是当前分布式系统中必须达到的。而要做到最终一致性,就必须不能丢消息。
此消息队列确保了消息的不丢失,而且可以随意订阅自己关心的消息。
作者: zhujiang73    时间: 2010-11-11 16:14
回复  lnitcscq

只要与腾讯没有业务与合作关系,免费使用。LGPL是比GPL更宽松的开源协议。
非常适合与 ...
cwinux 发表于 2010-11-03 20:30



    >>  只要与腾讯没有业务与合作关系

   
作者: h0tr0ck    时间: 2010-11-11 22:18
不错 呵呵 支持一个
作者: redor    时间: 2010-11-12 09:37
回复 39# cugb_cat


   其实他做这个逻辑上很简单的, 只要通信层可靠, 逻辑上有点bug可以再改, 可以先在一下小项目上使用 然后再推广 任何东西都是一步一步的发展出来的, 没有任何人写的东西拿出来就会被大家认可的, 包括linux当初也是一个很小 的东西 发展这么多年靠的是不断改进和硬件产商的支持, 不然早就被BSD淘汰了. 喜欢作东西应该都是值得鼓励的, 如果大家都遵照固定的模式去开发最后的结果就是永远也不会有什么新颖的思路 更谈不上创新了. 百花齐放其实挺好的, 大家都可能有自己的思路, 相互之间的思路的差异或许才是共同进步的源泉. 我很讨厌一个团队永远都是一个思维模式, 这样的团队最后只能自我感觉良好的堕落下去, 甚至变成垃圾! 同样的知识每个人学完可能都不一定得到相同的答案, 我更支持先学基本理论知识 最后自己思考设计....
作者: redor    时间: 2010-11-12 09:45
回复 41# cwinux


    其实一般的业务并发能力最多也就K级别, 很少能达到w级别的,  很容易理解 CPU能力在那放着, 要达到w级别 也就是每100微妙完成一次请求, 就算是多核, 这样的业务也需要非常简单, 非常简单的业务就只能是计算 不能涉及到磁盘IO和密集的CPU复杂计算. 不知道lz的消息是不是内存和磁盘同步的.
作者: redor    时间: 2010-11-12 09:49
回复  cugb_cat

用不用不重要,重要的是一种态度与行动。再华丽的皇宫也是有垃圾桶、臭粪坑的;因此也别 ...
cwinux 发表于 2010-11-09 08:59



    腾讯找我去面试过 但是说实话面我的人给我留下很烂的印象... 很装.... 做一破论坛的支持就装得不行. 还有新浪微博一小主管也跟我装 一看就没啥的东西, 中国的工程师都是做点小P项目主管就开始觉得自己是个人物... 谁知那些东西都是拿着别人的东西东拼西凑. 没有几个人自己认认真真研究过东西的人太多, 所以中国这个技术环境越来越丑陋.... 引用广告词:MZONE 人都是行动派!
作者: cwinux    时间: 2010-11-12 11:00
回复 46# redor

  收到消息后,直接写硬盘的数据文件与索引文件。
  但,这种写操作都是append写,因此速度非常快。能达到60Mbyte/s的速度。
  而在分发的时候,也是顺序的读文件。
  因此,数据非常可靠,对硬盘的损坏也最小。
  数据不再内存进行缓存,保证了数据尽量少的丢失与fsync硬盘的需求。
作者: cwinux    时间: 2010-11-12 11:02
本帖最后由 cwinux 于 2010-11-12 11:46 编辑

回复 45# redor

     这个系统我已经折腾了5年多了。cwinux是去年这个时候发布的。
    一篇新博客:【互联网产品:面向消息,春暖花开】:http://blog.sina.com.cn/s/blog_540383db0100n1ce.html
    这是我开发MQ的初衷。
作者: lnitcscq    时间: 2010-11-12 22:08
回复 6# cwinux


    !   C:\Documents and Settings\qwe\桌面\cwinux_1.2.0.tar.gz: 无法打开 \usr\share\automake-1.9\compile (\usr\share\automake-1.9\compile --> cwinux_1.2.0\project\mq\interface\c\compile)
作者: cwinux    时间: 2010-11-12 22:29
回复 50# lnitcscq

在cwinux_1.2.1.tar.gz中已经修改了。只是automake形成的一个configure的文件,是一个unix的link文件。
此在1.2.1版中修正了,你可以下载新版本:http://sourceforge.net/projects/ ... 2.1.tar.gz/download
作者: starzhestarzhe    时间: 2010-11-13 11:14
我擦,LZ是新浪的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2