Dubbo2.0

news2024/12/26 20:55:02

前置

衡量网站性能指标:

  • 响应时间:一次请求花费时间
  • 并发数:同时处理请求数
    • 并发连接数:每秒建立总TCP数量
    • 请求数:QPS一秒请求数
    • 并发用户数:单位时间用户
  • 吞吐量:单位时间处理请求数
    • QPS:每秒查询数
    • TPS:,每秒事务数
    • 一个事务指一个客户机向服务器发送请求然后服务器完成响应的事务个数。
    • 一个页面一次访问,只会一个TPS,但一次页面请求,会产生多次服务器的请求,多尔衮QPS
    • QPS>=并发数>=TPS
      大型互联网架构目标:
  • 高性能:快速
  • 高可用:保证正常访问
  • 可伸缩:通过硬件增加/减少,提高/降低处理能力。
  • 高可扩展:系统间耦合低
  • 安全性:网站安全访问和加密数据
  • 敏捷性:应变
    集群和分布式:
  • 集群:很多人干一样的事
  • 分布式:很多人干不一样的事。

1.0 什么是Dubbo

基于java的高性能,轻量级RPC框架,SOA(面向服务架构)=RPC+服务治理,18年更名为Apache Dubbo,成为一个易用,高性能的web和rpc框架,同时提供微服务的服务发现,流量治理,可观测,认证鉴权,工具与最佳实践。依托Dubbo,阿里提出了自己的DNS(Dubbo,Nacos,Sentinel(服务降级,限流))
官网:https://dubbo.apache.org/zh-cn/
github:http://github.com/apache/dubbo

2.0 SOA与微服务

单体架构问题:

  1. 热点问题:某子系统访问量大,导致其他子系统的访问出现问题。
  2. 扩展性差,新资源的分配力度不精确(文虎系统访问量,增加机器,增加服务器tomcat,但系资源不能精确到门户)
  3. 子模块耦合度高
  4. 维护部署成本高
  5. 技术栈受限,开发语言必须相同

水平扩展(集群):

优点:提高稳定性,并发能力
问题:同上

垂直架构+水平:

优点:每个子模块都地理部署在自己的tomcat(JVM进程)中,部分解决单体架构问题。

RPC(Remote Procedure Call)架构

由垂直结构演变而来,解决子系统模块功能调用(service - service)。跨进程(虚拟机)之间通过网络(通信方式[http(tomcat,Jetty,Resin),TCP(BIO,NIO,Netty,Mima)],协议[TCP需自定义协议],序列化[JDK,Protobuf])调用。
优点:可以复用其他系统功能。
问题:

  1. 某个子接口出现问题,整个调用链失败。
  2. 某个子接口访问量大怎么办?

SOA(Serivce-Oriented Architecture)面向服务架构

