【微服务】认识Dubbo+基本环境搭建

认识Dubbo

  • Dubbo是阿里巴巴公司开源的一个高性能、轻量级的WEB和 RPC框架,可以和Spring框架无缝集成。
  • Dubbo为构建企业级微服务提供了三大核心能力: 服务自动注册和发现、面向接口的 远程方法调用智能容错和负载均衡
  • 官网:https://cn.dubbo.apache.org/zh-cn/

Dubbo可以做什么

按照微服务架构的定义,采用它的组织能够很好的提高业务迭代效率与系统稳定性,但前提是要先能保证微服务按照期望的方式运行,要做到这一点需要解决服务拆分与定义、数据通信、地址发现、流量管理、数据一致性、系统容错能力等一系列问题。Dubbo 可以帮助解决如下微服务实践问题

  1. 微服务编程范式和工具
    Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)
  2. 高性能的 RPC 通信
    Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题
  3. 服务监控与治理
    Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力
  4. 部署在多环境
    Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下
  5. 活跃的社区
    Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目,贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家,确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势
  6. 庞大的用户群体
    Dubbo3 已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架,庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。

Dubbo的核心特性

  1. 灵活部署模式
    一键拉起服务治理体系,屏蔽底层跨平台的微服务基础设施复杂度,支持虚拟机、Docker、Kubernetes、服务网格等多种部署模式
  2. 服务发现
    Dubbo提供了高性能、可伸缩的服务发现机制,面向百万集群实例规模设计,默认提供Nacos、Zookeeper等注册中心适配并支持自定义扩展
  3. 流量管控
    Dubbo提供的基于路由规则的流量管控策略,可以帮助实现全链路灰度、金丝雀发布、按比例流量转发、动态调整调试时间、设置重试次数等服务治理能力
  4. 通信协议
    支持Http/2、gRPC、TCP、REST等任意通信协议,切换协议只需要修改一行配置,支持单个端口上的多协议发布
  5. 多语言SDK
    提供 java、Golang. Rust. Node.js、Python 等多语言 SDK 实现,支持基于IDL的跨语言服务定义和基于Protobuf、Json的数据编码
  6. 可扩展性
    一切皆可扩展,通过扩展(Filter、Router、Service、Discovery、Configuration等)自定义调用、管控行为、适配开源微服务生态
  7. 可观测性
    多维度的可观测指标(Metrics、Tracing、Accesslog)帮助了解服务运行状态、Admin控制台、Grafana等帮助实现数据指标可视化展示。
  8. 认证鉴权
    支持基于TLS的传输链路认证与加密通信以及基于请求身份的权限校验,帮助构建零信任分布式微服务体系。
  9. 服务网格(Service Mesh)
    灵活的数据面(Proxy & Proxyless)部署形态支持,无缝接入lstio控制面治理体系
  10. 丰富生态
    一站式微服务生态适配:注册中心、网关、限流降级、负载均衡、一致性事务、异步消息、Tracing等

Dubbo的工作原理

在这里插入图片描述从抽象架构上分为两层服务治理抽象控制面Dubbo 数据面

服务治理抽象控制面

服务治理抽象控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面

Dubbo数据面

数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作

  • 服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
  • 服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程

从数据面视角,Dubbo帮助解决了微服务实践中的以下问题

  1. Dubbo作为服务开发框架约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式
  2. Dubbo作为RPC通信协议实现解决了服务间数据传输的编解码问题

在这里插入图片描述

服务开发框架

  • 微服务的目标是构建足够小的、自包含的、独立演进的、可以随时部署运行的分布式应用程序,几乎每个语言都有类似的应用开发框架来帮助开发者快速构建此类微服务应用,比如 Java 微服务体系的 Spring Boot,它帮 Java 微服务开发者以最少的配置、最轻量的方式快速开发、打包、部署与运行应用。
  • 微服务的分布式特性,使得应用间的依赖、网络交互、数据传输变得更频繁,因此不同的应用需要定义、暴露或调用 RPC 服务,那么这些 RPC 服务如何定义、如何与应用开发框架结合、服务调用行为如何控制?这就是 Dubbo 服务开发框架的含义,Dubbo 在微服务应用开发框架之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式,比如 Dubbo Java 作为服务开发框架,当运行在 Spring 体系时就是构建在 Spring Boot 应用开发框架之上的微服务开发框架,并在此之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式
