总结Dubbo开源RPC框架

一、分布式系统

1.1 集群和分布式

集群:多个机器提供一样的服务(实现高性能、高可用、 可伸缩、高可扩展 )
分布式:多个机器提供不同的服务,合起来为一个大服务

1.2 架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Dubbo

dubbo是一个高性能、轻量级的开源RPC框架,由十层模型构成。

  • 业务逻辑层:提供接口和实现
  • RPC调用核心层:封装整个RPC的调用过程、负载均衡、集群容错、代理等功能
  • remoting:对网络核心协议和数据转化的封装
    在这里插入图片描述

2.1 核心能力

面向接口代理的高性能RPC调用
智能容错和负载均衡
服务的自动注册和发现
高度可扩展能力
运行期流量调度
可视化的服务治理和运维

2.2 负载均衡算法

  • 1 随机(通过区间的随机算法获取目标服务器,可针对某一个服务器增加权重 )
@Service(weight=100)
@Service(weight=200)

@Reference(loadbalance="random")

在这里插入图片描述

  • 2 轮询(123123分配,可针对性能好的服务器增加权重)
  • 3 一致性哈希(相同参数的请求落在同一台机器上)
  • 4 最少活跃调用数(服务者活跃数,初始值为0,收到请求+1,完成请求-1,处理请求快的活跃数下降的越快。使慢的服务器收到更少的请求)
  • 5 最短响应时间(计算目标服务请求的响应时间,响应时间短的配置更高的权重,再根据区间随机算法获取目标服务器)

2.3 工作原理

在这里插入图片描述

在这里插入图片描述

  • 1 服务启动时,服务提供者和服务消费者根据配置信息连接到注册中心,分别向注册中心注册和订阅服务,
  • 2 注册中心会根据注册信息返回服务提供者的信息给服务消费者,
  • 3 服务消费者把服务提供者的信息缓存到本地(避免多次访问注册中心带来的性能消耗),如果信息发生变更,消费者会收到注册中心的推送更新本地的缓存
  • 4 服务消费者会生成代理对象, 根据负载均衡策略选择目标服务提供者定时向monitor记录接口的调用次数和时间信息,拿到代理对象后,服务消费者通过代理对象发起接口的调用
  • 5 服务提供者收到请求后,根据数据进行反序列化,通过代理调用具体的接口的一个实现

2.4 超时与重试

超时:
当消费者调用服务者发生阻塞或者等待情形时,会一直等待下去
在某一峰值时刻,大量请求同时请求消费者,会造成线程的大量堆积,造成雪崩
dubbo会设置超时时间(这个时间段内无法完成服务访问则自动断开连接)

@Service(timeout=3000)

重试:
当出现网络抖动时,一次请求就会失败
dubbo可设置重试次数

//3s超时,重试2次,一共发送3次请求
@Service(timeout=3000,retries=2)

2.5 多版本

灰度发布:当出现新功能时,让一部分用户使用新功能,用户反馈没问题时再将所有用户迁移到新功能

dubbo使用version属性设置和调用同一个接口的不同版本

@Service(version="v1.0")
@Service(version="v2.0")

@Reference(version="v1.0")
private UserService userService;

在这里插入图片描述

2.6 集群容错

  • 1 重试(读操作),
  • 2 快速失败(写操作),
  • 3 安全失败(返回null),
  • 4 定时重发(不断请求直到成功),
  • 5 并行调用(一个成功即返回),
  • 6 广播调用(一个报错及报错)
@Reference(cluster="failover")

在这里插入图片描述

2.7 服务降级

// 调用失败返回null
@Reference(mock="fail:return null")

// 不调用直接返回null
@Reference(mock="force:return null")

在这里插入图片描述

2.8 Dubbo和SpringCloud的区别

  • 1 关注点不同。
    dubbo定位服务治理,主要解决服务的远程调用、流量分发、服务治理、流量控制;
    springcloud关注微服务整个的生态的解决方案,依托于Spring和Springboot
  • 2 底层原理不同。
    dubbo底层使用netty这种nio框架,基于tcp协议传输,通过Hession等序列化方式完成RPC通信;
    springcloud是基于http协议+rest风格的接口实现远程通信,http请求会有更大的报文,占用的带宽会更多,效率低一些 ,但rest相比RPC(代码级别的强依赖)更加灵活,服务提供者和服务调用方只需要根据http协议的契约完成通信。(openFeign是一个声明式的HTTP客户端,将HTTP请求转化为Java接口方法调用)

2.9 HTTP和RPC的区别

HTTP:是超文本传输的应用层协议,服务于网页端和服务端的数据传输,适用于面向网络的通信
RPC:(remote procedure call)是远程过程调用协议,包括通信协议(如http,tpc)和序列化协议(protobuf,thrift),适用于面向应用程序的通信
RPC和HTTP的关系,前者是方法,后者是协议。
区别:

  • 传输协议
    RPC可以基于TCP,也可以基于HTTP
    HTTP只能基于HTTP
  • 传输效率
    RPC如果使用自定义的TCP协议,可以让请求的请求头信息更少
    HTTP的请求头有很多无用信息,如refer,keepalivetime,last-modified
    因此,RPC传输效率更高。
  • 性能
    RPC可以基于thrift或protobuf来实现高效的二进制传输
    HTTP也可以使用protobuf,但目前主流的浏览器大部分都是JSON实现的
    因此,RPC性能更好
  • 适用场景
    RPC用于公司内部的服务调用
    HTTP用于对外的异构环境,还有浏览器的调用APP接口调用,允许不同技术栈

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

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

