消息中间件

概念回顾---中间件(IDC)

社会主义新天地 提交于 2020-02-17 09:42:14
转自 http://www.itisedu.com/phrase/200604241155005.html 中间件 (IDC) 定义: 中间件 ( middleware )是一种独立的系统 软件 或服务 程序 ,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的 操作系统 之上,管理计算资源和网络通信 提出原因: 为解决分布异构问题这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。 也许很难给中间件一个严格的定义,但中间件应具有如下的一些特点: 满足大量应用的需要 运行于多种硬件和 OS 平台 支持分布计算,提供跨网络、硬件和 OS 平台的透明性的应用或服务的交互 支持标准的协议 支持标准的接口 IDC 分类: 终端仿真 / 屏幕转换中间件、数据访问中间件、 远程过程调用 中间件、 消息 中间件、交易中间件、 对 象 中间件。下面,针对几类主要的中间件分别加以简要的介绍。 1 、远程过程调用 远程过程调用是一种广泛使用的分布式应用程序处理方法。一个应用程序使用 RPC 来 “ 远程 ” 执行一个位于不同地址空间里的过程,并且从效果上看和执行本地调用相同。事实上,一个 RPC 应用分为两个部分: server 和 Client 。 server 提供一个或多个远程过程; client 向 server

分布式事务XA

匆匆过客 提交于 2020-02-14 02:56:10
1、什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 2、分布式事务的产生的原因 2.1、数据库分库分表 当数据库单表一年产生的数据超过1000W,那么就要考虑分库分表,具体分库分表的原理在此不做解释,以后有空详细说,简单的说就是原来的一个数据库变成了多个数据库。这时候,如果一个操作既访问01库,又访问02库,而且要保证数据的一致性,那么就要用到分布式事务。 2.2、应用SOA化 所谓的SOA化,就是业务的服务化。比如原来单机支撑了整个电商网站,现在对整个网站进行拆解,分离出了订单中心、用户中心、库存中心。对于订单中心,有专门的数据库存储订单信息,用户中心也有专门的数据库存储用户信息,库存中心也会有专门的数据库存储库存信息。这时候如果要同时对订单和库存进行操作,那么就会涉及到订单数据库和库存数据库,为了保证数据一致性,就需要用到分布式事务。 以上两种情况表象不同,但是本质相同,都是因为要操作的数据库变多了! 3、事务的ACID特性 3.1、原子性(A) 所谓的原子性就是说

分布式事务XA

拟墨画扇 提交于 2020-02-14 02:55:41
1、什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 2、分布式事务的产生的原因 2.1、数据库分库分表 当数据库单表一年产生的数据超过1000W,那么就要考虑分库分表,具体分库分表的原理在此不做解释,以后有空详细说,简单的说就是原来的一个数据库变成了多个数据库。这时候,如果一个操作既访问01库,又访问02库,而且要保证数据的一致性,那么就要用到分布式事务。 2.2、应用SOA化 所谓的SOA化,就是业务的服务化。比如原来单机支撑了整个电商网站,现在对整个网站进行拆解,分离出了订单中心、用户中心、库存中心。对于订单中心,有专门的数据库存储订单信息,用户中心也有专门的数据库存储用户信息,库存中心也会有专门的数据库存储库存信息。这时候如果要同时对订单和库存进行操作,那么就会涉及到订单数据库和库存数据库,为了保证数据一致性,就需要用到分布式事务。 以上两种情况表象不同,但是本质相同,都是因为要操作的数据库变多了! 3、事务的ACID特性 3.1、原子性(A) 所谓的原子性就是说

ActiveMQ集群架构与原理解析