Dubbo 作为服务开发框架包含的具体内容如下
  1. RPC 服务定义、开发范式: 比如 Dubbo 支持通过 IDL 定义服务,也支持编程语言特有的服务开发定义方式,如通过 Java Interface 定义服务
  2. RPC 服务发布与调用 API: Dubbo 支持同步、异步、Reactive Streaming 等服务调用编程模式,还支持请求上下文 API、设置超时时间等。
  3. 服务治理策略、流程与适配方式等: 作为服务框架数据面,Dubbo 定义了服务地址发现、负载均衡策略、基于规则的流量路由、Metrics 指标采集等服务治理抽象,并适配到特定的产品实现。

Dubbo支持的通讯协议

  • Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。 这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。
  • Dubbo 提供了两款内置高性能 Dubbo2、Triple (兼容 gRPC) 协议实现,以满足部分微服务用户对高性能通信的诉求,两者最开始都设计和诞生于阿里巴巴内部的高性能通信业务场景
    • Dubbo2 协议: 是在 TCP 传输层协议之上设计的二进制通信协议
    • Triple: 则是基于 HTTP/2 之上构建的支持流式模式的通信协议,并且 Triple 完全兼容 gRPC 但实现上做了更多的符合 Dubbo 框架特点的优化。

在这里插入图片描述

Dubbo 服务治理

  • 服务开发框架解决了开发与通信的问题,但在微服务集群环境下,我们仍需要解决无状态服务节点动态变化、外部化配置、日志跟踪、可观测性、流量管理、高可用性、数据一致性等一系列问题,我们将这些问题统称为服务治理。
  • Dubbo 抽象了一套微服务治理模式并发布了对应的官方实现,服务治理可帮助简化微服务开发与运维,让开发者更专注在微服务业务本身。
  1. 地址发现
    Dubbo服务发现具备高性能、支持大规模集群、服务级元数据配置等优势,默认提供Nacos、Zookeeper、Consul等多种注册中心适配,与SpringCloud、Kubernetes Service模型打通,支持自定义扩展
  2. 负载均衡
    Dubbo默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、一致性哈希和自适应负载等策略
  3. 流量路由
    Dubbo支持通过一系列流量规则控制服务调用的流量分布与行为,基于这些规则可以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同区域优先、超时配置、重试、限流降级等能力
  4. 链路追踪
    Dubbo官方通过适配OpenTelemetry提供了对Tracing全链路追踪支持,用户可以接入支持OpenTelemetry标准的产品如Skywalking、Zipkin等,另外很多社区如Skywalking、Zipkin等在官方也提供了对Dubbo的适配
  5. 客观测性
    Dubbo示例通过Prometheus等上报Qps、RT、请求次数、成功率、异常次数等多维度的可观测指标帮助了解服务运行状态,通过接入Grafana、Admin控制台帮助实现数据指标可视化展示
  6. Dubbo Admin
    Admn控制台提供了Dubbo集群的可视化图,通过Admin你可以完成集群的几乎所有的管控工作。

搭建Dubbo运行环境

1.搭建运行环境之前的基本概念

1.1注册中心

注册中心是 Dubbo 服务治理的核心组件,Dubbo 依赖注册中心的协调实现服务(地址)发现,自动化的服务发现是微服务实现动态扩缩容、负载均衡、流量治理的基础。Dubbo 的服务发现机制经历了 Dubbo2 时代的接口级服务发现、Dubbo3 时代的应用级服务发现

  • Dubbo 作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示,Dubbo 的服务消费者(Consumer)通过一系列的工作将请求发送给服务提供者(Provider)。
  • 为了实现这样一个目标,Dubbo 引入了注册中心(Registry)组件,通过注册中心,服务消费者可以感知到服务提供者的连接方式,从而将请求发送给正确的服务提供者

在这里插入图片描述

1.2服务发现

服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。

实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程

  • Zookeeper 注册中心
  • Nacos 注册中心
  • Multicast 注册中心
  • Redis 注册中心
  • 多注册中心
  • Simple 注册中心
  • https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/
