消息系统的作用:异步处理、削减峰值、减少组件之间的耦合。
选择消息系统根据业务需要需要考虑以下几个方面:
- 是否持久化
- 吞吐能力
- 高可用
- 分布式扩展能力
- 兼容现有协议
- 易于维护
- 其他,如消息丢失和重复的处理
- 避免单点故障
- 负载均衡
常见消息系统协议:
- 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/
相关推荐
2. MVC(Model-View-Controller)框架:很多开源新闻发布系统基于MVC模式,有助于理解这种常见的软件设计模式。 3.前端技术:学习HTML、CSS和JavaScript,以及如何使用Bootstrap、Vue.js等前端框架提升用户体验。 ...
13. KnowledgeTree:这款开源系统专注于知识管理,提供文档版本控制、分层管理以及对多种文件格式的支持,允许自定义文件类型。 14. Owl Intranet Engine:Owl是一个多用户文档管理系统,具备文件夹和文件权限设置...
该系统可能采用了MVC(Model-View-Controller)设计模式,这是一种常见的软件架构模式,用于分离业务逻辑、数据模型和用户界面。在MVC中,Model负责数据处理,View负责展示,而Controller作为两者之间的桥梁,处理...
以上四个任务展示了Linux运维中常见的问题处理和自动化管理技巧,包括文件操作、系统监控、网络管理和服务识别。熟练掌握这些技能,对于提升Linux系统的管理和维护能力至关重要。通过编写和执行Shell脚本,可以提高...
Dswjcms是一套资源管理系统,现基于Dswjcms发布的开源项目:P2P网贷系统、P2C网贷系统、商城网店系统 Dswjcms由宁波市鄞州区天发网络科技有限公司于2014年1月发布,到2015年10月,新版本和以往版本有较大的区别,...
开源网店系统是一种基于开放源代码的电子商务解决方案,它允许用户免费下载、使用、修改和分发源代码,以便根据自己的需求定制和构建在线商店。这种系统通常由全球开发者社区维护和更新,提供了一种经济高效的方式,...
此系统支持多种常见的文件格式,如PDF、DOC和TXT,使得中国用户在日常工作中能方便地存储、管理和分享各类文档。 在这样一个系统中,有几个关键的技术知识点: 1. **权限管理**:企业文档管理系统的核心是权限控制...
1. **技术实力**:自行维护和开发开源系统需要一定的技术团队支持。 2. **合规性**:确保系统使用遵循开源许可协议,避免法律风险。 3. **更新维护**:定期检查并更新系统,保持与最新技术和安全标准同步。 4. **...
【标题】"人事管理系统开源"所涉及的知识点主要集中在开发一个用于管理人力资源的软件系统,且该系统是基于开源原则的。开源意味着源代码对公众开放,允许用户自由使用、修改和分发。这样的系统通常由全球开发者社区...
4. **技术栈**:魔方报价系统可能基于常见的Web开发技术,如: - 前端框架:可能使用React、Vue或Angular等,提供用户友好的交互界面。 - 后端框架:可能基于Django、Spring Boot或Node.js等,处理业务逻辑和...
这个"ASP源码—CMS 开源投票系统 v1.0.zip"压缩包文件包含了一个基于ASP技术构建的内容管理系统(CMS)的开源投票系统。下面我们将详细探讨ASP、CMS以及开源投票系统的相关知识点。 **ASP(Active Server Pages)**...
5. **开源的优势**:开源系统意味着源代码可供所有人查看、修改和分发。这带来了透明度,有利于社区的协作与创新。开发者可以依据自身需求定制系统,同时也能受益于社区的持续维护和更新。 6. **适用场景**:这些...
Claroline 作为一个成熟的开源系统,它的优点在于可扩展性强,有活跃的开发者社区支持,不断更新和完善。此外,由于是开源项目,用户可以自由定制,使其更符合特定的教学场景。然而,对于非技术背景的用户,初次...
【标题】"最新全开源在线留言系统源码"所涉及的知识点主要集中在开发一个完整的、开源的在线留言系统上。这种系统通常包含以下几个关键组成部分: 1. **前端界面**:前端是用户与系统交互的部分,它需要设计一个...
【压缩包子文件的文件名称列表】:`sharetronix-1.4.1` 这个文件名可能代表一个具体的开源微博系统项目,如Sharetronix的1.4.1版本。Sharetronix是一个例子,实际的开源微博系统可能包括但不限于:StatusNet(现更名...
DotBBS开源论坛系统是专为在线交流和讨论设计的一款高效、易用的软件平台,其最新版本v1.8提供了丰富的功能和优化的用户体验。本文将深入探讨DotBBS v1.8的关键特性和技术细节,帮助你了解如何利用这款开源论坛系统...
《开源机器人操作系统:ROS》内容共分九章,覆盖了ROS基本编程的大部分内容。利用现有的因特网上最新资料为蓝本,深入浅出地介绍了ROS的总体架构和涉及的主要领域,全面地对ROS安装及使用过程中常见问题给出了解答。...
开源系统相对于不开源的操作系统,如 Windows 和 Mac,开源操作系统最大的特点就是开放源代码和自由定制,但也会因为使用者的技术水平等关系出现很多不可预知的情况及维护问题,并且由于多数硬件和软件厂商并不支持...
在技术栈方面,`whisper客服系统`可能采用了常见的Web开发框架,如Spring Boot或Django,用于构建服务端应用。这些框架提供了强大的功能,包括路由管理、数据库操作、安全控制等,使得开发过程更为高效。同时,为了...
现在我们深入探讨一下PHP开源问答系统的常见功能和架构: 1. **用户注册与登录**:用户可以注册新账号,通过邮箱或手机号验证,也可以通过UCenter实现一键登录。 2. **问题发布与回答**:用户可以提出各种问题,...