微服务架构与Dubbo

news2024/10/6 22:27:24

一、微服务架构
微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。
分布式系统式若干独立系统的集合,但是用户使用起来好像是在使用一套系统。
和微服务对应的是单体式开发,即所有的功能打包在一个WAR包里,基本没有外部依赖,部署在一个JavaEE容器里,包括DO/DAO,Service,UI等所有逻辑。
微服务架构将庞大的单体应用程序分解成一套服务,使得每个服务可以由一个团队独立专注开发,每个微服务独立部署。开发人员需要基于RPC或者消息实现微服务之间的调用和通信
目前两种微服务架构解决方案:
(1)SpringBoot+SpringCloud
(2)Dubbo+ZooKeeper:Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。ZooKeeper用来实现服务的注册与发现和进行负载均衡。

补充:
(1)RPC(远程调用):
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
在这里插入图片描述
常用的RPC框架包括gRPC、Thrift、Dubbo等。

二、Dubbo
在这里插入图片描述
Dubbo 作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示,Dubbo 的服务消费者(Consumer)通过一系列的工作将请求发送给服务提供者(Provider)。
2.1 Dubbo性能高的原因
Dubbo是一个RPC框架,主要干的是远程过程(方法)调用,提升性能就要从最关键、最耗时的两个方面入手:序列化和网络通信。
序列化:Java网络开发中,本地的对象要在网络上传输,必须要实现Serializable接口,也就是必须序列化,序列化的方案很多:xml、json、二进制流…,其中效率最高的就是二进制流,而dubbo采用的就是效率最高的二进制。
网络通信:不同于HTTP需要进行7步走(三次握手和四次挥手),dubbo采用Socket通信机制,一步到位,提升了通信效率,并且可以建立长连接,不用反复连接,直接传输数据。
2.2 dubbo的三大核心功能
面向接口的远程方法调用智能容错和负载均衡服务自动注册和发现
在这里插入图片描述
"Container"就是Spring容器,dubbo和Spring是无缝对接的。"Provider"启动时加载到"Container"容器中,启动完服务后spring容器注册到"Registry"注册中心。"Consumer"启动时也需要加载到Spring容器中(未画出),服务启动完成后Spring容器也取"Registry"注册中心订阅(subscribe)服务,订阅完成后注册中心将地址列表(如果有变更,Registry将基于长连接推送变更数据给Provider)发送(notify)给Consumer,Consumer根据这些地址基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。Consumer和Provider在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心Monitor
说明:Consumer、Provider、Container和Register需要进行开发,Monitor是现成的,不需要进行开发。也可以没有Registry,Provider告诉Consumer地址,Consumer直接调用。
2.3 dubbo支持的协议
Consumer向Provider请求服务(invoke)时支持多种协议:Dubbo、hessian、rmi、http、thrift、redis等,dubbo官方推荐使用dubbo协议,默认端口20880。
使用dubbo协议,Spring配置文件加入:
<dubbo:protocol name=“dubbo” port=“20880”>

三、 dubbo调用服务方式–直连方式
3.1 直连方式(只包括Provider工程和Consumer工程)
实例:
1.新建项目作为Provider
(1)在IDEA中新建空项目,在空项目中新建maven项目,新建java和resources目录。
(2)在pom.xml文件中删除多余依赖,加入所需依赖:
**加粗样式**
在这里插入图片描述
(3)新建实体类User:
在这里插入图片描述
新建服务接口和实现类:
在这里插入图片描述
在这里插入图片描述
(4)新建dubbo的核心配置文件(Spring的xml),将建立的服务暴露出去。
在这里插入图片描述
补充说明:
<dubbo:application >标签中的name属性值即为服务名称。
dubbo:service标签的registry置为N/A表示使用不通过注册中心的直连方式。
(5)配置监听器
在这里插入图片描述
(6)配置项目的tomcat
(7)打包
注释掉下图中的标签:
在这里插入图片描述
打包项目到本地仓库:
在这里插入图片描述
取消注释:
在这里插入图片描述
2.新建项目作为Consumer
在这里插入图片描述
(1)与1的(1)相同
(2)与2的(2)的区别
加入下面依赖:
在这里插入图片描述
(3)配置dubbo核心配置文件
在这里插入图片描述
(4)配置spring的核心配置文件
在这里插入图片描述