服务注册与发现的过程
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

1.3Zookeeper 注册中心

Zookeeper 是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
在这里插入图片描述

  • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
  • 它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
  • ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
  • 官网:https://zookeeper.apache.org/
  • 软件下载地址:https://archive.apache.org/dist/zookeeper/
Zookeeper服务注册与发现的过程
  1. 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  2. 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  3. 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。
Windows环境下安装Zookeeper
  1. 下载zookeeper
    https://archive.apache.org/dist/zookeeper/zookeeper-3.8.0/

  2. 解压缩zookeeper
    解压到没有中文、没有空格的路径
    如:D:\soft\apache-zookeeper-3.8.0-bin

  3. 修改zoo.cfg配置,重新运行
    将conf下的zoo_sample.cfg复制一份改名为zoo.cfg
    修改zoo.cfg的配置信息: dataDir=…/data 数据存储的目录
    修改zoo.cfg的配置信息 dataLogDir=…/logs 项目的日志目录
    audit.enable=true
    在这里插入图片描述

  4. 运行Zookeeper Server
    进入Zookeeper所在的bin目录
    双击zkServer.cmd
    在这里插入图片描述

2.dubbo-admin

  • dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
  • 但是为了让用户更好的管理众多的dubbo服务,官方提供了一个可视化的管理程序dubbo-admin。
  • dubbo-admin控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几乎所有管控工作。
  • 安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理。

Windows下安装dubbo-admin 3-2

  1. 下载dubbo-admin
    网址:https://github.com/apache/dubbo-admin
  2. 解压缩dubbo-admin
    解压到没有中文、没有空格的路径中
    如:D:\dubbo-admin
  3. 进入目录,修改dubbo-admin配置
    进入bin\config目录,修改服务端口
    修改zookeeper的服务地址
  4. 运行dubbo-admin
    进入bin目录,双击startup.cmd
    打开浏览器,输入localhost:7001 默认用户名和密码为root
    在这里插入图片描述

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

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

相关文章

unity 添加newtonsoft-json

再git url上添加:com.unity.nuget.newtonsoft-json

seata测试demo(订单)

seata工作流程: seata对分布式事务的协调和控制就是31 1>XID:XID是全局事务的唯一标识,它可以在服务的调用链路中传递,绑定到服务的事务上下文中。 3>TC->TM->RM TC:事务协调器>就是seata 负责维护全局事务和分支事务的状…

Window平台应用程序打包(用Microsoft Visual Studio Installer Projects制作安装包)

window平台应用程序打包(用Microsoft Visual Studio Installer Projects制作安装包) 在window平台使用Visual Studio 开发完后,一般都需要打包成一个安装包文件 使用Visual Studio 自带的打包插件打包: 1 安装project setup打包…

Day 15 Servlet(一)

Servlet 1、简介2、快速入手2.1servlet jar包导入2.2 Content-type2.3 Servlet-url 写法2.4 注解方式配置servlet2.5 servlet 生命周期 1、简介 资源包括静态资源和动态资源。 对于服务器响应,有时候我们需要根据客户的不同请求返回不同的数据和页面。此时就需要一…

代码随想录训练营第55天 | LeetCode 583. 两个字符串的删除操作、​​​​​​LeetCode 72. 编辑距离、总结

目录 LeetCode 583. 两个字符串的删除操作 文章讲解:代码随想录(programmercarl.com) 视频讲解:LeetCode:583.两个字符串的删除操_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 72. 编辑距离 文章讲解:代码随想录(programm…

一、Jdk和eclipse安装和配置

1 JDK与eclipse的安装和配置 1.1JDK安装 1.2配置环境变量 (1)新建系统变量名为java_home,变量值为jdk安装路径,由自己决定,例如:C:\Program Files\Java\jdk-11.0.6 (2))新建系统变量名为classpath,变量值为".&q…

MySQL事务(超详细!!!)

目录 一、MySQL事务的概念 二、事务的ACID特点 1、原子性(Atomicity) 2、持久性 3、隔离性(Isolation) 3.1 事务的并发问题 ①、脏读(读取未提交数据) ②读已提交、不可重复读(前后多次读取,数据内容不一致) …

