Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍

时间:2022-09-19 14:20:42

架构简单介绍

结合应用架构,实现分布式系统架构所需的第三方应用和中间件: (1) 消息队列 ----------- ActiveMQ

(2) 分布式缓存 --------- Redis

(3) 分布式文件系统 ---- FastDFS

(4) 反向代理服务器 ---- Nginx、Apache

(5) 集群与负载均衡 ---- Keepalived、HAproxy、LVS

(6) 应用服务器 -------- JBoss、Tomcat

(7) 数据库 ------------- MySQL、Oracle、DB2

(8) 数据库分布式处理系统(集群、分库、分表) ---- Cobar (9) 容器引擎 ----------- Docker

(10) 系统日志管理 ------ Logstash

(11) 分布式系统监控 ---- Zabbix

(12) 其它 --------------- CA证书、密码键盘、防篡改系统…

高可用、高性能、可扩展、便于运维管理、符合系统检测要求…

Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍

Dubbo分布式服务框架实战

实现简易版的第三方支付系统(真实应用场景是技术教学的基础,重点体现应用架构和系统架构)

  • 结合简易版支付系统:

    讲解分布式系统的工程结构划分、安装部署、功能使用等(不讲解编码过程,直接提供系统源码) 讲解Dubbo分布式服务子系统的划分方式和划分原则 讲解Dubbo分布式服务接口的设计方式与设计原则 讲解Dubbo分布式服务框架的高级配置、服务治理 讲解如何基于消息最终一致性方式处理分布式事务
  • 基于简易版支付系统,实现高可用系统架构:

    分布式应用系统的架构技术选型、应用部署规划

    Zookeeper注册中心集群的安装、配置、使用

    ActiveMQ消息队列集群的安装、配置、使用

    Redis分布式缓存集群的安装、配置、使用

    FastDFS分布式文件系统的安装、配置、使用

    Nginx+Keepalived负载均衡集群的安装、配置、使用

    Tomcat集群的配置

    MySQL数据库集群、分库分表(垂直拆分、水平拆分)

    Dubbo扩展:Dubbox的新特性介绍、实战应用讲解

消息中间件在分布式系统中的作用介绍

消息中间件的定义

Message-oriented middleware (MOM) is software infrastructure focused on sending and receiving messages between distributed systems.

消息中间件是在分布式系统中完成消息的发送和接收的基础软件

消息中间件的作用

消息中间件可利用高效可靠的消息传递机制进行平台无关的数据交流,

并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息 排队模型,可以在分布式环境下扩展进程间的通信。

通过消息中间件,应用程序或组件之间可以进行可靠的异步通讯,从而 降低系统之间的耦合度,提高系统的可扩展性和可用性。

终结:解耦、异步

Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍

应用场景

通过使用消息中间件对Dubbo服务间的调用进行解耦

Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍

通过图一知道各个业务之间是有依赖关系的。

图二没有消息中间件,每个业务都依赖于交易服服这个业务,当成本服务出现问题的时候,后面的业务都会受到影响不能进行。

图三中引用的消息中间件,交易服务向消息中间件中发送消息,成本服务等通过消息中间件投递过来的消息,完成自己的任务,假如成本服务因为内部的错误执行失败,消息中间件还会重试重新发送消息,即使一直执行失败,也不会一直发送,会把数据保存起来,防止数据的丢失,每个服务之间都是独立的,没有依赖性,和交易服务没有直接的关系,从而解耦,任务一的失败也不会影响到业务二,从而异步。

消息中间件还有高并发和排序的功能,比如春节买票的软件,通过消息中间件知道谁先进来买票,谁后进来买票。

JMS(Java Message Service)

JMS是JavaEE中的一个关于消息的规范,是一套与具体平台无关的API。

  1. JMS元素

    JMS提供者------------------连接面向消息中旬件的, JMS接口的一个实现。

    JMS客户------------------生产或消费消息的基于Java的立用程序或対象。

    JMS生产者------------------差UN构建并发送消息的JMS客户。

    JMS消费者------------------接收消息的JMS客户。

    JMS消息------------------可以在JMS客戸之囘传递的数据的対象

    JMS队列------------------ 一个容纳那些别发送的等待阅读的消息的区域

    JMS主題------------------一个支持发送消息给多个订阅者的机制。
  2. JMS立用程序接口

    ConnectionFactory (连接工厂)------------------用户用来创建到JMS提供者的连接的被管对象。

    Connection (连接)------------------ 连接代表了应用程序和消息服努器之间的通信链路。

    Destination丨目标)------------------消息发布和接收的地点,或者是队列,或者是主题。

    MessageProducer (消息生产者)------------------由会话创建的对象,用于发送消息到自标。 MessageConsumer (消息消费者)------------------由会话创建的对象,用于接收发送目标的消息。

    Message (消息)------------------是在消费者和生产者之间传送的对象。

    Session (会话)------------------表示一个单线程的上下文,用于发送和接收消息。

