RabbitMQ 官方文档之 Clustering 和 Network Partition
ClusteringandNetworkPartitionsRabbitMQclustersdonottoleratenetworkpartitionswell.IfyouarethinkingofclusteringacrossaWAN,don't.Youshouldusefederationortheshovelinstead.RabbitMQ集群无法很好的应对网络分区情况。如果你打算跨WAN构建集群,请
WMQ v1.5 发布,go 实现的消息中间件
支持集群部署,避免单点故障.完全实现了RabbitMQ的fanout,topic,direct的消息模式,生产者可以按照需求生产不同routingkey类型的消息,消费者在管理系统中可以随意订阅.被动模式,一般情况下需要各种语言编写的程序与RabbitMQ建立持久的tcp连接,接受订阅的消息,这样的弊端很大,接入成本高,不易于维护."被动模式"解决了这个问题,消费者只需要设置routingkey和一个消费的URL接口即可,然后有订阅的消息时,WMQ会推送消息到这个URL接口上,接口被动接受数据处理即可.
RabbitMQ之惰性队列(Lazy Queue)
RabbitMQ从3.6.0版本开始引入了惰性队列(LazyQueue)的概念。惰性队列会尽可能的将消息存入磁盘中,而在消费者消费到相应的消息时才会被加载到内存中,它的一个重要的设计目标是能够支持更长的队列,即支持更多的消息存储。当消费者由于各种各样的原因(比如消费者下线、宕机亦或者是由于维护而关闭等)而致使长时间内不能消费消息造成堆积时,惰性队列就很有必要了。默认情况下,当生产者将消息发送到RabbitMQ的时候,队列中的消息会尽可能的存储在内存之中,这样可以更加快速的将消息发送给消费者。即使是持久化的消息,在被写入磁盘的同时也会在内存中驻留一份备份。当RabbitMQ需要释放内存的时候,会将内存中的消息换页至磁盘中,这个操作会耗费较长的时间,也会阻塞队列的操作,进而无法接收新的消息。虽然RabbitMQ的开发者们一直在升级相关的算法,但是效果始终不太理想,尤其是在消息量特别大的时候。惰性队列会将接收到的消息直接存入文件系统中,而不管是持久化的或者是非持久化的,这样可以减少了内存的消耗,但是会增加I/O的使用,如果消息是持久化的,那么
[译]MQTT安全基础:授权
您好,欢迎来到MQTT安全基础的下一篇文章。本周,我们将专注于一个新课题,并通过MQTT研究授权。这在我们以前讨论过认证后才适合。如果您没有阅读关于身份验证的最后两篇文章(第1部分和第2部分),那么在继续阅读此文章之前,您一定要这样做。注:本文翻译自:MQTTSecurityFundamentals:AuthenticationwithUsernameandPassword什么是授权?授权是指定特定资源的访问权限的功能。这包括策略的定义和实施,它们指定谁可以访问某个资源。因此,以下术语至关重要:主体或用户:想访问资源资源,对象或服务:应防止未经授权的访问政策:指定主体是否可以访问资源真实世界例证让我们来看一下身份验证博客文章的旅行示例,并继续执行。我们已经看到,登机时可以使用护照来认证一个人的身份。所以在身份确认后,预订确认书或登机证用于授权/授予访问权限以获得特定的飞机。所以在预订航班后,有关您的人的信息和确切的航班日期,时间和目的地作为飞行的授权。认证和授权:两个最好的朋友!正如我们已经在现实世界中看到的那
activemq的几种基本通信方式总结
简介在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择。这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨。activemq是JMS消息通信规范的一个实现。总的来说,消息规范里面定义最常见的几种消息通信模式主要有发布-订阅、点对点这两种。另外,通过结合这些模式的具体应用,我们在处理某些应用场景的时候也衍生出来了一种请求应答的模式。下面,我们针对这几种方式一一讨论一下。基础流程在讨论具体方式的时候,我们先看看使用activemq需要启动服务的主要过程。按照JMS的规范,我们首先需要获得一个JMSconnectionfactory.,通过这个connectionfactory来创建connection.在这个基础之上我们再创建session,destination,producer和consumer。因此主要的几个步骤如下:1.获得JMSconnectionfactory.通过我们提供特定环境的连接信息来构造factory。2.利用fact
分布式消息队列 RocketMQ 源码分析 —— Message 发送与接收
关注微信公众号:【芋道源码】有福利:RocketMQ/MyCAT/Sharding-JDBC所有源码分析文章列表RocketMQ/MyCAT/Sharding-JDBC中文注释源码GitHub地址您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。新的源码解析文章实时收到通知。每周更新一篇左右。认真的源码交流微信群。1、概述Producer发送消息。主要是同步发送消息源码,涉及到异步/Oneway发送消息,事务消息会跳过。Broker接收消息。(存储消息在《RocketMQ源码分析——Message存储》解析)2、Producer发送消息DefaultMQProducer#send(Message)1:@Override2:publicSendResultsend(Messagemsg)throwsMQClientEx
消息队列总结
消息队列中间件是分布式系统中重要的组件。主要解决异步消息、应用耦合、流量削锋、日志收集等问题,实现高性能,高可用,可伸缩和最终一致性架构。异步处理场景:用户注册后,需要发注册邮件和短信。传统的做法有两种:a)串行的方式;b)并行方式。a)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。串行方式b)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。串行方式两种方式对比:假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销。由于CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。1、串行方式的执行时间是150毫秒,并行的时间是100毫秒。2、串行方式1秒内CPU可处理的请求量是7次(1000/150)3、并行方式处理的请求量是10次(1000/100)引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:应用消息队
深入解析中间件之-RocketMQ
ApacheRocketMQ基本流程RemotingRPC示例rocketmq-remoting模块采用Netty封装了RPC的调用,包括客户端和服务端之间的交互。不同分布式系统在通信上都会实现RPC模块,比如Kafka、Hadoop等都有各自的RPC实现。先来查看测试用例RemotingServerTest的使用方法:启动RemotingServer和RemotingClient调用RemotingClient的invokeAsync()或者invokeSync()、invokeOneway()方法以异步调用为例,RemotingClient的invokeAsync()方法主要有三个参数:服务端地址,RPC调用需要指定服务端的地址,这样客户端才能发送请求,让服务端处理远程指令(RemotingCommand),即客户端发送的请求回调对象(InvokeCallback),即客户端收到服务端返回的响应结果后,如何处理RPC调用的具体步骤如下:启动客户端和服务端客户端构造远程指令对象客户端通过RemotingClien
Kafka技术内幕附录
Kafka技术内幕附录第11章:附录11.1Kafka基本操作11.1.1创建、修改、删除、查看主题我们可以手动创建主题或者让Kafka自动创建主题,手动创建主题必须指定分区数和副本因子。如果服务端开启了自动创建主题,新数据写入一个不存在的主题,服务端会自动创建这个主题。自动模式下主题的配置信息在server.properties文件中,比如分区数默认只有一个。因为分区是Kafka的最小并行单位,所以我们一般会根据集群规模设置合理的分区数,来达到客户端和服务端的负载均衡。副本因子(replication-factor)是分区的副本数量,每条消息会复制到多个节点上,一般设置为3个副本。假设副本数为N,则最多允许N-1个节点宕机。下面的实验在本机安装Kafka,假设ZK的端口为2181,Kafka的端口为9092。#创建主题$bin/kafka-topics.sh--zookeeperlocalhost:2181--create\--topictest--partitions1--replicati
Kafka技术内幕拾遗
Kafka技术内幕拾遗:white_check_mark:客户端元数据(Metadata)即席查询(InteractiveQuery)EOS事务(Transaction)客户端的元数据对象客户端的连接对象(NetworkClient)在轮询时会判断是否需要更新元数据。客户端调用元数据更新器的maybeUpdate()方法,并不一定每次都需要更新元数据。只有当元数据的超时时间(metadataTimeout)等于0时,客户端才会发送元数据请求。1.客户端轮询与元数据更新器客户端调用选择器的轮询方法,最长的阻塞时间会在“轮询时间(pollTimeout)、元数据的更新时间(metadataTimeout)、请求的超时时间(requestTimeoutMs)”三者中选取最小值。如果元数据的更新时间等于0,表示客户端会立即发送元数据请求,不会阻塞。下面解释这几个时间变量的数据来源,以及它们在发送请求过程中所代表的含义。生产者的requestTimeoutMs变量,对应的配置项是request.tim
OpenMessaging:构建一个分布式消息分发的开放标准
通过在云计算、大数据和标准API上的企业及社区的协作,我很高兴OpenMessaging项目进入Linux基金会。OpenMessaging社区的目标是为分布式消息分发创建全球采用的、供应商中立的和开放标准,可以部署在云端、内部和混合云情景中。阿里巴巴、雅虎、滴滴和Streamlio是该项目的创始贡献者。Linux基金会已与这个初始项目社区合作来建立一个治理模式和结构,以实现运作在消息API标准上的生态系统的长期受益。由于越来越多的公司和开发者迈向云原生应用cloudnativeapplication,消息式应用和流式应用的扩展面临的挑战也在不断发展。这包括平台之间的互操作性问题,线路级协议wire-levelprotocol之间缺乏兼容性以及系统间缺乏标准的基准测试。特别是当数据跨不同的消息平台和流平台进行传输时会出现兼容性问题,这意味着额外的工作和维护成本。现有解决方案缺乏负载平衡、容错、管理、安全性和流功能的标准化指南。目前的系统不能满足现代面向云的消息应用和流应用的需求。这可能导致
[译]MQTT安全基础:TLS/SSL
欢迎来到MQTT安全基础系列的第五部分。在最近几周的文章中关注了应用层的身份验证和授权后,本周的主题是使用TLS的传输加密。我们将看看为什么TLS/SSL对于安全的MQTT解决方案是有利的,我们将讨论使用MQTT传输加密时的最佳做法。注:本文翻译自:MQTTSecurityFundamentals:TLS/SSL什么是TLSTLS(传输层安全)和SSL(安全套接字层)在客户端和服务器之间提供安全的通信通道。其核心是TLS和SSL是使用握手机制协商各种参数以在客户端和服务器之间建立安全连接的加密协议。握手完成后,建立客户端与服务器之间的加密通信,没有攻击者可以窃听通信的任何部分。服务器提供X509证书,通常由受信任的机构颁发,客户端用它来验证服务器的身份。为什么TLS很重要?想像你正在发送明信片。很明显,该卡的收件人是谁,邮递员将确保该卡到达。然而,没有什么可以阻止邮递人员读卡的内容,实际上涉及交付明信片的每个人都可以阅读内容。如果你有一个恶意的邮递员,他甚至可以改变明信片中的一些内容!以上说明的情况对于一般
RabbitMQ简介以及应用
一、简要介绍开源AMQP实现,Erlang语言编写,支持多种客户端分布式、高可用、持久化、可靠、安全支持多种协议:AMQP、STOMP、MQTT、HTTP适用于多系统之间的业务解耦的消息中间件二、基本概念1、exchange:交换器,负责接收消息,转发消息至绑定的队列,有四种类型:direct:完全匹配的路由topic:模式匹配的路由fanout:广播模式headers:键值对匹配路由Exchange属性:持久化:如果启用,那么rabbit服务重启之后仍然存在自动删除:如果启用,那么交换器将会在其绑定的队列都被删除掉之后自动删除掉自身2、Queue:队列,rabbitmq的内部对象,用于存储消息,其属性类似于Exchange,同样可以设置是否持久化、自动删除等。消费者重Queue中获取消息并消费。多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。3、Binding:绑定,根据路由规则绑定交换器与队列4、Routing:路由键,路由的关键字三、
纽约时报Kafka架构实战
纽约时报有很多内容生成系统,我们使用第三方数据来编写故事。另外,我们有161年的新闻行业积累和21年的在线内容发布经验,所以大量的在线内容需要被搜索到,并提供给不同的服务和应用使用。另一方面,有很多服务和应用需要访问到这些内容——搜索引擎、个性化定制服务、新闻种子生成器,以及其他各种前端应用,如网站和移动应用。一旦有新内容发布,就要在很短的时间内让这些服务访问到,而且不能有数据丢失——毕竟这些内容都是有价值的新闻。在这篇文章里,我们将详细介绍我们是如何基于ApacheKafka解决上述问题的。我们把这个系统叫做发布管道(PublishingPipeline)。这篇文章主要关注后端的系统,我们会介绍如何使用Kafka保存纽约时报的文章,以及如何使用Kafka和SteamsAPI将发布的内容实时推送给各种应用。下面是总体的架构图,具体细节稍后详述。基于API解决方案的不足之处访问已发布内容的后端系统有着各种不同的需求。我们有一个服务专门为网站和移动应用提供实时内容,所以在内容发布之后,它需要立即访问到这些内容。我们还有一些服
基于leveldb的持久消息队列SDK
最近看技术博客,谈到他们开发了一种日志采集的agent部署在各个服务器上,由业务直接通过unixsocket实时发送日志给agent的场景。在agent里他们使用了持久化的本地消息队列用于缓冲日志数据,这样可以缓冲因为日志服务端阻塞导致的日志堆积暴涨,以及避免agent宕机后的日志丢失问题。那么如何实现一个单机消息队列呢?自己实现一个可靠的存储系统是困难的,所以尽量不要造轮子,这里可以选择leveldb作为持久化介质,他是一个高性能的K/V存储SDK,写性能尤为突出。我实测了一下leveldb,顺序写大概30-40万的/秒(key有序递增),顺序读大概80-100万/秒,可以参考官方的测试数据。实现思路队列天生就是一个顺序读写的模型,在leveldb的K/V模型上构造出队列模型,需要一个队列的head头和tail尾2个指针,其中head表示写入的位置,tail表示读取的位置,初始都为0。当push一条数据时,以head为key插入到leveldb,并让head=head+1,head自身同样需要保存到leve
Android Handler 机制
Handler是什么(来自组员亮亮的分享)官网解释:AHandlerallowsyoutosendandprocessMessageandRunnableobjectsassociatedwithathread'sMessageQueue.EachHandlerinstanceisassociatedwithasinglethreadandthatthread'smessagequeue.WhenyoucreateanewHandler,itisboundtothethread/messagequeueofthethreadthatiscreatingit--fromthatpointon,itwilldelivermessagesandrunnablestothatmessagequeueandexecutethemastheycomeoutofthemessagequeue.Han
如何在 Python 中正确的代理对象
本文基于Python3.6题外话先来看一个问题:已知对于一个对象来说,运算符>会去调用对象的__gt__方法:In[1]:classT:...:def__gt__(self,value):...:print('__gt__call')...:returnTrue...:In[2]:t=T()In[3]:t>float('inf')__gt__callOut[3]:TrueIn[4]:t
《RabbitMQ官方指南》翻译邀请
10月姗姗来迟,本月并发网组织大家翻译《RabbitMQ官方文档》,欢迎有兴趣的同学参与。如何领取通过评论领取想要翻译的文章,每次领取一章或一节(根据内容长短),翻译完后再领取其他章节。领取完成之后,建议在一个星期内翻译完成,如果不能完成翻译,也欢迎你邀请其他同学和你一起完成翻译。请谨慎领取,并发网是非盈利组织,没办法去跟进每一篇译文的进展,所以很多文章领取了没有翻译,会导致文章长时间没人翻译。如何提交?翻译完成之后请登录到并发编程网后台,点击左上的“新建”按钮提交文章,会有编辑校对后进行发布。如下图:编辑器使用方法如下:校对完之后被评为A级会升级您为译者,并加入译者沟通群。如果在本站翻译超过十篇文章,将有礼品赠送,比如签名版的《Java并发编程的艺术》或者其他图书。如果译文发布到并发网公众号,赞赏归译者所有。如果你喜欢使用markdown编写文章,可以将markdown生成后的HTML复制到网站上进行提交(复制到文本框里)。mac下推荐MacDown软件。
Apache Kafka系列(一)----简介
一、Kafka简介(1)、什么是KafkaApacheKafka是一个基于分布式日志提交机制设计的发布订阅系统。数据在kafka中持久化,用户可以随时按需读取。另外数据以分布式的方式存储,提高容错性,易于扩展(2)、产生背景Kafka是一个消息系统,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础。活动流数据是几乎所有站点在对其网站使用情况做报表时都要用到的数据中最常规的部分。活动数据包括页面访问量(PageView)、被查看内容方面的信息以及搜索情况等内容。这种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性地对这些文件进行统计分析。运营数据指的3是服务器的性能数据(CPU、IO使用率、请求时间、服务日志等等数据)。运营数据的统计方法种类繁多。二、Kafka的特点(1)、同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50MB),每秒处理55万消息(110MB)。(2)、可进行持久
Apache Kafka系列(二)----Windwos下搭建Kafka环境
(一)、配置ZookeeperKafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper,具体步骤如下:1.1下载安装文件:http://mirror.bit.edu.cn/apache/zookeeper/这里选择的是3.5.2版本。1.2解压文件(本文解压到D:\kafka)1.3打开D:\kafka\zookeeper-3.5.2-alpha\zookeeper-3.5.2-alpha\conf,把zoo_sample.cfg重命名成zoo.cfg1.4从文本编辑器里打开zoo.cfg1.5修改dataDir和dataLogDir保存路径dataDir=D:\data\logs\zookeeperdataLogDir=D:\data\logs\zookeeper(二)、配置Kafka2.1下载安装文件:http://kafka.apache.or