高性能RockerMQ(一)

简介: 高性能RockerMQ(一)

思考方式:以辩证的思维去发现探讨新事务

一、JMS消息服务介绍和使用场景

1、讲解什么是JMS,消息队列的使用

①、什么是JMS,java消息队列(java Message  Service),java平台中关于面向西澳西中间件的接口。

②、JMS是一种与厂商无关的API,用来访问消息收发系统消息,它类似于JDBC(java Database  Connectivity).这里,JDBC是可以用来访问许多不同关系数据库的API.

③、使用常见:

   核心应用:

           解耦:订单系统 -->物流系统

           异步:用户注册--》发送邮件,初始化信息

        比如:

        上面的步骤需要花600ms,串行的操作,用户需要等600ms才可以返回

         1、用户注册保留信息到数据库db中需要100ms

         2、写一个事件开一个异步的线程发送了短信,写道消息队列,也就几十毫秒而已

         3、短信服务会监听消息中间件里的事件,然后消费。这样就可以进行解耦的操作,短            信服务可以慢慢的消费,而不用管用户推送的消息有多么的多,因为都是放到中间件里            面去了。

          150ms:并行,解耦,用户就可以完成注册的操作。

           削峰:秒杀,日志处理(spark,storm,elk,kafka,hadoop)

   跨平台,多语言

   分布式事务,最终一致性:RocketMQ

    RPC调用上下游服务,数据源变动->通知下属

二、消息中间件常见概念和编程模型

不同的消息队列有不同的概念,可能不同的中间件有交集,也有的中间件也有特有的。

常见概念:

     ①、JMS提供者:连接面向消息中间件的,JMS接口的一个实现,RocketMQ,ActiveMQ,kafka等

           ②、  JMS生产者(Message Producer):生产消息的服务,比如用户注册的时候会产生一个消息,写到消息中间件里面去,所以它就是一个生产者。

            ③、  JMS消费者(Message  Consumer):消费消息的服务,类似于短信服务。有对应的事件,有消息过来,就会进行相应的消费。

             ④、   JMS消息:数据对象,比如msgid,content,phone,create_time,code

还有元数据里面的信息

             ⑤、   JMS队列:存储消费消息的区域,链表,list,arraylist,linkedlist,消息都是先进先出,消息中间件里面有很多队列,队列里面有很多的消息。

             ⑥、    JMS主题:一种支持发送消息给多个订阅者的机制。              

user_register_topic:对列的名称

       ⑦、JMS消息通常有两种类型:点对点(Point-to-Point),发布/订阅(Publish/Subscribe)

基础编程模型:消息中间件的基础模型

               ①、MQ中需要用的一些类

                     ConnectionFactory:连接工厂,JMS用它创建连接

                     Connection:JMS客户都安到JMS Provider的连接

                     Session:一个发送或接收消息的线程

                     Destination:消息的目的地:消息发送给谁

                     MessageConsumer/MessageProducer:消息消费者,消息生产者

三、对比当下主流的消息队列和选择问题

1、Apache  ActiveMQ,kafka,RabbitMQ,RocketMQ等等

    ①、ActiveMQ:http://activemq.apache.org/

           Apache出品,历史悠久,支持多种语言的客户端和协议,支持多种语言java,.NET,C++等,基于JMS Provider的实现,和java Provider Web实现的是一模一样的的

                  缺点:吞吐量不高(据说是万级的),多队列的时候性能下降,存在消息丢失的情况,比较少大规模使用。

   ②、 Kafka:http://kafka.apache.org/:主要在大数据领域用的很广。

                  是由Apache软件基金会开发的一个开源流处理平台,由Scala和java编写,kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理大规模的网站中的所有动作流数据(网页浏览,搜索和其他用户的行动),副本集机制,实现数据冗余,保障数据尽量不丢失;支持多个生产者和消费者。

缺点:不支持批量和广播消息,运维难度大,文档比较少。

    ③、   RabbitMQ:http://www.rabbitmq.com/

               是一个开源的AMQP实现,服务端用Erlang语言编写,支持多种客户端,如:python,ruby,.net,java,JMS,C,用于在分布式系统中存储转发消息,在易用性,扩展性 ,

高可用性等方面表现不错。在互联网的电商和金融界用的比较多。

缺点:使用Erlang开发,阅读和修改源码难度大。为了时间和人力的成本。

    ④、  RocketMQ:http://rocketmq.apache.org/

                   阿里开源的一款的消息中间件,纯java开发,具有高吞吐量 ,高可用性,适合大规模分布式系统应用的特点,性能强劲(零拷贝技术),支持海量堆积,支持指定次数和时间间隔的失败消息重发,支持consumer端tag过滤,延迟消息等,在阿里内部进行大规模使用,适合在电商,互联网金融等领域使用。

相关文章
|
5月前
|
消息中间件 缓存 Java
高性能架构设计
高性能架构设计
100 5
|
存储 缓存 文件存储
高性能场景下的云存储
高性能场景下的云存储
55 1
|
存储 缓存 算法
分布式数据库架构:高可用、高性能的数据存储
分布式数据库架构:高可用、高性能的数据存储
1006 0
|
存储 缓存 NoSQL
互联网开发高可用高性能那点事
互联网开发高可用高性能那点事
|
存储 缓存 负载均衡
高性能是什么?其本质是什么东东?
高性能是什么?其本质是什么东东?
167 0
|
存储 移动开发 负载均衡
大厂如何打造可扩展的高并发系统?
高可扩展性是个设计指标:表示可通过加机器线性提高系统处理能力,承担更高流量和并发。 架构设计之初,为什么不预先考虑好使用多少台机器,支持现有并发呢?因为峰值流量不可控。
148 0
|
算法 NoSQL 数据库
如何设计一款“高可用高性能”的发号器?
在分布式场景中,很多地方需要生成全局唯一的id,如数据库分库分表后需要用唯一id代替单机版本的自增id。发号器的基本要求是 全局唯一,无论如何都不能重复 某些场景下还要求单调递增,如排序需求等。
406 0
如何设计一款“高可用高性能”的发号器?
|
弹性计算 编解码 负载均衡
如何构建一套高性能、高可用性、低成本的视频处理系统?
基于函数计算和 Serverless 工作流的弹性高可用视频处理架构,充分体现了云原生时代 Serverless 化思想,以事件驱动的形式触发函数执行,真实计算资源真正意义上的按需使用。对于使用而言,这套方案在保证业务灵活度的同时,可以显著降低维护成本与资源成本,并大幅度的缩短项目交付时间。
5026 4
如何构建一套高性能、高可用性、低成本的视频处理系统?