由RPC架构演化而来,代表框架Dubbo。SOA=RPC+服务治理
RPC:将多个模块共用的子接口抽取出来做成一个服务,独立部署并做水平扩展。
服务治理:注册中心,负载均衡,容错,配置中心,限流
进阶:企业服务总线ESB(解决跨语言调用,中间形态(Grpc,Probuf,Thrift IDL)

Dubbo快速入门

前置

安装zookeeper

实现步骤

  1. 创建服务提供者Provider模块
  2. 创建服务消费者Consumer模块
  3. 在服务提供模块编写UserServiceImpl提供服务
  4. 在服务消费者中UserController远程调用UserServiceImpl提供的您服务
  5. 启动测试

代码

https://gitee.com/xuyu294636185/dubbo-pro.git

Dubbo高级特性

Dubbo架构

dubbo-admin管理平台

dubbo-admin管理平台是一图形化管理界面。从注册中心中获取服务提供者/消费者进行配置管理。前端使用vue,后端使用springboot实现。

  1. 安装node.js
  2. 下载dubbo-admin:github.com/apache/dubbo-admin
  3. 修改dubbo-admi-server包下application.properties文件中zookeeper地址
  4. 在dubbo-admin-develop下重新打包:mvn clean package
  5. 在dubbo-admin-server下启动后端jar:java -jar .\dubbo-admin-0.1.jar
  6. 在dubbo-admin-ui下启动前端:npm run dev
  7. 访问localhost:8081

dubbo高级配置

序列化和反序列化

序列化历程

地址缓存

坑:注册中心挂了,服务是否可以正常访问?
可以,dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。当服务提供者发生变化时,注册中心会通知服务消费者。

超时 重试

  • 服务消费者在调用服务提供者的时候发生了阻塞,等待的情形,这时,服务消费者会一直等待下去。
  • 在某个峰值时刻,大量请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
  • dubbo利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
  • 使用timeout属性配置超时时间,默认值1000,单位毫秒。建议配置在服务提供者这边。
@Service(timeout = 1000,retries = 0)
@Reference(timeout = 1000)

多版本

灰度发布:当新功能上线,会让一部分用户先使用新功能,用户反馈没问题再将所有用户迁移至新功能。

  • dubbo使用version属性来设置和调用同一个接口的不同版本。
@Service(version = "v1.0")

负载均衡

  • Random:按权重随机,默认值。
  • RoundRobin:按权重轮询。
  • LeastActive:最少活跃调用数,相同活跃数的随机。
  • ConsistentHash:一致性hash,相同参数的请求总是发到同一提供者。
@Service(weight= "100")
@Reference(loadbalance = "random") 

集群容错

  • Failover Cluster:失败重试。默认2次,使用retries配置。一般用于读操作。
  • Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于写操作。
  • Failsafe Cluster:失败安全,出现异常时,直接忽略,返回一空结果。
  • Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。
  • Forking Cluster:并行调用多个服务器,只要一个成功即返回。
  • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。

服务降级

  • mock=force:return null 消费方对该服务的方法调用都直接返回null值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
  • mock=fail:return null 消费方对该服务的方法调用在失败后,再返回null,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
@Reference(mock="force:return null") 

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

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

相关文章

Web前端自动化测试Cypress实践总结

本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中。 一、自动化测试概述 为了保障软件质量,并减少重复性的测试工作,自动化测…

GaussDB数据库SQL系列-层次递归查询

目录 一、前言 二、GuassDB数据库层次递归查询概念 三、GaussDB数据库层次递归查询实验示例 1、创建实验表 2、sys_connect_by_path(col, separator) 3、connect_by_root(col) 4、WITH RECURSIVE 四、递归查询的优缺点 1、优点 2、缺点 五、总结 一、前言 层次递归…

中使用pack局管理器:管理器布置小部件

一、说明 在本教程中,我们将了解如何制作登录 UI。今天的教程将重点介绍如何使用 Tkinter 的pack布局管理器。 二、设计用户界面 什么是布局管理器?创建图形界面时,窗口中的小部件必须具有相对于彼此排列的方式。例如,可以使用微件…

Yolov5的tensorRT加速(python)

地址:https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 下载yolov5代码 方法一:使用torch2trt 安装torch2trt与tensorRT 参考博客:https://blog.csdn.net/dou3516/article/details/124538557 先从github拉取torch2trt源码 ht…

【C++ 二叉搜索树】

目录 1.什么是二叉搜索树2.构建二叉搜索树2.1首先搭建树的框架2.2搭建搜索树的框架 3.二叉搜索树的插入3.1非递归式插入3.2递归式插入 4.二叉搜索树的查找4.1非递归查找4.2递归查找 5.二叉搜索树的删除5.1非递归删除5.2递归删除 6.整个代码实现 1.什么是二叉搜索树 简单来讲就…

WebDAV之π-Disk派盘 + 小书匠

小书匠是一款功能丰富,强大的知识管理工具。全平台覆盖,离线数据存储,自定义数据服务器,所见即所得的 markdown 编辑体验。 小书匠提供了多种实用的编辑模式,例如:栏编辑、双栏编辑、三栏编辑、全屏写作、全屏阅读等。并且该软件还提供了许多有用的扩展语法,比如Latex公…

【前端demo】CSVJSON转换器 原生实现:CSV转换为JSON,JSON转换为CSV

文章目录 效果过程textareaTooltip提示工具按钮的min-width判断输入是否是CSV或JSONJSON与CSV样例JSON转为CSVCSV转为JSON不足之处 代码HTMLCSSJS 其他demo 效果 效果预览:CSV&JSON Converter (codepen.io) 参照的预览:JSV Converter(gpaiva00.git…

地毯16 CFR 1630/1631安全防火性易燃性测试

地毯的16 CFR 1630/1631安全防火性易燃性测试是一项重要的产品检测认证标准。该测试旨在评估地毯材料的防火性能,以确保其在使用过程中不会引发火灾或加剧火势。测试过程包括对地毯样品进行燃烧测试和燃烧后的评估。 根据16 CFR 1630标准,地毯样品将被暴…

检漏仪和高真空度控制技术在热管漏率和内部真空度测量中的应用

摘要:大量MEMS真空密封件具有小体积、高真空和无外接通气接口的特点,现有的各种检漏技术无法对其进行无损形式的漏率和内部真空度测量。基于压差法和高真空度恒定控制技术,本文提出了解决方案。方案的具体内容是将被测封装器件放置在一个比器…

elementui表格自定义表头的两种方法

表格自定义表头的方式 多选框表头换文字 请查看上篇博客:http://t.csdn.cn/69De2 文字换按钮 render-header render-header方法详情 Table-column Attributes 参数说明类型可选值默认值render-header列标题 Label 区域渲染使用的 FunctionFunction(h, { column, $in…

恒运资本:北向资金流出一定会跌吗?股票涨跌与什么有关?

北向资金被认为是A股商场的风向标,它的动向往往会影响投资者的心情。那么北向资金流出一定会跌吗?股票涨跌与什么有关?恒运资本也为大家准备了相关内容,以供参阅。 北向资金流出一定会跌吗? 北向资金流出并不一定意味…

快速解决 adb server version doesn‘t match this client

这个问题是由于电脑上安装了多个版本的adb工具,客户端和服务端的版本不一致,无法正常通信导致。最快的解决方法就是将Android SDK中adb复制到系统目录下。 操作步骤如下: 1. 查看adb版本和路径 执行adb version,如下&#xff0…

手机无人直播软件在苹果iOS系统中能使用吗?

在现代社交媒体的时代,直播带货已经成为了一种热门的销售途径。通过直播,人们可以远程分享自己的商品,与观众进行互动,增强沟通和参与感。而如今,手机无人直播软件更是成为了直播带货领域的一项火爆的技术。那么&#…

渗透测试——安全漏洞扫描工具APPScan的安装与基本使用步骤

前言 HCL AppScan Standard是安全专家和渗透测试者设计的动态应用程序安全测试工具,AppScan使用强大的扫描引擎,会自动检索目标应用程序并测试漏洞。测试结果按优先级排列,允许操作员快速分类问题、发现最关键的漏洞。每个检测到的问题都可以…

Python 自学:使用线程模块同时运行代码 Threading

1. 以下代码中,程序会等一个函数执行完毕才执行下一个函数。 import timestart time.perf_counter()def do_something():print(Sleeping 1 second...)time.sleep(1)print(Done Sleeping...)do_something() do_something()finish time.perf_counter()print(fFinis…

惠普NS1005 NS1020打印机如何判断是不是该加粉了

惠普 Laser NS MFP 1005 1020系列智能闪充加粉式多功能一体机的耗材余量指示灯显示“1” “2” “2”时,就是在“说”:快没有墨粉了; 耗材余量指示灯和充粉口指示灯 在不同的状态下代表不同的意思,当耗材余量指示灯显示“1” “2”…

2023年9月上海/广州/深圳CSPM-3国标项目管理中级认证招生

CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要…

【数据结构-栈】栈基础

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

java持久化框架JPA,自动执行sql语句的代码实现

在springboot入口处调用: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBoot…

Mac使用VMWare安装centos7回车回退

Mac使用VMWare安装centos7回车回退 说明:本人电脑是MacBook 14pro M2芯片,安装的为VMWare16.2.5,Centos版本为centos stream9 解决方法:使用VM16.2.5Stream9Debian 11操作系统正常安装 问题:下载了VMWare16和Centos…