Dubbo——微服务框架(单体式->分布式->微服务)
是什么?
Dubbo是阿里巴巴开源的基于Java的高性能RPC(一种远程调用)分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。;
每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中;
简单的来说,Dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只是在分布式的时候才有Dubbo这样的分布式服务框架的需求;
并且本质上是个远程服务调用的分布式框架(告别Web Service模式中的Wsdl,以服务者与消费者的方式在Dubbo上注册)
Dubbo官网:Apache Dubbo
核心组件
-
Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
-
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
-
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
工作原理

-
生产者启动Dubbo容器,生产服务对象
-
生产者把生成的服务发布到注册中心
-
消费者向注册中心订阅服务,把发布的服务,下载到本地缓存,订阅服务后,本地缓存会自动更新生产者发布的服务
-
当消费者需要调用服务时,按照RPC协议要求,向生产者发起服务的调用
-
生产者把返回的对象交给Dubbo容器进行序列化处理后返回给消费者
-
消费者接收到返回的数据后对其反序列化,得到Java对象
-
监视器对服务性能做监控统计
注意:注册中心和监视器都不是必须的,可以缺少。如:缺少注册中心后消费者就不能自动更新生产者发布的服务信息,当生产者信息发生改变时,消费者很可能调用服务失败。比较出名的注册中心有zookeeper,eruka
我们的生产者服务在注册中心注册并被消费者拉取到之后,该生产者会在本地做一个缓存,因此即使后续注册中心挂掉了,只要之前消费者是调用过该服务的,那么消费者依旧可以在本地缓存中拉取到生产者服务;
为什么?
系统架构的演变史
B/S软件架构的出现标志着web开发时代的到来,当初应用都是比较简单,功能单一,访问量少。这些因素就决定了当年的应用结构是比较简单的

随着家用电脑的普及,互联网的兴起,上网的人越来越多,逐渐显得简单的架构无法支撑应用程序的正常运行,软件科学家们就开始探讨如何去设计软件的架构,最初比较突出的两大问题在于1台服务器无法保证应用程序和数据库程序两个老虎的性能,科学家就提出把应用程序和数据库程序分别安装在2台服务器中,通过网络来进行数据传输,再通过应用程序中加本地缓存的方式来解决不常变动数据的查询性能问题,此时出现了最早期的分布式系统架构

伴随着大数据时代的到来,这种简单是分布式系统架构也开始扛不住了,服务器宕机,成了常见的事情,科学家又开始探索,如何提高系统的稳定性和可用性,于是提出了,应用服务集群和数据库服务器集群,通过负载均衡的方式来维持系统的高可用和稳定性,以应对这个时代的高并发

在某些业务中,关系型数据库明显不适合,如:点赞,评论,全文检索等。这些业务场景使用关系型数据库来完成会严重的影响数据库的性能,科学家们又拓展出非关系型数据库(NoSQL),用于项目中的某个特殊的业务场景,去弥补关系型数据的短板,此时这样的系统架构基本满足当前时代下的需求

微服务应用演变史
JavaEE应用三层架构,取得巨大成功后,在很长的一段时间内,都没有出现过问题,直到大数据时代的到来某些数据量巨大的公司开始遇到了新的挑战。某些业务方法频繁调用,需要配置大量的资源,某些业务方法很少调用,只需配置少量资源,如:商城应用中的服务

在商城的应用中,订单服务,积分服务,商品服务的使用频率远远大于其他服务,如果仅仅通过布置多台服务器的方式来缓解压力的造成的问题,此时会造成服务器成本的大量提升,并且资源得不到充分的利用,造成浪费,遇到某个关系型数据库不好处理的业务场景,在技术选择的时候也要充分去考虑系统稳定和冲突问题,于是科学家们又探索出基于服务的分布式应用架构,服务拆分越细,数量就越多,这种应用架构就是当下最热门的微服务应用架构。目前比较成熟,社区活跃的微服务框架有Dubbo,SpringCloud