JMS消息模型

  1. 点对点或队列模型

    Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍

    JMS 点对点队列模型特点:

    1、消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。

    2、消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 比如上面的m1不是被应用四消费,就是被应用3消费。

    3、Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

  2. 发布者/订阅者模型

    Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍

    JMS点对点队列模型特点

JMS 发布/订阅模型特点: 消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。

发布到topic的消息会被所有订阅者消费。

实现了JMS规范的消息中间件产品

ActiveMQ、RocketMQ、RabbitMQ、HornetQ … MQ

对比与选择

Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍的更多相关文章

  1. Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)

    文章目录 部署(单节点) 一.前期准备 二.对部署环境进行规划 创建数据库 调整公共配置文件 应用部署前期准备 部署服务 部署 Web 应用 部署定时任务 一. 工程结构 第三方支付系统架构 pay- ...

  2. Dubbo入门到精通学习笔记(三):持续集成管理平台之SVN版本管理系统的安装和使用

    文章目录 持续集成管理平台介绍 持续集成介绍 持续集成管理平台的组成 持续集成实践介绍 即将学习 SVN版本管理系统的安装 安装 Subversion + Apache 安装 jsvnadmin 简单 ...

  3. Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)

    文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...

  4. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  5. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  6. Dubbo入门到精通学习笔记(十八):使用Redis3.0集群实现Tomcat集群的Session共享

    文章目录 1.单节点访问http://192.168.1.61:8082/pay-web-boss/: 2.增加多一个消费者节点:192.168.1.62,以同样的方式部署pay-web-boss工程 ...

  7. Dubbo入门到精通学习笔记(十七):FastDFS集群的安装、FastDFS集群的配置

    文章目录 FastDFS集群的安装 FastDFS 介绍(参考:http://www.oschina.net/p/fastdfs) FastDFS 上传文件交互过程: FastDFS 下载文件交互过程 ...

  8. Dubbo入门到精通学习笔记(四):持续集成管理平台之Maven私有库和本地库的安装与配置

    文章目录 介绍 Maven私有库和本地库的安装与配置 Nexus安装 Nexus 配置(登录后) 介绍 如果构建的Maven项目本地仓库没有对应的依赖包,那么就会去Nexus私服去下载, 那么如果Ne ...

  9. Dubbo入门到精通学习笔记(一):Dubbo对传统工程进行改造、注册中心安装(Zookeeper-3.4.6)、工程结构优化

    文章目录 改造思路 样例工程:传统的单工程项目(edu-demo) 模型结构 思路 改成dubbo调用方式后的工程结构 部署环境规划 改造 愚公移山 迁移包 迁移页面: 迁移配置相关 新项目的主要作用 ...

随机推荐

  1. jQuery高级技巧——DOM操作篇

      页面加载之DOMReady事件 所谓domReady,也就是文档就绪,我们都知道,在操作dom时必须要在dom树加载完成后才能进行操作.如何检测DOM树已经构建完成,以下是一些实现的方式: 1.使 ...

  2. css3.0新属性效果在ie下的解决方案(兼容性)

    css3.0增加的新属性,如投影.渐变.旋转.圆角等等!这些新标准属性在ie6.ie7.ie8浏览器版本里得不到很好的支持,相信ie以后的新版本也会支持这些新属性的.目前ie6.ie7.ie8浏览器不 ...

  3. 34. Search for a Range

    题目: Given a sorted array of integers, find the starting and ending position of a given target value. ...

  4. [置顶] 分析Java死锁:分析jstack日志

    本文中我将展示一段垃圾代码,这段代码会产生死锁,这样围绕这段代码重点展示三种不同的方法来分析线程日志,从而得知什么地方有问题. 下面的讨论将用到两个类 Account 和 DeadlockDemo c ...

  5. unity3d Realistic eye shading 真实的眼睛渲染

    先放上效果 人皮都做了,当然要来研究下眼睛,眼睛要比人体皮肤简单一些(实时模拟人皮在此) 一看是不是很复杂 这是眼睛的解构,但是,我们只需要模拟出虹膜巩膜和角膜就能达到相当真实的眼睛 巩膜就是白眼球 ...

  6. 浙大pat1050题解

    1050. String Subtraction (20) 时间限制 10 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard Given two string ...

  7. 安装nginx和php

    安装nginx 1.安装依赖包 yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel perl pe ...

  8. Swift5 语言指南(八) 函数

    函数是执行特定任务的自包含代码块.您为函数指定了一个标识其功能的名称,此名称用于“调用”函数以在需要时执行其任务. Swift的统一函数语法足够灵活,可以表达从没有参数名称的简单C风格函数到具有每个参 ...

  9. python 集合取最大最小值

    #Create a set seta = , , , , , ]) #Find maximum value print(max(seta)) #Find minimum value print(min ...

  10. python-day8-赋值

    # x=10 #链式赋值# a=b=c=d=e=f=10# print(a,b,c,d,e,f) #增量赋值 # x=10# y='a'# temp=x# x=y# y=temp# print(x,y ...