中间件技术

消息队列中间件Celery、RabbitMQ

China☆狼群 提交于 2019-12-02 14:29:43
消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。 目前开源的消息中间件可谓是琳琅满目,能让大家耳熟能详的就有很多,比如ActiveMQ、RabbitMQ、Kafka、RocketMQ(阿里)、ZeroMQ等。不管选择其中的哪一款,都会有用的不趁手的地方,毕竟不是为你量身定制的。有些大厂在长期的使用过程中积累了一定的经验,其消息队列的使用场景也相对稳定固化,或者目前市面上的消息中间件无法满足自身需求,并且也具备足够的精力和人力而选择自研来为自己量身打造一款消息中间件。但是绝大多数公司还是不会选择重复造轮子,那么选择一款合适自己的消息中间件显得尤为重要。就算是前者,那么在自研出稳定且可靠的相关产品之前还是会经历这样一个选型过程。 消息队列是消息在传输的过程中保存消息的容器。 celery:流程图: <ignore_js_op> RabbitMQ AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的 中间件 设计。消息中间件主要用于组件之间的解耦

Gin框架介绍及使用

左心房为你撑大大i 提交于 2019-12-02 10:53:33
Gin框架介绍及使用 Gin 是一个用Go语言编写的web框架。它是一个类似于 martini 但拥有更好性能的API框架, 由于使用了 httprouter ,速度提高了近40倍。 如果你是性能和高效的追求者, 你会爱上 Gin 。 Gin框架介绍 Go世界里最流行的Web框架, Github 上有 24K+ star。 基于 httprouter 开发的Web框架。 中文文档 齐全,简单易用的轻量级框架。 Gin框架安装与使用 安装 下载并安装 Gin : go get -u github.com/gin-gonic/gin 第一个Gin示例: package main import ( "github.com/gin-gonic/gin" ) func main() { // 创建一个默认的路由引擎 r := gin.Default() // GET:请求方式;/hello:请求的路径 // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数 r.GET("/hello", func(c *gin.Context) { // c.JSON:返回JSON格式的数据 c.JSON(200, gin.H{ "message": "Hello world!", }) }) // 启动HTTP服务,默认在0.0.0.0:8080启动服务 r.Run() }

信息系统集成专业技术知识

痴心易碎 提交于 2019-12-01 23:26:21
第一章 信息系统基础知识 第一节 信息系统的生命周期   立项 开发 运维 消亡(口诀:花开云散)   立项:形成《需求规格说明书》由系统分析师完成。   开发:工作内容:系统分析 、系统设计、系统实施、系统验收。   运维:4种类型,更正性维护、适应性维护、完善性维护、预防性维护   消亡: 第二节 信息系统的开发方法   结构化方法:缺点,开发周期长,工作效率低,文档设计说明繁琐。   原型发   面向对象方法   面向服务的方法   敏捷方法 第三节 信息系统生命周期模型   瀑布模型:属于结构化开发方法   V模型:编码-单元测试(边界值错误)、详细设计-集成测试(接口)、概要设计-系统测试(整体运行)、需求分析-验收测试(业务需求)。口诀: 延续膝盖吉祥扁担   原型模型:迭代方法   RUP统一过程模型:开发+项目管理,状态:初始 、细化、 构建 、交付   螺旋模型:结合了瀑布型和原型模型,适应于大型项目   喷泉模型:适应于面向对象方法;无间隙、迭代   SCRUM - - 并列争求法:敏捷方法 第四节 信息系统开发过程   1.需求分析     定义:针对待解决问题的特征描述,所定义的需求必须可以被验证     作用:检测和解决需求之间的冲突,发现系统的边界,详细描述系统的需求。   2.软件设计     根据软件需求,产生一个软件内部结构的描述

消息中间件常见问题

人走茶凉 提交于 2019-12-01 02:55:11
高可用,重复消费,幂等,可靠性传输,消息丢失 1、 kafka,rabbitMQ,activemq,rocketMQ使用场景及区别技术选型 吞吐量、topic数量对吞吐量的影响、时效性、可用性、可靠性、核心特点、优劣势总结 activemq:吞吐量万级 非常成熟,功能比较强大,大量的公司再项目中有应用 偶尔会有低概消息丢失,近些年应用越来越少 官方社区维护越来越少,而且确实主要基于解耦和异步来用的,较少在大规模吞吐的场景下使用 rabbitMQ: 吞吐量万级 跟服务器有关系 基于erlang开发,性能较好 延时低,而且提供开源的管理界面 社区比较活跃,近些年互联网公司用rabbitmq的比较多,因为基于erlang语言 不懂源码,比较难进行定制和掌控; rocketMQ:单机吞吐量10w,topic可以达到几百或者上千级别 topic越多吞吐量会有较小幅度的下降,阿里大规模使用,比较可靠、日处理消息上百亿、拓展方便、社区维护可以,只会复杂MQ业务场景 kafka:功能简单,主要支持简单的mq功能,ms级延迟 极高的可用性和可靠性不过有消息重复消费 在大数据领域的实时计算以及日志采集被大规模使用。 中小型公司:rabbitMQ,技术实力一般 挑战不是很高 社区比较活跃; 大型公司:rocketMQ 基础架构研发实力较强 如果是大数据领域的实时计算、日志采集等场景

消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?

戏子无情 提交于 2019-11-30 21:22:19
最近要为公司的消息队列中间件进行选型,市面上相关的开源技术又非常多,如ActiveMQ、RabbitMQ、ZeroMQ、Kafka,还有阿里巴巴的RocketMQ等。 这么多技术,如何进行选型呢? 首先对于阿里的RocketMQ,因为是阿里开源的,对于国内开源的保持谨慎的态度,暂时不采取该中间件。 所以只能在ActiveMQ、RabbitMQ、ZeroMQ、Kafka中间选一款作为消息队列中间件。 下面从几个维度来对比下 1、社区活跃度 从目前网上的资料上看,RabbitMQ、activeMQ、ZeroMQ三者中RabbitMQ绝对是首选。 2、消息持久化 ZeroMq不支持消息持久化,ActiveMQ和RabbitMQ都支持。 3、核心技术 可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统等等。 RabbitMq / Kafka最好,ActiveMQ次之,ZeroMQ最差。当然ZeroMQ也可以做到,不过自己必须手动写代码实现,工作量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。 4、高并发 毋庸置疑RabbitMQ最高,因为RabbitMQ是由天生具备高并发高可用特性的erlang语言实现的。 以上对比参考来源网络,大同小异。总结就是需要从RabbitMQ和Kafka之间选一款适合自己的

消息中间件和RabbitMQ应用学习

倾然丶 夕夏残阳落幕 提交于 2019-11-30 21:03:34
一、什么是消息中间件 分布式系统服务之间(或RPC通信),进行远程异步消息传递用到的RabbitMQ或Kafka等软件统称为消息中间件,具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能。 二、消息中间件与分布式对象调用的比较 分布式对象调用: 提供了一种通讯机制,透明地在异构的分布式计算环境中传递对象请求,而这些对象可以位于本地或远程机器。它通过在对象与对象之间提供一种统一的接口,使对象之间的调用和数据共享不再关心对象的位置、实现语言及所驻留的操作系统。这个接口就是面向对象的中间件。 尽管面向对象的中间件是一种很强大的规范被广泛应用,但是面对大规模的复杂分布式系统,这些技术也显示出了局限性: 1.同步通信 :客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行。 2.客户和服务对象的生命周期紧密耦合 :客户进程和服务对象进程都必须正常运行,如果由于服务对象崩溃或网络故障导致客户的请求不可达,客户会接收到异常。 为了解决这些问题,出现了面向消息的中间件,它较好地解决了以上的问题。 消息中间件: 作为一个中间层软件,它为分布式系统中创建、发送、接收消息提供了一套可靠通用的方法,实现了分布式系统中可靠的、高效的、实时的跨平台数据传输。消息中间件减少了开发跨平台和网络协议软件的复杂性,它屏蔽了不同操作系统和网络协议的具体细节,面对规模和复杂度都越来越高的分布式系统

RabbitMQ消息中间件技术精讲 笔记

你说的曾经没有我的故事 提交于 2019-11-30 21:01:54
目录 1. 主流消息中间件 2. 衡量一个MQ指标 3. RabbitMQ介绍 4. RabbitMQ高性能的原因 5. 什么是AMQP 6. AMQP核心概念 7. RabbitMQ整体架构 1. 主流消息中间件 ActiveMQ 最流行,完全支持JMS规范,不适合在高并发下使用,API丰富 性能不好 Kafka 分布式发布-订阅消息系统,基于pull模式来处理消息,追求吞吐量,不支持十五,对消息的重复,丢失,错误没有严格要求 关注性能 RocketMQ 阿里开源 Java编写 高吞吐高性能 适合大规模分布式系统,思路起源于Kafka 保证消息顺序 支持分布式事务 上亿消息堆积 商业版收费 RabbitMQ Erlang开发 AMQP协议实现 一致性,稳定性,可靠性比较好。 对性能和吞吐量的要求还在其次 2. 衡量一个MQ指标 服务性能 数据存储 集群架构 3. RabbitMQ介绍 RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言开发,RabbitMQ基于AMQP协议 4. RabbitMQ高性能的原因 Erlang语言 在数据交换 数据同步方面非常优秀 Erlang有点 Erlang有和原生Scoket一样的延迟 5. 什么是AMQP 是具有现代特征的二进制协议

消息中间件Rabbitmq(二)-使用详解

痴心易碎 提交于 2019-11-30 20:57:33
Rabbitmq 是基于amqp(高级消息队列协议)实现的队列技术,在他之上可以完成多种类型的消息转发模型。 下面列举一些常用的消息转发场景,在rabbitmq中是怎样实现的。 1.原理 先来看一下rabbitmq消息转发的原理,便于理解消息转发以及怎样实现常见的消息转发模型。 1.1生产者 1.生产者创建连接,并创建通道连接rabbitmq 2.使用routing key绑定exchange和队列,可以绑定多个routing key到不同的队列。 3.生产者生产消息发送给exchange 4.exchange根据routing key匹配到对应队列名字,把消息转发到指定的queue上,消息会暂存在队列中,等待消费者来消费。 1.2消费者 1.消费者创建连接,并创建通道连接rabbitmq 2.消费者消费指定队列消息 注意:exchange、queue都必须要提前创建或者使用系统默认的也可以。 1.3exchange exchange分为4种,分别是 1.direct,直接转发。exchange通过精确匹配routing key发送消息给队列 2.fanout,广播。会将消息广播到所有绑定到这个exchange的队列,无视发送消息时指定的routingkey。 3.topic,发布、订阅。routing可以可以使用通配符(#、*)来根据主题发送消息到不同的队列。 4.Headers

nodejs随手记

一世执手 提交于 2019-11-30 14:41:22
nodejs项目周 nodejs前端框架 一般做中间层 和操作数据库 传统模式和前后端分离最大的区别就是seo优化 HTTP常见的服务器软件 Apache Nginx (iis)微软的服务器现在已经不怎么用了 node服务器 可以自己编写服务 个人练习 nodejs依赖安装 Express框架 提供一系列强大特性帮助你创建各种web应用 框架安装 cnpm install --save express 依赖安装 npm init 配制文件 npm install -g supervisor node自启动工具 启动命令 supervisor 文件名 自启工具命令 npm install --save ejs 摸板引擎安装 npm install body-parser --save 安装post接收的第三方模块 服务器 •服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。 •常见的HTTP服务器软件:Apache、Nginx、IIS。 •Node服务器:如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求响应。不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时, 我们不仅仅在实现一个应用,同时还实现了整个

nodejs随手记

时光毁灭记忆、已成空白 提交于 2019-11-30 14:39:30
nodejs项目周 nodejs前端框架 一般做中间层 和操作数据库 传统模式和前后端分离最大的区别就是seo优化 HTTP常见的服务器软件 Apache Nginx (iis)微软的服务器现在已经不怎么用了 node服务器 可以自己编写服务 个人练习 nodejs依赖安装 Express框架 提供一系列强大特性帮助你创建各种web应用 框架安装 cnpm install --save express 依赖安装 npm init 配制文件 npm install -g supervisor node自启动工具 启动命令 supervisor 文件名 自启工具命令 npm install --save ejs 摸板引擎安装 npm install body-parser --save 安装post接收的第三方模块 服务器 •服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。 •常见的HTTP服务器软件:Apache、Nginx、IIS。 •Node服务器:如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求响应。不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时, 我们不仅仅在实现一个应用,同时还实现了整个