微服务架构与Dubbo

一、微服务架构
微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。
分布式系统式若干独立系统的集合,但是用户使用起来好像是在使用一套系统。
和微服务对应的是单体式开发,即所有的功能打包在一个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关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

No spring.config.import property has been defined

运行Springcloud项目出现下面错误&#xff1a; Description: No spring.config.import property has been defined Action: Add a spring.config.importnacos: property to your configuration. If configuration is not required add spring.config.importoptional:nac…

C 排序算法

冒泡排序 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 过程演示&…

校园综合服务平台V3.9.2 源码修复大部分已知BUG

校园综合服务平台&#xff0c;版本更新至V3.9.1 &#xff0c;源码功能强大&#xff0c;ui 精美&#xff0c; 功能包含但不限于校园跑腿&#xff0c;外卖&#xff0c;组局&#xff0c;圈子&#xff0c;商城&#xff0c;抽奖&#xff0c;投票&#xff0c;团购&#xff0c;二手市场…

ROS学习笔记(12)AEB和TTC的实现

0.前提 在自动驾驶领域有许多关于驾驶安全的措施AEB和TTC就是为了驾驶安全而设计出来的。在这篇文章中我会讲解我对AEB和TTC算法的一些理解。本期ROS学习笔记同时也是ros竞速小车的学习笔记&#xff0c;我会将我的部分代码拿出来进行讲解&#xff0c;让大家更好的理解ttc和aeb…

Zabbix监控系统

一.监控软件的作用: 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果和网站的健康状态 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 对系统不间断实时监控实时反馈系统当前状态…

挣钱新玩法,一文带你掌握流量卡推广秘诀

手机流量卡推广项目是什么&#xff1f;听名字我相信大家就已经猜出来了&#xff0c;就是三大运营商为了开发新用户&#xff0c;发起的有奖推广活动&#xff0c;也是为了长期黏贴用户。在这个活动中&#xff0c;用户通过我们的渠道&#xff0c;就能免费办理低套餐流量卡&#xf…

链表OJ - 7(链表的回文结构)

题目描述&#xff08;来源&#xff09; 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。…

【SVG】从零开始绘制条形图

效果图 定义背景色和坐标轴颜色 :root {--cord-color: #2be7ca; }body {background-color: #000;}画坐标轴 画X轴 <!-- 坐标轴 --> <g id"cordinate"><!-- x轴 --><line x1"50" y1"600" x2"900" y2"600&q…

同城货运系统的开发与货运搬家软件的技术性探讨和市场分析

一、市场前景展望 随着城市化进程的加快和电商物流的蓬勃发展&#xff0c;同城货运市场展现出了巨大的潜力。尤其是在快节奏的生活环境中&#xff0c;个人和企业对于快速、便捷、可靠的货运搬家服务需求日益增长。同城货运系统与货运搬家软件作为连接货主与货运司机的桥梁&…

Opengl 坐标系统概述

1.谈到opengl 坐标系统 首先要知道三个坐标转换矩阵&#xff0c;模型矩阵&#xff0c;观察矩阵&#xff0c;投影矩阵。 模型矩阵作用在将以物体中心为原点的坐标系统&#xff0c;转换到世界坐标。 观察矩阵作用在将世界坐标系统转换到观察坐标系统 投影矩阵作用在将观察坐标…

2024年苹果审核4.3相关问题综述

苹果审核中的4.3问题是开发者关注的焦点之一&#xff0c;本文对此进行了综述&#xff0c;总结了不同情况下的处理方式和优化策略。 第一种4.3 该类问题常见于代码或UI的重复率过高&#xff0c;苹果会直接拒绝应用。开发者需注意避免此类情况的发生&#xff0c;特别是在更新应…

亚信安全数据安全运营平台DSOP新版本发布 注入AI研判升维

在当今快速发展的数字经济时代&#xff0c;企业对于数据的依赖日益加深&#xff0c;数据安全已成为企业的生命线。亚信安全推出数据安全运营平台DSOP全新版本&#xff0c;正是为满足企业对数据安全的高度需求而设计。这款平台以其卓越的能力和技术优势&#xff0c;为企业的数据…

逆向案例二十七——某笔网登录接口非对称加密算法RSA,涉及全扣代码,浏览器断点调试,和补环境

网址&#xff1a;aHR0cHM6Ly93d3cuZmVuYmkuY29tL3BhZ2UvaG9tZQ 点击账号密码登录&#xff0c;找到登陆的包&#xff0c;发现password进行了加密。 顿时&#xff0c;老生常谈&#xff0c;开始搜索&#xff0c;找到最有嫌疑的加密代码。进行搜索&#xff0c;进入js文件后&#x…

云计算:Linux 部署 OVS 集群(服务端)实现VXLAN

目录 一、实验 1.环境 2.Linux 部署 OVS 集群&#xff08;服务端&#xff09; 3.Linux 部署VXLAN 一、实验 1.环境 (1) 主机 表1 宿主机 主机架构软件IP备注ovs_controller控制端192.168.204.63 1个NAT网卡 &#xff08;204网段&#xff09; ovs_server01服务端 Openv…

康谋技术 | 深入探讨:自动驾驶中的相机标定技术

随着自动驾驶技术的快速发展&#xff0c;多传感器的数据采集和融合可以显著提高系统的冗余度和容错性&#xff0c;进而保证决策的快速性和正确性。在项目开发迭代过程中&#xff0c;传感器标定扮演着至关重要的角色&#xff0c;它位于数据采集平台与感知融合算法之间&#xff0…

Python学习之-typing详解

前言&#xff1a; Python的typing模块自Python 3.5开始引入&#xff0c;提供了类型系统的扩展&#xff0c;能够帮助程序员定义变量、函数的参数和返回值类型等。这使得代码更易于理解和检查&#xff0c;也方便了IDE和一些工具进行类型检查&#xff0c;提升了代码的质量。 typ…

Unity之OpenXR+XR Interaction Toolkit快速监听手柄任意按键事件

前言 当我们开发一个VR时,有时希望监听一个手柄按键的点击事件,或者一个按钮的Value值等。但是每次有可能监听的按钮有不一样,有可能监听的值不一样,那么每次这么折腾,有点累了,难道就没有一个万能的方法,让我可以直接监听我想要的某个按钮的事件么? 答案是肯定的,今…

【结构型模式】代理模式

一、代理模式概述 代理模式的定义-意图&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制来原对象的访问(对象结构型模式)。某个客户端不能直接操作到某个对象&#xff0c;但又必须和那个对象有所互动。 代理模式分析&#xff1a; 1.引入一个新的代…

Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?

虽然 HTTP3/QUIC 和 cronet 跟 Flutter 没太大关系&#xff0c;只是最近在整理 Flutter 相关资料时发现还挺多人不了解&#xff0c;就放到一起聊聊。 本篇也是主要将现有资料做一些简化整合理解。 前言 其实为什么会有 HTTP3/QUIC &#xff1f;核心原因还是现有协议已经无法满…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(一主多从)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本&#xff0c;出现了一个问题&#xff0c;就是在pod中访问百度网站&#xff0c;大…