消息队列

.net 大型分布式电子商务架构说明

核能气质少年 提交于 2020-04-15 10:26:50
【推荐阅读】微服务还能火多久?>>> .net大型分布式电子商务架构说明 背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控。 架构演变 基础框架剥离 -> 分库分表 -> 基础服务建设 -> 私有云建设 -> 分布式操作系统 基础框架 整个公司无论有多少项目,需要沉淀最基础的框架,里面一般包含核心的分库分表规则,统一的数据库操作类库,统一的通讯类,统一的日志类,统一的加密算法,统一的基础服务 sdk ,公用的一些工具类等等。该框架用于定义最基础的公司架构,设计,统一最基础的技术及项目架构规范,拦截及监控最基础的核心调用等。框架命名一般比较简单,如京东,可以定义为 jdf ;淘宝,可以定义为 tbf 。 分库分表 分库分表为最常规的架构拆分方案。一般会从业务角度进行不同视角的拆分,如用户视角和商户视角。当然前提也需要业务方面或者其他技术力量的支持,不出现或者解决拆分后跨多个分库或者分表的表查询及查询结果合并问题。分库分表前也通过需要预估容量,预估性能。分库分表也经常会遇到全局 id ,或者分布式 id 自增且唯一的问题,这些都要预先在设计和架构层面要充分考虑。 用户视角如图所示 商户视角如图所示 基础服务 基础服务是系统分布式的一个核心

【开源】.net 分布式架构之业务消息队列

落爺英雄遲暮 提交于 2020-04-15 10:03:15
【推荐阅读】微服务还能火多久?>>> 开源QQ群: .net 开源基础服务 238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ## 业务消息队列是应用于业务的解耦和分离,应具备分布式,高可靠性,高性能,高实时性,高稳定性,高扩展性等特性。 ## 优点: ## - 大量的业务消息堆积能力 - 无单点故障及故障监控,异常提醒 - 生产者端负载均衡,故障转移,故障自动恢复,并行消息插入。 - 消费者端负载均衡,故障保持,故障自动恢复,并行消息消费。 - 消息高可靠性持久化,较高性能,较高实时性,高稳定性,高扩展性。 - 支持99*99个消息分区,单个消息分区单天支持近1亿的消息存储。 - 消费者拉方式获取消息,在高并发,大量消息涌入的情况下,只要消费能力足够,不会有消息延迟,消息越多性能越好。 ## 缺点: ## - 能保证消息顺序插入,保证相同分区的消息是顺序的(排除网络延迟),但是多个分区之间的可能是乱序的。 - 消息并行消费或者多个分区并行消费或者负载均衡情况下的,消息消费顺序是乱序。 ## 缺点原因: ## - 消息的负载均衡是基于消息的分区存储,故多个分区之间的消息是乱序的,但是相同分区的消息是顺序的。 - 消息的消费者负载均衡也是基于消息的分区进行均衡的

分布式消息队列应用场景之异步处理、应用解耦、流量削锋和消息通讯理解分析

时光怂恿深爱的人放手 提交于 2020-04-07 17:33:27
摘要:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka等。 消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。 1.异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式。 (1)串行方式:将注册信息持久化后,发送注册邮件,再发送注册短信。三个业务全部完成后,返回给客户端。 (2)并行方式:将注册信息持久化后,发送注册邮件的同时,发送注册短信。三个业务全部完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。 假设三个业务节点每个使用100毫秒钟,不考虑其他开销,则串行方式的时间是300ms,并行的时间可能是200毫秒。则串行的方式1秒内可处理3次请求,并行方式1秒内可处理5次请求,综上所述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢? 引入消息队列,将不是必须的业务逻辑,异步处理。如下图所示 按照上图,用户的响应时间相当于是注册信息写入数据库的时间和将消息插入消息队列,也就是105毫秒。注册邮件,发送短信消息写入队列后,直接返回

rabbitmq集群部署

若如初见. 提交于 2020-04-07 10:19:50
0x00 RabbiMQ简介 RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbiMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3) 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。 要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。 RabbiMQ特点 RabbitMQ的集群节点包括内存节点、磁盘节点。RabbitMQ支持消息的持久化 也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。 0x01 部署步骤 hosts环境 /etc/hosts 192.168.66.61 xx-mq-1 192.168.66.62 xx-mq-2 192.168.66.63 xx-mq-3 安装包 # wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm # wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15

Android知识体系总结2020之Android部分Handler篇

江枫思渺然 提交于 2020-04-06 22:02:22
1.什么是Handler?   Handler是可以通过发送和处理Message和Runnable对象来关联相应线程的MessageQueue。通常我们认为它是一种异步机制。   a.可以让对应的Message和Runnable在未来的某个时间点进行相应的处理。   b.让自己想要的耗时操作在子线程中完成,让更新UI的操作在主线程中完成,而子线程与主线程之间的通信就是靠Handler来完成。 2.Handler的使用方法   Handler提供了很多异步机制的方法,只不过我们常用就只有post和sendMessage系列方法,我们先来看看Handler提供的构造器吧: Handler():默认构造函数将此处理程序与Looper用于当前线程。 Handler(Handler.Callback callback):构造函数将此处理程序与Looper对于当前线程,并接受一个回调接口,您可以在其中处理消息。 Handler(Looper looper):使用所提供的Looper而不是默认的。 Handler(Looper looper, Handler.Callback callback):使用所提供的Looper而不是默认的,而是接受一个回调接口来处理消息。   接下来我们就来看看Handler提供的各种方法吧: post(Runnable r):导致将Runnable