喜欢而已 提交于 2020-02-11 13:28:38
初识 JMS 与其专业术语 首先,说起ActiveMQ,就必须先聊聊JMS(Java Message Service)规范,也就是Java消息服务,它定义了Java中访问消息中间件的接口的规范。在这里注意哦,JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称为 “JMS Provider”,目前知名的开源 MOM (Message Oriented Middleware,也就是消息中间件)系统包括Apache的ActiveMQ、RocketMQ、Kafka,以及RabbitMQ,可以说他们都 “基本遵循” 或 “参考” JMS规范,都有自己的特点和优势。 专业术语 JMS(Java Message Service):实现JMS 接口的消息中间件; Provider(MessageProvider):消息的生产者; Consumer(MessageConsumer):消息的消费者; PTP(Point to Point):即点对点的消息模型,这也是非常经典的模型; Pub / Sub(Publish/Subscribe):,即发布/订阅的消息模型; Queue:队列目标,也就是我们常说的消息队列,一般都是会真正的进行物理存储; Topic:主题目标; ConnectionFactory:连接工厂,JMS 用它创建连接; Connection:JMS 客户端到JMS

大型网站系统与 Java 中间件实践

孤者浪人 提交于 2020-02-06 14:13:47
http://wanglizhi.github.io/2016/07/27/JavaWeb-And-MiddleWare/ 第一章 分布式系统介绍 分布式系统的定义:组件分布在网络计算机上,组件间仅仅通过消息传递来通信并协调行动。 分布式系统的意义: 升级单机处理能力的性价比越来越低 单机处理能力存在瓶颈 处于稳定性和可用性的考虑 摩尔定律:当价格不变时,每隔18个月,集成电路上可容纳的晶体管数目会增加一倍,性能也将提升一倍。 线程与进程的执行模式 冯诺依曼结构:输入设备、输入设备、运算器、控制器、存储器。 基于共享容器协同的多线程模式:经典如生产者消费者问题,对于存储数据的容器或对象,有线程安全和不安全之分,对于不安全的容器或对象,一般可以通过加锁或者通过Copy On Write的方式控制并发。 通过事件协同的多线程模式:避免死锁 多进程模式: 线程是属于进程的,一个进程内的多个线程共享了进程的内存空间;而多个进程间的内存空间是独立的,因此多个进程间通过内存共享、交换数据的方式与多个线程间就有所不同 此外,进程间通信、协调,以及通过一些事件通知或者等待一些互斥锁的释放方面也不一样 多进程相对于单进程多线程来说,资源控制会更容易实现;多进程中单个进程出现问题,不会造成整体的不可用 多进程之间可以共享数据,但其代价较大,会涉及序列化和反序列化的开销 网络通信基础知识

消息中间件和JMS的概念

本小妞迷上赌 提交于 2020-01-31 12:01:35
什么是消息中间件? 消息中间件可以理解成就是一个服务软件,保存信息的容器,比如生活中的快递云柜。我们把数据放到消息中间件当中, 然后通知对应的服务进行获取。消息中间件是在 消息的传输过程中保存信息的容器 。 作用 在soa分布式架构系统中,或者企业中的多个项目中,进行 多个系统异步传递消息 。 优点 1.使用消息服务器当做大的队列使用,先进先出,来 处理高并发写入操作 。 2.使用消息服务器可以 将业务系统的串行执行改为并行执行 ,处理效率高,更合理的榨取服务器的性能。 缺点 1.消息中间件 实时性不高 ,因为发送方将消息发送给消息服务器后,消息服务器末必能够立即处理。 2.主要看消息服务器是否繁忙,队列中先进先出,如果数据量大,要排队等待执行。 同步技术 dubbo是一种同步技术, 实时性高, controller调用service项目, 调用就执行。如果service项目中的代码没有执行完, controller里面的代码一致等待结果.。 异步技术 mq消息中间件技术(jms) 是一种异步技术, 消息发送方, 将消息发送给消息服务器。消息服务器未必立即处理.什么时候去处理, 主要看消息服务器是否繁忙,。消息进入服务器后会进入队列中, 先进先出.实时性不高。 什么是JMS? jms的全称叫做Java message service (Java消息服务)

请谈谈写入消息中间件的数据,如何保证不丢失?【石杉的架构笔记】

