当先锋百科网

首页 1 2 3 4 5 6 7

什么是中间件?

中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。

举例:
1,RMI(Remote Method Invocations, 远程调用)
2,Load Balancing(负载均衡,将访问负荷分散到各个服务器中)
3,Transparent Fail-over(透明的故障切换)
4,Clustering(集群,用多个小的服务器代替大型机)
5,Back-end-Integration(后端集成,用现有的、新开发的系统如何去集成遗留的系统)
6,Transaction事务(全局/局部)全局事务(分布式事务)局部事务(在同一数据库联接内的事务)
7,Dynamic Redeployment(动态重新部署,在不停止原系统的情况下,部署新的系统)
8,System Management(系统管理)
9,Threading(多线程处理)
10,Message-oriented Middleware面向消息的中间件(异步的调用编程)
11,Component Life Cycle(组件的生命周期管理)
12,Resource pooling(资源池)
13,Security(安全)
14,Caching(缓存)

中间件特点:
也许很难给中间件一个严格的定义,但中间件应具有如下的一些特点:
(1)满足大量应用的需要
(2)运行于多种硬件和OS平台
(3)支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互
(4)支持标准的协议
(5)支持标准的接口

常用的中间件技术

在这里插入图片描述
常见的消息中间件
ActiveMQ、RabbitMQ、Kafka、RocketMQ

单体架构特点:
一个请求由一个系统,一个JVM来完成。
在这里插入图片描述

在企业开发的中,大部分的初期架构都采用的是单体架构的模式进行架构,而这种架构的典型的特点:就是把所有的业务和模块,源代码,静态资源文件等都放在一个一工程中,如果其中的一个模块升级或者迭代发生一个很小变动都会重新编译和重新部署项目。 这种的架构存在的问题就是:
1:耦合度太高
2:运维的成本过高
3:不易维护
4:服务器的成本高
5:以及升级架构的复杂度也会增大

分布式架构特点:
就是一个请求由服务器端的多个服务(服务或者系统)协同处理完成

和单体架构不同的是,单体架构是一个请求发起jvm调度线程(确切的是tomcat线程池)分配线程Thread来处理请求直到释放,而分布式是系统是:一个请求是由多个系统共同来协同完成,jvm和环境都可能是独立。
在这里插入图片描述
存在问题:
1:学习成本高,技术栈过多
2:运维成本和服务器成本增高
3:人员的成本也会增高
4:项目的负载度也会上升
5:面临的错误和容错性也会成倍增加
6:占用的服务器端口和通讯的选择的成本高
7:安全性的考虑和因素逼迫可能选择RMI/MQ相关的服务器端通讯。

好处:
1:服务系统的独立,占用的服务器资源减少和占用的硬件成本减少,确切的说是:可以合理的分配服 务资源,不造成服务器资源的浪费
2:系统的独立维护和部署,耦合度降低,可插拔性。
3:系统的架构和技术栈的选择可以变的灵活(而不是单纯的选择java)
4:弹性的部署,不会造成平台因部署造成的瘫痪和停服的状态。

基于消息中间件的分布式系统的架构

消息中间件的是:
1.利用可靠的消息传递机制进行系统和系统直接的通讯
2.通过提供消息传递和消息的排队机制,它可以在分布式系统环境下扩展进程间的通讯。
在这里插入图片描述

消息队列应用场景

1:跨系统数据传递
2:高并发的流量削峰
3:数据的分发和异步处理
在这里插入图片描述

4:大数据分析与传递
5:分布式事务
比如你有一个数据要进行迁移或者请求并发过多的时候,比如你有10W的并发请求下订单,我们可以在这些订单入库之前,我们可以把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。

消息中间件的核心组成部分:
1:消息的协议
2:消息的持久化机制
3:消息的分发策略
4:消息的高可用,高可靠
5:消息的容错机制

消息分发策略

在这里插入图片描述
在这里插入图片描述

RabbitMq的安装

RabbitMQ是一个开源的遵循AMQP协议实现的基于Erlang语言编写,支持多种客户端(语言)。用于在分布式系统中存储消息,转发消息,具有高可用,高可扩性,易用性等特征。

RabbitMQ是采用Erlang语言开发的,所以系统环境必须提供Erlang环境,第一步就是安装Erlang。
在这里插入图片描述
1.安装Erlang:
wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
rpm -Uvh erlang-solutions-2.0-1.noarch.rpm
yum install -y erlang
erl -v
2.安装socat:
yum install -y socat
3.安装rabbitmq:
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.13/rabbitmq-server-3.8.13-1.el8.noarch.rpm
rpm -Uvh rabbitmq-server-3.8.13-1.el8.noarch.rpm
启动服务:systemctl start rabbitmq-server
查看服务状态:systemctl status rabbitmq-server
停止服务:systemctl stop rabbitmq-server
开机启动服务:systemctl enable rabbitmq-server
4.默认情况下,rabbitmq是没有安装web端的客户端插件,需要安装才可以生效
rabbitmq-plugins enable rabbitmq_management

一定要记住,在对应服务器(阿里云,腾讯云等)的安全组中开放15672的端口
打开浏览器访问:http:ip:15672
rabbitmq有一个默认账号和密码是:guest 默认情况只能在localhost本机下访问,所以需要添加一个远程登录的用户。
5.关于用户的操作:
新增用户:rabbitmqctl add_user admin admin
设置用户分配操作权限:rabbitmqctl set_user_tags admin administrator
为用户添加资源权限:rabbitmqctl.bat set_permissions -p / admin “." ".” “.*”

用户级别:

  • administrator 可以登录控制台、查看所有信息、可以对rabbitmq进行管理
  • monitoring 监控者 登录控制台,查看所有信息
  • policymaker 策略制定者 登录控制台,指定策略
  • managment 普通管理员 登录控制台

rabbitmqctl add_user 账号 密码
rabbitmqctl set_user_tags 账号 administrator
rabbitmqctl change_password Username Newpassword 修改密码
rabbitmqctl delete_user Username 删除用户
rabbitmqctl list_users 查看用户清单
rabbitmqctl set_permissions -p / 用户名 “." ".” “." 为用户设置administrator角色
rabbitmqctl set_permissions -p / root ".
” “." ".

Docker安装RabbitMQ

1.虚拟化容器技术—Docker的安装
(1)yum 包更新到最新:yum update
(2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的:yum install -y yum-utils device-mapper-persistent-data lvm2
(3)设置yum源为阿里云:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4)安装docker:yum install docker-ce -y
(5)安装后查看docker版本: docker -v
(6) 安装加速镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://0wrdwnn6.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.Docker常见的命令:

启动docker:

systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看docker状态:
systemctl status docker
开机启动:
systemctl enable docker
systemctl unenable docker
查看docker概要信息
docker info
查看docker帮助文档
docker --help
3.Docker安装RabbitMq:
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management