相关文章

模拟B\S服务器(扩展知识点)

3.2 模拟B\S服务器(扩展知识点) 模拟网站服务器,使用浏览器访问自己编写的服务端程序,查看网页效果。 案例分析 准备页面数据,web文件夹。 复制到我们Module中,比如复制到day08中 我们模拟服务器端,ServerSocket类…

Linux环境JMeter脚本性能测试、easyNmon生成监控报告

一、下载JMeter安装包 Jmeter是Java开发的,需要依赖JDK环境,因此我们需提前安装好JDK。 Jmeter是开源的工具,我们直接到官网下载即可。 最新版本下载地址:Apache JMeter - Download Apache JMeter 二、安装JMeter #新建jmete…

关于Java对接网络验证+实践小例子,简单易懂

一个简单的网络验证小例子,各位大佬勿喷 突发奇想,如果一位A友找你拿一份 Working Fruits,但是你不想这位A友把你辛苦劳作、熬夜加点写出的代码分享他或她的另外一位朋友B友,也许并不是很有价值的一个小作业而已,但是就…

draw.io 去除箭头

问题 draw.io 去除箭头 详细问题 笔者使用draw.io绘制流程图,需要没有箭头的连接器,但是General所提供的连接器添加了尾部箭头,如何取消尾部箭头? 解决方案 1、点击选中选择连接器(箭头1)。在格式面板的“Style…

45.i++和++i

目录 一.基本概念 二.区别 三.总结 四.视频教程 一.基本概念 i和i两者的作用都是自增加1。单独使用的话,i和i,效果都是一样的,就是ii1。 int main() {int i 0;i; } int main() {int i 0;i; } 最后的结果都是1。 二.区别 如上单独使…

操作系统系列学习——内存使用与分段

文章目录 前言内存使用与分段 前言 一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油! 本文总结自B站【哈工大】操作系统 李治军(全32讲) 老师课程讲的非常好,感谢 【哈工…

MySQL中Buffer pool、Log Buffer和redo、undo日志介绍

MySQL中Buffer pool、Log Buffer和redo、undo日志介绍 Buffer Pool 原理MySQL中的内存结构Buffer PoolChange BufferLog Buffer redo和undo日志redo日志为什么需要REDO日志redo log 基本概念redo的组成redo的整体流程redo log的刷盘策略 undo 日志undo log 基本概念undo log的作…

Linux:网络相关概念的认识

文章目录 基本认知数据跨网络传输初识ip地址 端口号端口号的理解进程与端口号总结 本篇是基于前面对于网络的基本框架搭建,进而进行相关概念的进一步理解,为后续准备 基本认知 那么首先总结一下一些基本的相关结论性的信息 对于任何协议来说&#xff…

156.乐理基础-和弦固定标记法(五)挂留(sus)和弦省略音(omit)和弦

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里,这里面有五线谱对应的音名,对比着看 如果一章没落下,看到这里,但是看不懂什么意思,那就强行下看,看着看着指不…

热点!浅谈低代码到底是什么?

低代码平台的历史相对较短,大约始于 2000 年初,源于快速应用程序开发工具。随着低代码平台和工具的日益普及和优势,它不断发展以满足各种领域和角色的需求。 本文将研究各种低代码和无代码应用程序开发方法、业务用例、挑战和未来预测等。 …

定制红酒:品质保障,从源头做起

云仓酒庄的洒派定制红酒,以其卓着的品质和与众不同的口感,赢得了众多消费者的喜爱。而这种品质的保障,正是从源头上开始的。 在葡萄种植方面,种植者对土壤、气候等自然条件进行严格的筛选和评估,确保葡萄能够在理想的环…

递增四元组

解法: 首先都可以想到dp[i]:第i个元素结尾的递增四元组有dp[i]个 然后发现有一组数据:2,3,6,1,5,8。会出现6结尾和5结尾的递增三元组,也就是未来的决策受过去影响,专业的说就是有后效性。需要强化约束条件&#xff0…

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

【Linux中vim系列】如何在vim中检索字符串

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

最简明的大模型agent教程

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目…

关闭Elasticsearch built-in security features are not enabled

禁用Kibana安全提示(Elasticsearch built-in security features are not enabled) Kibana提示#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.e…

基于SSM+Jsp+Mysql的KTV点歌系统

基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工…

Redisson分布式锁(WatchDog分析,浅浅看下源码)

带大家简单了解下Redisson的看门狗机制,这个面试中也比较常见。 目录 WatchDog(看门狗)机制开启WatchDog(看门狗)浅看下源码 WatchDog(看门狗)机制 Redisson看门狗机制是用于解决在业务运行时间…

弱网测试利器 - Charles工具实战分享!

一:弱网测试要点 二:利用抓包工具charles进行弱网设置,适用PC端和移动端(IOS/Android) 1、以charles 4.5.6版本为例,打开Proxy->Throttle Settings 2、打开Throttle Settings,界面…

蓝桥杯练习06给网页化个妆

给页面化个妆 介绍 各个网站都拥有登录页面,设计一个界面美观的登录页面,会给用户带来视觉上的享受。本题中我们要完成一个登录页面的布局。 准备 开始答题前,需要先打开本题的项目代码文件夹,目录结构如下: 其中&…