Dubbo——微服务框架(单体式->分布式->微服务)

news2024/11/29 5:36:40

是什么?

Dubbo是阿里巴巴开源的基于Java的高性能RPC(一种远程调用)分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。;

每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中;

简单的来说,Dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只是在分布式的时候才有Dubbo这样的分布式服务框架的需求;

并且本质上是个远程服务调用的分布式框架(告别Web Service模式中的Wsdl,以服务者与消费者的方式在Dubbo上注册)

Dubbo官网:Apache Dubbo

核心组件

  • Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.

  • RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

工作原理

 

  1. 生产者启动Dubbo容器,生产服务对象

  2. 生产者把生成的服务发布到注册中心

  3. 消费者向注册中心订阅服务,把发布的服务,下载到本地缓存,订阅服务后,本地缓存会自动更新生产者发布的服务

  4. 当消费者需要调用服务时,按照RPC协议要求,向生产者发起服务的调用

  5. 生产者把返回的对象交给Dubbo容器进行序列化处理后返回给消费者

  6. 消费者接收到返回的数据后对其反序列化,得到Java对象

  7. 监视器对服务性能做监控统计

注意:注册中心和监视器都不是必须的,可以缺少。如:缺少注册中心后消费者就不能自动更新生产者发布的服务信息,当生产者信息发生改变时,消费者很可能调用服务失败。比较出名的注册中心有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也是可以正常的运行的

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

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

相关文章

别让你的云端“瘫痪”——教你如何优化云平台性能测试

目录 引言 目的 测试指标 系统性能指标 资源指标 中间件指标 数据库指标 稳定性指标 批量处理指标 可扩展性指标 可靠性指标 性能测试的过程 测试计划 性能测试项目检测与控制 测试分析 测试设计 测试执行 测试完成 性能分析 性能分析的前提 性能分析的流…

一篇文章让你轻松通过佛科院的电子线路CAD考试——Altium Designer 14原理图设计与PCB设计(叶林朋著)

第一章 考试大纲 通过多次作业练习,我得出了完成一个完整的考试流程: 首先先创建PCB工程,查找一下元件,看一下哪些元件需要我们自己画创建元件集成库,画原理图元件和封装导入所有元件后,按照题目所给的图进…

Springboot源码:自动装配流程解析

前言 前面在写业务框架后,由于项目依赖的Spring IOC,单将该项目install后,在其它项目引入时,会找不到所依赖的Bean。所以利用Springboot的自动转配,在项目启动时加载Bean,并注册到IOC容器中。 Springboot…

node笔记_连接mysql编写js脚本的crud

文章目录 ⭐前言⭐mysql的api依赖库⭐建立数据库连接⭐query执行sql语句💖 create 新增table数据库表💖 insert 插入表数据插入单条数据插入多条数据 💖 select 查询数据💖 delete 删除表数据删除单条数据删除多条数据 ⭐ 结束 ⭐…

prometheus实战之五:飞书通知告警

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《prometheus实战》系列链接 prometheus实战之一:用ansible部署prometheus实战之二:使用常见指标prometheus实战之三:告警…

Day968.如何开启一个遗留系统现代化项目? -遗留系统现代化实战

如何开启一个遗留系统现代化项目? Hi,我是阿昌,今天学习记录的是关于如何开启一个遗留系统现代化项目?的内容。那如何启动一个遗留系统现代化项目。 一、项目背景 说来有点唏嘘,国内遗留系统的重灾区,恰恰…

MongoDB概念和操作

一、相关概念 在mongodb中最基本的概念为:文档、集合、数据库 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持prima…

Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

在 《Cordova webapp实战开发:(4)Android环境搭建》中我们搭建好了开发环境,也给大家布置了调用插件的预习作业,做得如何了呢?今天我们来学一下如何自己从头建立一个Andorid下的cordova插件。 本次练习你能…

【大腹太卷】一篇文章带你了解校招的神秘面纱

校招求职复盘 写在前面方向确定前置工作就业信息获取简历制作简历投递 笔面试工作测评笔试面试八股文自我介绍项目相关HR面试反问环节 Offer选择写在后面 写在前面 2023届应届生,去年的时候参加了校招,一路走来,感慨良多,特此记录…