(5)编写控制层代码
在这里插入图片描述
(6)修改web.xml
在这里插入图片描述
(7)创建页面
在这里插入图片描述
(8)部署tomcat,启功Comsumer和Provider服务
在这里插入图片描述

效果如下:
在这里插入图片描述
3.2 直连方式(将接口和实体bean单独放到一个接口工程里)
建立3个工程,分别是接口工程、Provider工程和Consumer工程,这也是官方推荐的工程。
接口工程是maven java工程。
(一)建立接口工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
新建实体类:
在这里插入图片描述
新建服务类
在这里插入图片描述
(二)新建Provider工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加依赖:
在这里插入图片描述
在这里插入图片描述
注意:还需要引入接口工程,并对接口工程里的接口具体实现
在这里插入图片描述
实现接口:
在这里插入图片描述
新建核心配置文件dubbo-userservice-provider.xml:
在这里插入图片描述
修改web.xml文件:
在这里插入图片描述
配置tomcat。
(三)新建Consumer工程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

也要导入接口工程:
在这里插入图片描述
新建核心配置文件dubbo-consumer.xml:
在这里插入图片描述
Consumer用到了.jsp页面,需要新建spring(SpringMVC)的核心配置文件applicationContext.xml:
在这里插入图片描述
新建控制层的类:
在这里插入图片描述
修改web.xml
在这里插入图片描述
创建页面
在这里插入图片描述
配置tomcat。
启动Comsumer和Provider服务,浏览器访问:
在这里插入图片描述
总结:Consumer直接引入接口工程,接口工程只有接口,而接口的具体实现在Provider项目(Provider引入接口工程实现)中。
问题:
直连方式无注册中心,Consumer直接向指定的Provider请求服务,不能保证服务最优化,没有考虑集群之间存在调度问题。

四、注册中心ZooKeeper
4.1 注册中心
对于服务提供方,需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
而且,对于服务提供方和服务消费者来说,还有可能兼具这两种角色,即需要提供服务,又需要消费服务,通过统一管理起来,可以有效地优化内部应用对服务发布/使用的流程的管理,服务注册中心可以通过特定协议来完成服务对外的统一。
Dubbo推荐Zookeeper注册中心。
Zookeeper是Apacahe Hadoop的子项目,是一个树形的目录结构,支持变更推送(服务有变更会被推送),适合作为Dubbo服务的注册中心。
下图为Zookeeper的管理方式:
在这里插入图片描述
4.2安装Zookeeper
下载官网:
zookeeper.apache.org
在这里插入图片描述
下载的压缩包:
在这里插入图片描述
解压文件:
在这里插入图片描述
在这里插入图片描述
打开conf目录:
在这里插入图片描述
复制zoo_sample.cfg文件为zoo.fcg
在这里插入图片描述
编辑zoo.cfg:
修改dataDir的值并在本地文件夹建立项目的空目录
在这里插入图片描述
在这里插入图片描述
双击执行bin目录下的zkServer.cmd:
在这里插入图片描述
在这里插入图片描述
五、dubbo调用服务方式–使用注册中心
(一)新建接口工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加依赖:

新建实体类:
在这里插入图片描述
接口类:
在这里插入图片描述

(二)新建Provider工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加依赖:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
新建接口实现类:
在这里插入图片描述
新建dubbo核心配置文件dubbo-zk-userservice-provider.xml:
在这里插入图片描述
在这里插入图片描述
(三)新建Consumer项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加依赖:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改核心配置文件:
在这里插入图片描述
新建SpringMVC核心配置文件applicationContext.xml:
在这里插入图片描述
修改web.xml:
在这里插入图片描述
新建控制层类:
在这里插入图片描述
在这里插入图片描述
配置tomcat。
打开Zookeeper,双击bin目录下的zkServer.sh:
在这里插入图片描述

