当前位置: 首页 > news >正文

微服务实战系列之Dubbo(上)

前言

随着一年一度冬至的到来,2023的步伐也将远去。而博主的系列文章,也将从今天起,越来越聚焦如何构建微服务“内核”上。前序系列文章几乎囊括了微服务的方方面面,无论使用什么框架、组件或工具,皆可拿来用之。

那么,今天博主将推出微服务开发框架系列文章,欢迎各位盆友继续跟着博主的步伐,快乐徜徉于微服务的世界。Let’s Go!

本期主题,博主将带着各位盆友,聚焦在经典的RPC框架:Dubbo,一个盛行于互联网平台的宠儿。

在这里插入图片描述

一、读懂RPC

我们提到Dubbo,那不得不提RPC(远程过程调用,Remote Procedure Call缩写)。首先了解一下什么是RPC

RPC是一个通信协议,允许客户端通过网络调用非本地的服务,即像调用本地服务一样,调用一个“远程”的网络服务。一般用于构建分布式平台,实现跨网络访问通信。

1. 主要特点
  • 经典3跨
    无需关注“远程”服务如何实现,支持3跨(跨网络、跨平台、跨语言)。只要一个Client,根据RPC通信规范,即可叩开一个Remote Server的大门。此乃经典的C/S程序架构模式。
  • 服务可重用性
    既然满足3跨,那可了不起了。随时随地,任你“驰骋”。只要Server有,统统皆拿走。此刻,博主不禁暗然自喜中…
2. 核心组件

我们已知RPC是一个通信过程的协议,如使用它,必须遵循相应的“制度”,否则,乱了“江湖规矩”。满足RPC调用,必须具备以下四个模块:

模块名称模块简介
Client一个客户端,可发起远程调用的程序,一般称之为“消费者”
Client Stub一个客户端的请求存根,记录调用的服务信息,实现请求信息“编码”和服务端返回信息的“解码”
Server一个服务端,可提供服务的正在运行的程序,一般称之为“生产者”
Server Stub一个服务端的响应存根,记录接收的客户端信息,实现客户端数据“解码”;发起服务调用并向Client Stub返回经过“编码”的信息。

具体交互流程图,示意如下,请参考:

在这里插入图片描述

3. 关键技术

我们可能知道或至少了解,通信的基本原理:
在这里插入图片描述

首先需要通信的双方,其次需要一个通信的媒介或载体,最后是信息内容。当然该过程存在一定的干扰项(比如平台、网络、语言等等),因此一定程度上存在可能“失真”的风险。

那么RPC既然是一个通信协议,那也基本遵循该原理,核心技术包括:

–序列化和反序列化(Sequence)
将对象转换为二进制或逆向转换,即实现RPC过程中的编码解码的过程。
–动态代理(Proxy)

动态代理是一种在运行时创建代理类的机制,动态代理可以在不修改源代码的情况下,在运行时为某个接口动态生成实现类,并且可以拦截接口中的方法调用,从而实现一些特殊的功能.。

比如AOP、日志、注解等皆使用了动态代理技术实现。而在RPC中,主要用它完成调用过程的核心处理逻辑(2个Stub皆采用该技术),包括封装请求信息、发起调用和返回响应信息等传输过程实现。

到此为止,我想各位盆友已对RPC有了深刻的认识和了解。那么接下来,博主顺势而为,继续带着大家走进人见人爱的Dubbo

二、走进Dubbo

Apache Dubbo is a high-performance, Java-based open-source RPC framework.

翻译成大白话:Dubbo是一个基于JAVA高性能开源RPC框架。

1. 架构图

在这里插入图片描述
通过Dubbo架构图(来自官网)观察,是不是很很高效很经典?一个标准的端到端的服务框架。

组件名称组件含义
Consumer服务消费者,用于使用服务
Provider服务提供者,也叫生产者,用于提供服务
ZooKeeper用于满足Dubbo服务治理的工具,称之为服务注册中心

当然,Dubbo 在微服务应用开发框架之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式,所以实际上它的服务能力包含了服务治理内容,可参考下图(来自官网):
在这里插入图片描述

2. 关键特性

- Transparent interface based RPC
提供基于RPC的透明接口
- Intelligent load balancing
提供智能的负载均衡策略
- Automatic service registration and discovery
提供自动的服务注册和发现能力
- High extensibility
提供较高的扩展能力
- Runtime traffic routing
提供运行时的服务管理和路由能力
- Visualized service governance
提供可视化服务治理能力

3. 交互原理

通过1、2两方面总结,Dubbo可以说深刻体现了什么是发布、什么是订阅,进而探究为实现高性能分布式系统,Dubbo到底是如何工作的。

在这里插入图片描述

关键步骤:

3.1 注册服务

服务提供者Provider在启动时,向注册中心发布自己的服务。

3.2 订阅服务

服务消费者Consumer在启动时,从注册中心订阅自己的服务。

3.3 调用服务

订阅完成后,即可通过业务接口,进行服务调用。

3.4 服务治理

包括服务调用、服务运维、服务限流、熔断等。


结语

作为支持分布式开发的高性能JAVA框架,Dubbo显然具备很高的使用价值。不仅推动了微服务一时兴起的潮流,也帮助使用者快速构建自己微服务体系提供了很好的参考坐标

好了,本期主题到此结束,欢迎订阅与交流!


历史回顾

  • 微服务实战系列之ZooKeeper(实践篇)
  • 微服务实战系列之ZooKeeper(下)
  • 微服务实战系列之ZooKeeper(中)
  • 微服务实战系列之ZooKeeper(上)
  • 微服务实战系列之MQ
  • 微服务实战系列之通信
  • 微服务实战系列之J2Cache
  • 微服务实战系列之Cache(技巧篇)
  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

在这里插入图片描述

相关文章:

  • 开集目标检测-标签提示目标检测大模型(吊打YOLO系列-自动化检测标注)
  • 【虹科分享】利用ProfiShark 构建便携式网络取证工具包
  • AtCoder Beginner Contest 334 G
  • 用Python处理PDF:拆分与合并PDF文档
  • 大厂整理的23年前端工程师面试手册,高频面试题终结篇,github上标星16k!
  • 排序笔记总结
  • 2024深入评测CleanMyMac X4.14.6破解版新的功能
  • 微服务架构<2>
  • storyBook play学习
  • uni-app page新建以及page外观配置
  • Spring高手之路-@Autowired和@Resource注解异同点
  • 【JVM】虚拟机的组成+字节码文件组成+类的生命周期
  • 安装DataEase(Linux线上安装)修改端口
  • 永久访问minio中的文件(视频、图片)
  • Ubuntu安装TensorRT
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • CSS 三角实现
  • JavaScript 奇技淫巧
  • Java比较器对数组,集合排序
  • java取消线程实例
  • java中具有继承关系的类及其对象初始化顺序
  • overflow: hidden IE7无效
  • WebSocket使用
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 因为阿里,他们成了“杭漂”
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #define、const、typedef的差别
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (ZT)出版业改革:该死的死,该生的生
  • (二)丶RabbitMQ的六大核心
  • (三)c52学习之旅-点亮LED灯
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)Oracle存储过程编写经验和优化措施
  • (轉貼) UML中文FAQ (OO) (UML)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET4.0并行计算技术基础(1)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @Resource和@Autowired的区别
  • @WebService和@WebMethod注解的用法
  • []sim300 GPRS数据收发程序
  • [1127]图形打印 sdutOJ