数学算法(算法竞赛、蓝桥杯)--判定质数试除法

1、B站视频链接&#xff1a;G06 判定质数 试除法_哔哩哔哩_bilibili 题目链接&#xff1a;【深基7.例2】质数筛 - 洛谷 #include <bits/stdc.h> using namespace std;bool is_prime(int x){if(x1)return 0;//特判1不是质数for(int i2;i*i<x;i){//枚举小的那个到根号n…

算法系列--动态规划--子序列(1)

&#x1f495;"深思熟虑的结果往往就是说不清楚。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–子序列(2) 今天带来的是算法系列--动态规划--子序列(1),是子序列问题的开篇!带大家初识子序列问题 一.什么是子序列问题 我们…

LeetCode 热题 HOT 100(P21~P30)

系列文章&#xff1a; LeetCode 热题 HOT 100(P1~P10)-CSDN博客 LeetCode 热题 HOT 100(P11~P20)-CSDN博客 LeetCode 热题 HOT 100(P21~P30)-CSDN博客 LC48rotate_image . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表…

Practical Network Acceleration with Tiny Sets

文章目录 why-AbstractIntroductionContributionsRelated WorksFilter-level pruningBlock-level pruningData Limited Knowledge DistillationMethodOverviewThe motivation to drop blocksThe recoverability of the pruned modelRecover the accuracy of the pruned modelEx…

力扣:205. 同构字符串

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符…

Leetcode——560. 和为 K 的子数组

560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/subarray-sum-equals-k/description/ 题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回该数组中和为 k 的子数组的个数 。子数组是数组中元素…

ABeam德硕|中国与柴火创客空间达成战略合作,拟定联合发布企业数字化转型实战课程

引言 随着近年数字技术的迅速发展&#xff0c;企业纷纷寻求数字化转型&#xff0c;而数字化转型企业人才的培养正是其中的关键一环。数字化转型人才能够从战略层面把握转型方向&#xff0c;快速适应新技术变革&#xff0c;有效应用技术工具以优化业务流程、提高组织效率、实践创…

如何配置元数据?(如何使用Spring容器)

目录 一、引出问题&#xff08;如何配置元数据&#xff1f;&#xff09;二、没有Spring的时代三、XML配置文件&#xff08;xml配bean&#xff09;1 格式1.1 示例 2 实例化一个Spring容器3 使用Spring容器4 后言 四、基于注解的配置 【[1.9. Annotation-based Container Configu…

代码随想录算法训练营第五十四天|392.判断子序列、115.不同的子序列

392.判断子序列 刷题https://leetcode.cn/problems/is-subsequence/description/文章讲解https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html视频讲解https://www.bilibili.com/video/BV1tv4y1B7ym/?vd_sourceaf4853e80f89e28094a5fe1e220…

Maven构建项目时,发生依赖下载错误的情况

在使用 Maven 构建项目时&#xff0c;可能会发生依赖下载错误的情况&#xff0c;主要原因有以下几种 1、下载依赖时&#xff0c;出现网络故障&#xff0c;或仓库服务器宕机等原因&#xff0c;导致无法连接至Maven仓库(也就是我们配置的阿里镜像)&#xff0c;从而无法下载依赖 …

国内git最新版本下载链接2.44

git官网地址:Git - Downloading Package (git-scm.com) 蓝奏云: ​​​​​​gGit-2.44.0-64-bit.exe - 蓝奏云 git仓库地址:git/git: Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via …

GPU从虚拟化迈向池化:趋动OrionX产品的创新之路

/ 引言 / 随着人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术的飞速发展&#xff0c;图形处理单元&#xff08;GPU&#xff09;已成为数据中心和云计算环境中的关键资源。GPU的并行处理能力使其成为执行复杂计算任务的理想选择。 然而&#xff…

Docker进阶:Docker-compose 实现服务弹性伸缩

Docker进阶&#xff1a;Docker-compose 实现服务弹性伸缩 一、Docker Compose基础概念1.1 Docker Compose简介1.2 Docker Compose文件结构 二、弹性伸缩的原理和实现步骤2.1 弹性伸缩原理2.2 实现步骤 三、技术实践案例3.1 场景描述3.2 配置Docker Compose文件3.3 使用 docker-…