启动Comsumer和Provider服务,浏览器访问:
在这里插入图片描述
六、版本号version
有的时候,想要改进Provider里的实现类的内容,或者增加新的实现类,为了区分,可以使用版本号。
(一)新建provider
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加依赖:
在这里插入图片描述
在这里插入图片描述
从上图中,可以看出引入的是之前创建的接口工程。
新建多个接口实现类:
在这里插入图片描述
在这里插入图片描述
新建核心配置文件dubbo-userservice-multi-provider.xml:
在这里插入图片描述
注意:不管一个接口是否有多个实现类,只要服务提供者向外暴露接口服务时指定了版本号,作为消费者引用远程接口服务的时候就必须执行版本号。

(二)创建Consumer
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加依赖:
在这里插入图片描述
在这里插入图片描述
新建核心配置文件dubbo-multi-consumer.xml:
在这里插入图片描述
如上图,dubbo引用多个标签,id不能相同,并写明不同的版本号。
新建SpringMVC的核心配置文件:
在这里插入图片描述
修改web.xml:
在这里插入图片描述
在这里插入图片描述
新建.jsp文件:
在这里插入图片描述
配置tomcat,并启动Comsumer和Provider服务。
在这里插入图片描述
七、关闭检查
dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早地发现问题,默认check=true。通过check=false关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于CRMEB 商城系统商业授权的那些事儿

现在&#xff0c;很多时候我们都会听到“授权”这个词&#xff0c;在CRMEB的商城系统产品中&#xff0c;商业授权也是一个重要环节&#xff0c;今天&#xff0c;我们就来了解一下关于CRMEB商城系统授权的那些事儿。 一、为什么要进行商业授权&#xff1f; 正版商业授权是对用户…

【Linux】详解如何利用共享内存实现进程间通信

一、共享内存&#xff08;Shared Memory&#xff09;的认识 共享内存&#xff08;Shared Memory&#xff09;是多进程间共享的一部分物理内存。它允许多个进程访问同一块内存空间&#xff0c;从而在不同进程之间共享和传递数据。这种方式常常用于加速进程间的通信&#xff0c;因…

软考130-上午题-【软件工程】-系统维护

一、系统维护概述 软件维护是软件生命周期中的最后一个阶段&#xff0c;处于系统投入生产性运行以后的时期中&#xff0c;因此不属于系统开发过程。 软件维护是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程&#xff0c;即软件在交付使用后对软件所做的一…

李沐-19 卷积层【动手学深度学习v2】

记录下关于权重下标变换的理解&#xff1a; 从原来的Wi,j到Wi,j,k,l是从二维到四维的过程&#xff0c;如下图所示 对全连接层使用平移不变性和局部性得到卷积层&#xff0c;这是卷积层的引入&#xff0c;下方Vi,j,a,b--->Va,b表示了平移不变性&#xff0c;给a,b限制在||内保…

C语言 【函数】

1.函数概述 函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能 函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用 2. 函数的使用 2.1 无参无返回值 #include <stdio.h>// 函数名…

光纤收发器的注意事项

光纤收发器有各种不同的类别&#xff0c;而实际使用中最受关注的是根据光纤收发器的不同类别&#xff1a;SC连接器光纤收发器和FC/ST连接器光纤收发器。 当使用光纤收发器连接到不同的设备时&#xff0c;必须小心使用不同的端口。 1.光纤收发器与100Base TX设备&#xff08;交…

IP定位技术原理详细阐述

IP定位技术原理主要基于IP地址与地理位置之间的关联&#xff0c;通过一系列的技术手段&#xff0c;实现对网络设备的物理位置进行精确或大致的定位。以下是对IP定位技术原理的详细阐述。 首先&#xff0c;我们需要了解IP地址的基本概念。IP地址是互联网协议地址的简称&#xff…