蚊香液、蚊香片、蚊香盘的优缺点

夏天来了,蚊子也出来活动了,又到了消灭蚊子的季节。     蚊子是凭借人所呼出的二氧化碳和带气味的气体,来定位人的位置,进而叮咬人的皮肤。     蚊子吸人血,主要是利用血液里的胆固醇、B族维生素,促进蚊…

OSPF综合实验(第一部分)

目录 要求 确定广播域的个数 分配网段 配置路由器IP地址-优先公网配通 配置MGRE部分 拓扑结构: 要求 1、R4为ISP,其上只能配置IP地址,R4与其他所有直连设备间使用公有IP 2、R3~R5/6/7为MGRE环境,R3为中心站点 3、整个OSPF环境I…

《编程思维与实践》1072.下一位妙数

《编程思维与实践》1072.下一位妙数 题目 思路 思路与最小不重复数基本一致,从最高位开始找到第一个出现9的位置,让其加1,后面全变为0即可. 只需要再加一个判定条件:不能被9整除. 由数学知识,一个数不能被9整除当且仅当各位数之和不能被9整除. 这里给出简单的证明: 不妨以三位…

Linux-初学者系列7_shell编程

在进行服务器集群管理时,需要编写shell程序来进行服务器管理。 shell是一个命令行解释器,他会为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户用shell启动、挂起、停止和编写一些程序。 Linux-初学者系列7_shell编程…

简单记录一下spi的四种mode

0 前言 最近在学习SPI&#xff0c;刚开始接触四种mode的时候&#xff0c;还有点懵&#xff0c;也是搜了好几个博客&#xff0c;才算搞懂&#xff0c;特此记录下&#xff0c;防止下次又要翻好几篇博客才找到答案 >_< 1 四种mode的组成单元 这四种mode是由时钟极性和时钟…

Leetcode刷题之反转链表Ⅱ

业精于勤而荒于嬉&#xff0c;行成于思而毁于随。 ——韩愈目录 前言&#xff1a; &#x1f341;一.反转链表Ⅱ &#x1f352;1.left和right中间链表反转&#xff0c;再把反转链表和剩下的链接起来 &#x1f5fc;2.left和right中间链表头插 题目描述…

「实验记录」MIT 6.824 Raft Lab2A Leader Election

#Lab2A - Leader Election I. SourceII. My CodeIII. MotivationIV. SolutionS1 - 角色转换S2 - 发起 RequestVote 拉票请求S3 - 收到 RequestVote 的不同反应S4 - 发送 AppendEntries 心跳包S5 - 收到 AppendEntries 的不同反应S6 - defs.go约定俗成和GetState() V. Result I.…

The service already exists!

文章目录 项目场景&#xff1a;原因分析&#xff1a;解决方案&#xff1a; 项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 在给一位同学安装MySQL时报了这个错&#xff0c;我知道是她之前安装过但是没删干净的原因 但是我把Everything和注册表都查…

五、RGB实验(正点原子达芬奇Pro代码>>ZYNQ 7020代码移植)

RGB实验(正点原子达芬奇Pro代码&#xff1e;&#xff1e;ZYNQ 7020代码移植) 文章目录 RGB实验(正点原子达芬奇Pro代码&#xff1e;&#xff1e;ZYNQ 7020代码移植)前言一、本文目标二、移植步骤1.建立文件2.建立v文件1.lcd_rgb_colorbar2.lcd_driver3.rd_id4.clk_div5.lcd_dis…

单调队列算法模板及应用

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 队列算法模板例题&#xff1a;滑动窗口code 队列算法模板 // hh 表示队头&#xff0c;tt表示队尾 int q[N], hh 0…

使用Advanced Installer软件将winform程序打包成exe安装文件

在使用vs编写c#代码时&#xff0c;一般都是在debug文件中双击exe文件就可以执行&#xff0c;但是有时候需要将这个exe文件发给别人使用&#xff0c;在自己的电脑上exe文件可以执行&#xff0c;但是在别人的电脑上有时候打开后会报错&#xff0c;提示缺少.neta运行环境&#xff…