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.此时我们的页面很怪,因为没有给它添加样式和值。此时我们给它一个样式。(样式写在…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