【leetcode】双指针算法技巧——滑动窗口

标题&#xff1a;【leetcode】双指针算法技巧——滑动窗口 水墨不写bug 正文开始&#xff1a; 滑动窗口介绍 滑动窗口是一种常用的算法技巧&#xff0c;用于解决一些涉及 连续子数组或子串 的问题。它的基本思想是 维护一个窗口&#xff0c;通过 在窗口内移动 来寻找满…

LeetCode刷题总结 | 图论3—并查集

并查集理论基础 1.背景 首先要知道并查集可以解决什么问题呢&#xff1f; 并查集常用来解决连通性问题。大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判…

Day18_学点儿设计模式_MVC和三层架构

0 优质文章 MVC与三层架构 什么是MVC&#xff1f;什么是三层架构&#xff1f; 三层架构与MVC详细讲解 MVC三层架构&#xff08;详解&#xff09; 1 MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写…

【Vue3】setup语法糖的使用

文章目录 setup简介使用vite-plugin-vue-setup-extend插件 指定组件名字 setup简介 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖 相比较普通的<script> ,它有以下优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。能够使用纯…

图论学习总结

文章目录 图论学习总结前言一、基础知识图的存储图的遍历 二、最短路多源最短路 F l o y d Floyd Floyd​ 算法例题及变形** e g 1 &#xff1a; S o r t i n g I t A l l O u t eg1&#xff1a;Sorting\ It\ All\ Out eg1&#xff1a;Sorting It All Out ( A c W i n g 343 /…

数字次数排序-第12届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第53讲。 数字次数排序&…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle&#xff0c;然后点击…

【数据结构】习题之消失的数字和轮转数组

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组&#xff0c;&#xff0c;也会分享三种思路&#xff0c;大…

P1278 单词游戏 简单搜索+玄学优化

单词游戏 传送门 题目描述 Io 和 Ao 在玩一个单词游戏。 他们轮流说出一个仅包含元音字母的单词&#xff0c;并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致。 游戏可以从任何一个单词开始。 任何单词禁止说两遍&#xff0c;游戏中只能使用给定词典中含有…

智慧电网数据可视化运维云平台解决方案

智慧电力概述 智慧电力是通过采用先进的大数据、云计算、物联网、边缘计算等技术&#xff0c;实现生产信息与管理信息的智慧&#xff0c;实现人、技术、经营目标和管理方法的集成&#xff0c;是企业管理思想的一个新突破。智慧电厂建设具备智能化、一体化、可观测、可互动、自…

【新知实验室 - TRTC 实践】音视频互动 Demo、即时通信 IM 服务搭建

一、TRTC 初识 TRTC 是什么 TRTC&#xff08;Tencent RTC&#xff09;腾讯实时音视频&#xff0c;源自于 QQ 音视频团队&#xff0c;是基于 QQ 音视频多年来的音视频技术积累&#xff0c;位于腾讯云的 RTC 云服务。TRTC 支持腾讯会议、企业微信直播、微信视频号、腾讯云课堂、…

虚拟机vm桥接模式linux(centos,ubuntu)联网

台式机网线 查看宿主机网络 编辑虚拟机—>虚拟网络编辑器–>更改设置 选择&#xff0c;确定 进入linux系统 输入ip addr找到自己的网卡 我的是eno16777736 centos&#xff1a; 编辑 HWADDR"00:0C:29:54:CE:B8" TYPE"Ethernet" BOOTPROTO"…

Python处理海量大数据库之fugue使用详解

概要 在大数据时代,处理海量数据是一项重要的任务。Python作为一种流行的编程语言,有许多优秀的库和工具可以帮助开发者处理大规模数据。其中,Fugue库是一个强大的工具,可以帮助开发者构建分布式数据处理流水线。本文将介绍Fugue库的安装方法、特性、基本功能、高级功能、…