-
生产者:提供业务逻辑实现的角色,对外提供服务
-
消费者:调用生产者提供的服务,使用其业务功能
如:订单服务器和商品服务分别对外提供了操作订单和商品的业务功能,此时它们都属于生产者,但是订单服务在查询订单的时候需要去获取当前订单有哪些商品,因此订单服务就要调用商品服务提供的功能,所以订单服务又是商品服务的消费者,表现层相关组件直接生产者提供的服务,因此它们都是消费者。服务间的调用都是使用RPC远程调用协议
微服务应用的优势
-
降低系统的耦合度
-
服务器之间都是相互独立,互补干扰,此时每个服务都能更好的选择符合业务场景的技术
-
充分使用服务器的硬件资源,避免造成不必要的浪费
-
降低维护成本和难度
-
提高应用系统的稳定性
分布式和微服务的区别
分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用
简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。
RPC协议调用原理
序列化和反序列化
序列化:把Java对象转变为二进制数据(需要在本地磁盘存储或者需要在网络中进行传输);
反序列化:把二进制数据转变为Java对象;
流程

RPC远程调用底层的核心技术就是序列化和反序列化;
1.生产者发布服务;
2.消费者按照RPC协议要求生产者发布的服务;
3.生产者执行方法得到返回的对象;
4.生产者把对象序列化后返回给消费者;
5.消费者接收到数据后对其反序列化,得到Java对象;
Dubbo项目拆分
项目结构

