消息系统的作用:异步处理、削减峰值、减少组件之间的耦合。
选择消息系统根据业务需要需要考虑以下几个方面:
- 是否持久化
- 吞吐能力
- 高可用
- 分布式扩展能力
- 兼容现有协议
- 易于维护
- 其他,如消息丢失和重复的处理
- 避免单点故障
- 负载均衡
常见消息系统协议:
- STOMP
- AMQP
- 类似 MEMCACHE 的协议
- HTTP
- 自定格式
1、2 是不错的可选开源组件:
1. Kafka/MetaQ: 广泛用于 Linkedin 内部 (类似有 Java 版本的国产 MetaQ)
由于优先考虑吞吐,更加适合大数据量的消息收集和处理,比如日志分析、用户行为信息实时报表、集群状态信息收集和分析。
- 优先考虑持久化的设计,依靠 page cache 管理内存
- 高吞吐 112MB/s 11K msgs/s (比 beanstalkd >70x 吞吐能力)
- 支持异步复制
- 高可用、基于 Zookeeper 的集群设计、支持消费者失效后重新负载均衡
- Kafka 提供 PHP 类库
- 支持 ganglia JMX 监控
- 需要策略避免重复消息, 消费者更新 Zookeeper 的 offset 的方式 (MetaQ 已经提供了几种方式避免消息重复)
- MetaQ 提供 HTTP 接口
http://www.mail-archive.com/kafka-users@incubator.apache.org/msg02082.html
https://github.com/neophenix/StateOfTheMQ/blob/master/state_of_the_mq.pdf?raw=true
http://s.urge.omniti.net/i/content/slides/Surge2012-ErikOnen_Kafka_Messaging-Paradigms.pdf
http://research.microsoft.com/en-us/um/people/srikanth/netdb11/netdb11papers/netdb11-final12.pdf
http://dirlt.com/kafka.html
http://dirlt.com/index.html
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
2. NSQ – Golang
无中心设计、节点自动注册和发现。可以考虑作为内部通讯框架的基础。
https://github.com/bitly/nsq
* 追求简单部署
* 追求高可用、避免单点故障、无中心设计
* 确保消息送达
* 生产者消费者自动发现、消费者连接所有生产者、向消费者推的模式
* 提供 HTTP 接口
https://speakerdeck.com/snakes/nsq-nyc-golang-meetup
https://github.com/davegardnerisme/nsqphp
http://www.davegardner.me.uk/blog/tag/nsq/
3. Beanstalkd
- 支持持久化 binlog 设计,重启消息不丢失
- 一般
- 无高可用设计
- 和 memcached 一样的分布式扩展方式
- 各种类库
- 有 Web 管理工具
- 支持同步调用,等待返回
- 只有类似 Memcache TCP ASCII 协议, 单文件部署
- 支持消息优先级
- 9K jobs/s 入队列 5K jobs/s 出队列
- 单点故障
- 无主从同步复制机制
- 最好单机多实例部署
https://github.com/kr/beanstalkd/wiki/Tools
https://github.com/pda/pheanstalk
4. Redis
需要自己封装 Pub/Sub
- 基于 Redis 的复制高可用
其他常见开源消息系统:
ZeroMQ: 轻量级基础消息库
只适合不需要持久化的场景、需要自己封装
- 不支持持久化,只提供消息分发, 性能最好
- 无 Broker 设计, 无中心故障
RabbitMQ
- 2500 job/s 入队列 1300 job/s 出队列
- 适合小消息
- 分布式无单点设计
-
底层为 Erlang 实现
有评论: RabbitMQ could not enqueue/dequeue fast enough.
RESTMQ
MemcacheQ
http://memcachedb.org/memcacheq/
HTTPSQS
https://code.google.com/p/httpsqs/
Gearman
http://gearman.org/presentations
https://code.google.com/p/shard-query/
Kestrel
http://robey.github.io/kestrel/
http://robey.github.io/kestrel/docs/guide.html
HornetQ
性能差不考虑[3]
Resque
3800 jobs/s 入队列 300 jobs/s 出队列
https://github.com/blog/542-introducing-resque
基于 Redis 的消息队列
Starling
https://github.com/starling/starling
SquirrelMQ
https://code.google.com/p/squirrel-message-queue/
Sparrow – Ruby
https://code.google.com/p/sparrow/
Apache ActiveMQ
ActiveMQ crashed constantly under load.
STOMP HTTP 协议
http://stomp.github.io/stomp-specification-1.2.html
参考:
http://hiramchirino.com/stomp-benchmark/ec2-c1.xlarge/index.html
https://blog.serverdensity.com/queueing-mongodb-using-mongodb/
[3] http://x-aeon.com/wp/2013/04/10/a-quick-message-queue-benchmark-activemq-rabbitmq-hornetq-qpid-apollo/
https://news.ycombinator.com/item?id=5531192
http://www.javaplex.com/blog/high-performance-message-queues-get-reviewed/
http://adam.heroku.com/past/2010/4/24/beanstalkasimpleandfastqueueingbackend/
相关推荐
在线客服系统开源php。 在线客服,开源,php,客服,web客服系统。类似QQ客服。本系统是网络上常见到的开源客服,网络中经常见到。可以直接使用或二次开发,是闻名系列产品。现在上传了两种编码资源。
《开源机器人操作系统:ROS》内容共分九章,覆盖了ROS基本编程的大部分内容。利用现有的因特网上最新资料为蓝本,深入浅出地介绍了ROS的总体架构和涉及的主要领域,全面地对ROS安装及使用过程中常见问题给出了解答。...
开源系统相对于不开源的操作系统,如 Windows 和 Mac,开源操作系统最大的特点就是开放源代码和自由定制,但也会因为使用者的技术水平等关系出现很多不可预知的情况及维护问题,并且由于多数硬件和软件厂商并不支持...
一款面试刷题的 Spring Cloud 开源系统。零碎时间利用小程序查看常见面试题,夯实Java基础。 一款面试刷题的 Spring Cloud 开源系统。零碎时间利用小程序查看常见面试题,夯实Java基础。 一款面试刷题的 Spring ...
本书系统的讲解了ROS的基本知识,介绍了ROS的总体架构以及使用过程中常见问题进行解答
。
还有一个重大变化就是使用协议的变更,原来的自定协议变更为常见的 GPL2.0 协议,再也不是网友戏称的挂羊头卖狗肉的“假开源”了。 项目介绍 酷瓜云课堂,依托腾讯云基础服务架构,采用 C 扩展框架 Phalcon 开发,...
Dswjcms是一套资源管理系统,现基于Dswjcms发布的开源项目:P2P网贷系统、P2C网贷系统、商城网店系统 Dswjcms由宁波市鄞州区天发网络科技有限公司于2014年1月发布,到2015年10月,新版本和以往版本有较大的区别,...
因此我自己根据go语言中文社区提供的资料,还有互联网企业架构设计中的常见组件分类, 共精心挑选了100多个开源项目(项目不限于在github开源的项目), 分成以下十几个大类。 这个项目可以理解为互联网IT人打造的...
SiteServer CMS 是.NET平台的CMS系统,也是一款拥有十年历史与广泛知名度的CMS系统,今天迈出了自成立以来的最具跨越性的一步,宣布开源并推出全新5.0版本。 SiteServer CMS 能够支撑对数千个父站点、子站点的创建...
以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等。学校管理系统帮助提高学校的组织效率和信息管理水平。 人力资源管理系统(HRM):...
第一节:tslib1.0移植 第二节:QT4.7.0 在ARM平台移植 第三节:boa web服务器在PC上移植 第四节:boa web服务器在S3C2440开发板上移植 第五节:boa移植过程中出现的...第十二节:使用 busybox 制作 Linux 根文件系统
了解常见开源桌面、Web和移动GIS等各种平台软件功能和设计;学习开源开发方法和开源GIS项目设计。达到以下教学目的: 1、了解开源精神——自由、开放、共享,树立开源学习理念。掌握开源GIS设计方法和技术,重点...
以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等。学校管理系统帮助提高学校的组织效率和信息管理水平。 人力资源管理系统(HRM):...
Jeepay全三方支付系统是一款全开源的、基于Java语言开发的支付系统。它支持多渠道服务商和普通商户,可以满足不同用户的需求。 Jeepay全三方支付系统主要包含以下几个方面的功能: 首先,Jeepay全三方支付系统支持...
云EC具备了电商系统常见的所有功能,大概说明一下: 支付整合了支付宝三端支付(PC、手机、APP),微信三端支付(PC扫码、微信公众号、APP),银联支付。 支持微信与QQ第三方登陆 支持阿里大于短信接口接入 物流配置...
直播商城系统是一款开源的iOS应用,旨在帮助商家快速搭建自己的直播商城系统。它有效地避免了商城直播过程中...消息通知:系统会向用户发送各种消息通知,包括订单状态更新和优惠活动等。数据统计:系统会统计用户购买
3.6更新 1、修复用户端截图发送客服后台收不到问题 2、修复通用设置无法保存问题 3、修复客户管理分组无法添加问题 3.5更新 1、增加删除聊天记录功能(总后台权限) ...3、客服转接功能优化 ...客服系统正式发布