我的未来我决定 提交于 2020-01-29 16:40:23
面试官:请谈谈写入消息中间件的数据,如何保证不丢失?【石杉的架构笔记】 欢迎关注个人公众号:石杉的架构笔记(ID:shishan100) 周一至周五早8点半!精品技术文章准时送上! 精品学习资料获取通道,参见文末 目录 1、背景引入 2、Kafka分布式存储架构 3、Kafka高可用架构 4、画图复现Kafka的写入数据丢失问题 5、Kafka的ISR机制是什么? 6、Kafka写入的数据如何保证不丢失? 7、总结 (1)背景引入 这篇文章,给大家聊一下写入Kafka的数据该如何保证其不丢失? 看过之前的文章面试官:消息中间件如何实现每秒几十万的高并发写入?的同学,应该都知道写入Kafka的数据是会落地写入磁盘的。 我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了Kafka的核心架构原理。 (2)Kafka分布式存储架构 那么现在问题来了,如果每天产生几十TB的数据,难道都写一台机器的磁盘上吗?这明显是不靠谱的啊! 所以说,这里就得考虑数据的分布式存储了,其实关于消息中间件的分布式存储以及高可用架构,之前的一篇文章面试一线互联网大厂?那这道题目你必须得会!也分析过了,但是这里,我们结合Kafka的具体情况来说说。 在Kafka里面,有一个核心的概念叫做“Topic”,这个topic你就姑且认为是一个数据集合吧。 举个例子

初识中间件Kafka

烂漫一生 提交于 2020-01-23 10:25:53
初识中间件Kafka Author:SimplelWu 什么是消息中间件? 非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件 关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。 什么是Kafka? Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务。它通过一种独一无二的设计提供了一个消息系统的功能。 kafka官方: http://kafka.apache.org/ Kafka作为一个分布式的流平台,这到底意味着什么? 我们认为,一个流处理平台具有三个关键能力: 发布和订阅消息(流),在这方面,它类似于一个消息队列或企业消息系统。 以 容错 的方式存储消息(流)。 在消息流发生时处理它们。 什么是kakfa的优势? 它应用于2大类应用: 构建实时的流数据管道,可靠地获取系统和应用程序之间的数据。 构建实时流的应用程序,对数据流进行转换或反应。 kafka有四个核心API 应用程序使用 Producer API 发布消息到1个或多个topic(主题)。 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流

消息中间件选择

六眼飞鱼酱① 提交于 2020-01-22 13:03:50
消息队列选择建议 1.Kafka Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。 大型公司建议可以选用,如果有日志采集功能,肯定是首选kafka了。 2.RocketMQ 天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。 RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ。 3.RabbitMQ RabbitMQ :结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。不过,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug。 如果你的数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ。 来源: CSDN 作者: chrislin9 链接: https://blog.csdn.net/qq_31964019/article/details/104068754

如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

我是研究僧i 提交于 2020-01-20 09:30:56
这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore。 第1部分-使用 Serilog RequestLogging 来简化ASP.NET Core的日志输出(本篇文章) 第2部分-使用Serilog记录所选的端点名称[敬请期待] 第3部分-使用Serilog.AspNetCore记录MVC属性[敬请期待] 作者:依乐祝 译文地址: https://www.cnblogs.com/yilezhu/p/12215934.html 原文地址: https://andrewlock.net/using-serilog-aspnetcore-in-asp-net-core-3-reducing-log-verbosity/ 众所周知,ASP.NET Core的重要改变之一是把日志记录内置于框架中。这意味着您可以(如果需要)从自己的标准日志基础设施访问所有深层基础设施日志。缺点是有时您会收到 太多 的日志。 在这个简短的系列文章中,我将介绍如何使用 Serilog的ASP.NET Core请求日志记录功能 。在第一篇文章中,我将讲述如何将Serilog的 RequestLoggingMiddleware 添加到您的应用程序,以及它提供的好处。在后续文章中,我将描述如何进一步自定义行为。 我已经将这些帖子草拟了一段时间。从那时起,