从以上图中我们不难看出,我们至少需要创建5个项目
-
product-api:定义商品相关的业务方法
-
member-api:定义会员相关的业务方法
-
product-sever:商品服务的提供者,同时也是会员服务的消费者,底层会去调用会员服务的相关功能
-
member-sever:会员服务的提供者,提供会员业务方法的实现
-
website:商品服务的消费者,使用商品服务提供的业务功能
Zookeeper
zookeeper的功能非常多,是大数据技术领域的核心组件之一,但是我们这里用不到那么多的功能,仅仅只是作为注册中心来使用一下
注意:没有注册中心的情况下,Dubbo也是可以正常的运行的
相关文章:
Dubbo——微服务框架(单体式->分布式->微服务)
是什么? Dubbo是阿里巴巴开源的基于Java的高性能RPC(一种远程调用)分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,它提供了三大核心能力:面向接口的远程…...
【Spring Cloud】Feign传递HttpServletRequest
这里我的业务场景是:在请求头中获取服务端登录时传给客户端的token,并且客户端将token放在请求头中。以至于我需要在参数传递上传入HttpServletRequest。如果你非要向我一样传入HttpServletRequest对象那么就往下看,当然你如果可以改成其他参…...
烟火识别智能监测系统 yolov5
烟火识别智能监测系统基于pythonyolov5网络模型算法智能分析技术,烟火识别智能监测算法模型对现场画面进行实时分析,发现现场出现烟火立即抓拍实时告警。我们选择当下卷积神经网络YOLOv5来进行火焰识别检测。6月9日,Ultralytics公司开源了YOL…...
【Python入门】Python循环语句(while循环的基础语法)
前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…...
JS中 Math 和 Number 内置对象常用的一些方法
JS中 Math 和 Number 内置对象常用的一些方法 Math.abs(num)Math.ceil(num)Math.floor(num)Math.max(num1, num2, ... , numN)Math.min(num1, num2, ... , numN)Math.pow(base, exponent)Math.random()Math.round(num)Math.sqrt(num)Number.toFixed(digits)Number.toString(rad…...
Docker的使用 (1.什么是docker)
前言 这个系列是我自己学习使用docker的记录和分享,作为一名开发人员,你需要了解这个东西并且学会它的简单使用,但是作为一名开发而不是运维,不要花过多的时间去深究它的原理,而是把它当作一个工具即可 docker Docke…...
ENVI无缝镶嵌Seamless Mosaic工具镶嵌、拼接栅格遥感影像(所有图像需要含有地理信息)
本文介绍基于ENVI软件,利用“Seamless Mosaic”工具实现栅格遥感影像无缝镶嵌的操作。 在ENVI软件中通过“Pixel Based Mosaicking”工具实现栅格遥感影像的镶嵌的方法。这一工具虽然可以对不含有地理参考信息的遥感影像进行镶嵌,但是其镶嵌的整体效果并…...
Java-API简析_java.lang.Integer类(基于JDK1.8)(浅析源码)
【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130730986 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…...
WebSocket的那些事(3-STOMP实操篇)
目录 一、序言二、STOMP详解1、STOMP简单介绍2、STOMP协议内容3、使用STOMP的好处 三、代码示例1、Maven依赖2、开启WebSocket消息代理3、控制器4、前端页面greeting.html 四、测试1、连接服务端2、发送消息 五、STOMP消息传播流程六、结语 一、序言 上节中我们在 WebSocket的…...
《花雕学AI》WeTab+ChatGPT:让浏览器变成你的智能助手
引言: 浏览器是我们日常使用的最重要的工具之一,它可以帮助我们获取信息、娱乐、学习、工作等。但是,传统的浏览器往往不能满足我们的个性化需求,也不能给我们提供智能化的服务。那么,有没有一种浏览器可以让我们的体…...
MySQL 字段为 NULL 的5大坑,大部分人踩过
数据库字段允许空值(null)的问题,小伙伴你遇到过吗? 在验证问题之前,我们先建一张测试表及测试数据。 构建的测试数据,如下图所示: 有了上面的表及数据之后,我们就来看当列中存在 NULL 值时,究…...
Android SystemUI篇(二)
目录 一、简介 二、SystemUI的架构 三、SystemUI的主要组件 四、SystemUI的主要功能 五、SystemUI的自定义和定制 六、SystemUI的性能优化 一、简介 SystemUI是Android操作系统的一个关键组件,主要负责管理和提供用户界面的核心元素,如状态栏、导航…...
第六讲:“声音”写具体
爸爸又打呼了!“呼噜一呼噜一像一股巨浪腾空而起,以每秒八十米的速度向上冲刺,力图掀开天花板,掀翻整座住宅楼;“呼噜一一呼噜一-”,像一台轰鸣的坦克在穿行,床垫在抖动,吊灯在摇晃,墙灰在簌籁(…...
Unity 向量
向量的加减法本文就不再赘述了,本文侧重介绍脚本中的向量写法 一、向量的数乘 定义:k(x,y,z)(kx,ky,kz) 若向量长度为L,k取1/L,就恰好能让原向量长度变成1,变成了单位向量,这称为向量的标准化 。 由于长度…...
Apache Tomcat AJP协议文件读取与包含
永远也不要忘记能够笑的坚强,就算受伤,我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应用服务器,深受Java爱好者的喜爱,并得到了部分软件开发商的…...
实验10 人工神经网络(1)
1. 实验目的 ①理解并掌握误差反向传播算法; ②能够使用单层和多层神经网络,完成多分类任务; ③了解常用的激活函数。 2. 实验内容 ①设计单层和多层神经网络结构,并使用TensorFlow建立模型,完成多分类任务…...
OPPO关停哲库业务,工程师造芯何去何从?
5月12日(上周五),新浪科技从OPPO处了解到,OPPO将终止ZEKU业务。3000多人团队突然原地解散,网上唏嘘声一片! ZEKU最初成立于2019年,是OPPO的全资子公司,欧加集团百分之百注资成立。总…...
面试被问麻了....
前几天组了一个软件测试面试的群,没想到效果直接拉满,看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经,感觉非常有参考价值,于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋,打开…...
AspNetCore中的配置文件详解
1 配置文件 程序开发中,有些信息是要根据环境改变的,比如开发环境的数据库可能是本地数据,而生产环境下需要连接生产数据库,我们需要把这些信息放到程序外面,在程序运行时通过读取这些外部信息实现不改变程序代码适应…...
实时更新天气微信小程序开发
1.新建一个天气weather项目 2.在app.json中创建一个路由页面 当我们点击保存的时候,微信小程序会自动的帮我们创建好页面 3.在weather页面上书写我们的骨架 4.此时我们的页面很怪,因为没有给它添加样式和值。此时我们给它一个样式。(样式写在…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