RabbitMQ小记(二)

喜夏-厌秋 提交于 2020-04-06 19:46:35
1、RabbitMQ相关介绍 (1)RabbitMQ整体上是一个生产者和消费者模型,主要负责接收、存储、转发消息。RabbitMQ整体结构图如下:   (2)生产者:发送消息的一方,生产者创建一条消息,发布到RabbitMQ上,消息一般分为两部分:消息体和标签,消息体是带有业务逻辑结构的数据,也可以进一步对消息体进行序列化,标签用来描述这条消息。    消费者:接收消息的一方,消费者创建一条连接,接到RabbitMQ服务器上的队列上,当消费者消费一条队列上的消息时,只是消费消息体,标签自动丢弃,所以消费者不会知道生产者是谁。    Broker:消息中间服务节点,一个RabbitMQ Broker可以看作是一个RabbitMQ的实例,也可看作一台rabbitMQ的服务器。    队列:Queue,RabbitMQ的内部对象,用于存储消息。多个消费者可以订阅一个队列,不支持队列层面的广播消费。    交换器:Exchange,生产者创建消息,把消息交给交换器,有交换器把消息发送到一个或多个队列上。如果交换器发送队列失败,消息会返回给生产者或者丢弃。RabbitMQ中交换器有四种类型:fanout、direct、topic、headers。    fanout:四种交换器中其一,会把消息发送到所有与交换器绑定的队列上。    direct:四种交换器其二

部署Rabbitmq集群

浪子不回头ぞ 提交于 2020-04-06 16:25:08
一、部署Rabbitmq集群 Rabbitmq集群大概分为两种方式: 1、普通模式:默认的集群模式,消息的尸体只存在一个节点上; 2、镜像模式:把需要的队列做成镜像,存在于多个节点。 ha-mode: all:列队到所有节点; exatly:随机镜像到其他节点上; nodes:镜像到指定节点上。 集群节点模式: 1、内存节点:工作在内存上; 2、磁盘节点:工作在磁盘上; 例外:内存节点和磁盘节点共同存在,提高访问速度的同时增加数据持久化。 相比内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘来保存状态就足够了,如果集群中只有内存节点,那么节点一旦宕机,所有的状态、消息都会丢失,无法实现数据的持久化。 rpm包(提取码:rv8g) 1、环境如下 2、安装rabbitmq服务 在192.168.171.134/135/140节点上进行如下操作,部署rabbitmq服务: [root@localhost ~]# mkdir rabbitmq [root@localhost ~]# cd rabbitmq/ [root@localhost rabbitmq]# ls erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm

Springboot使用RabbitMQ代码示例

我只是一个虾纸丫 提交于 2020-04-06 08:36:39
Springboot使用RabbitMQ代码示例 示例说明 本示例使用slf4j-log4j12管理日志,需要排除spring-boot-start-amqp的logback-classic依赖以防止冲突。 消息队列几个要点 生产者:发送消息的程序 消费者:监听接收消费消息的程序 消息:一串二进制数据流 队列:消息的暂存区/存储区 转换器:消息的中转站,用于接收分发消息。其中有 fanout、direct、topic、headers 四种 路由:与转换器绑定即可路由消息到指定的队列! 依赖导入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <!--排除日志冲突--> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <

五分钟学后端技术:如何学习Java工程师必须要会的RPC

穿精又带淫゛_ 提交于 2020-04-06 05:54:34
声明 本文转自 https://developer.51cto.com/art/201906/597963.htm 什么是RPC RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。 RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。 目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。 常用的RPC框架 gRPC:是 Google 公布的开源软件,基于最新的 HTTP 2.0 协议,并支持常见的众多编程语言。RPC 框架是基于 HTTP 协议实现的,底层使用到了 Netty 框架的支持。 Thrift:是 Facebook 的开源 RPC 框架,主要是一个跨语言的服务开发框架。 用户只要在其之上进行二次开发就行,应用对于底层的 RPC 通讯等都是透明的

五分钟学后端技术:如何学习Java工程师必知必会的消息队列

扶醉桌前 提交于 2020-04-06 05:47:41
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 什么是消息队列 “RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词,可能你是熟练使用消息队列的老手,又或者你是不懂消息队列的新手,不论你了不了解消息队列,本文都将带你搞懂消息队列的一些基本理论。如果你是老手,你可能从本文学到你之前不曾注意的一些关于消息队列的重要概念,如果你是新手,相信本文将是你打开消息队列大门的一板砖。 根据百度百科的说法,“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。` 为什么要使用消息队列 我觉得使用消息队列主要有两点好处: 1.通过异步处理提高系统性能(削峰、减少响应所需时间); 2.降低系统耦合性。如果在面试的时候你被面试官问到这个问题的话,一般情况是你在你的简历上涉及到消息队列这方面的内容,这个时候推荐你结合你自己的项目来回答。 《大型网站技术架构》第四章和第七章均有提到消息队列对应用性能及扩展性的提升。 在我平时的日常工作中,用到消息队列的场景可不少,比如,我有一个定时任务需要在A应用每天7点开始调度,那么定时任务系统如何告诉这个A应用呢