首页 > 代码库 > 【系统架构】读《大型网站架构系列:分布式消息队列》整理

【系统架构】读《大型网站架构系列:分布式消息队列》整理

文章地址
拓展阅读:
RabbitMQ + PHP (一)入门与安装
RabbitMQ + PHP (二)AMQP拓展安装
RabbitMQ + PHP (三)案例演示
 
 
1. 一些词汇和技术

1)Zookeeper注册中心 Storm集群
 
 
2. 核心思想

1)【概述】
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等
2)【应用场景】
异步处理,应用解耦,流量削锋和消息通讯四个场景。
 
3)【消息中间件示例】
电商系统 日志收集系统
 
4)【日志系统】
ELK Static(新浪kafka日志处理应用案例)
-- Kafka:接收用户日志的消息队列。
 
-- Logstash:做日志解析,统一成JSON输出给Elasticsearch。
 
-- Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。
 
-- Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因。
 
5)【Zookeeper
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等
 
6)【storm
是一种 实现一个实时计算系统
 

7)【两种消息模式】

    -- 点对点(P2P模式) :
 
              a)每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
               b)发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
              c)接收者在成功接收消息之后需向队列应答成功

      -- 发布订阅(Pub/sub模式)

            a)每个消息可以有多个消费者
             b)发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
           c)为了消费消息,订阅者必须保持运行的状态。
 

3. 常见消息队列中间件

 
1)【ActiveMQ     ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线,对JAVA支持好
 
2)【RabbitMQ
-- RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗
-- RabbitMQ的安装
 
3)【ZeroMQ
号称史上最快的消息队列,它实际类似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通信,node可以是主机或者是进程。
 
4)【Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。
 
 
参考文档:
RabbitMQ + PHP (一)入门与安装
RabbitMQ + PHP (二)AMQP拓展安装
RabbitMQ + PHP (三)案例演示

【系统架构】读《大型网站架构系列:分布式消息队列》整理