0


微服务治理方案之Dubbo+zookeeper

一.三种微服务治理方案

Dubbo+Zookeeper、Spring Cloud Alibaba以及Spring Cloud Netflix是三种常见的微服务治理方案,它们各自具有独特的特点和优势。以下是对这三种方案的详细分析:

dubbo+zookeeper

  • dubbo:- 简介:dubbo是阿里巴巴自主研发的RPC(Remote Procedure Call,远程过程调用)框架,它提供了面向接口的远程方法调用、智能容错和负载均衡以及服务自动注册和发现等核心能力。- 特点:dubbo使用原生的RPC技术来进行服务调用,相比使用REST API的框架,dubbo在性能上更具优势。然而,dubbo对于service接口的依赖较重,需要有效的工具或方法来管理这些依赖关系。
  • zookeeper:- 简介:zookeeper是Apache组织的顶级开源项目之一,主要用于服务于大数据生态圈。在dubbo中,zookeeper起到服务注册中心的作用,它统一管理注册服务,并基于观察者模式设计,能够在服务提供者模块发生变化时即时通知消费者。- 特点:zookeeper具备高可用性,当集群中的某一台机器出现故障时,dubbo会自动访问zookeeper集群中的其他主机。此外,zookeeper还提供了统一的命名服务、配置维护、集群管理以及分布式消息同步和协调机制等功能。

Spring Cloud Alibaba

  • 简介:Spring Cloud Alibaba是阿里巴巴提供的基于Spring Cloud的微服务解决方案,它整合了阿里巴巴开源的微服务相关组件,并提供了简单易用的编程模型和工具,以帮助开发者快速构建基于Spring Cloud的微服务应用。
  • 特点:Spring Cloud Alibaba提供了丰富的微服务治理功能,如服务限流降级、服务注册与发现、分布式配置管理、消息驱动能力等。此外,它还支持Nacos作为服务注册与发现中心,以及Sentinel作为流量防卫组件,为微服务应用提供了全面的保护和治理。

Spring Cloud Netflix

  • 简介:Spring Cloud Netflix是Spring Cloud的一套实现,它基于Netflix开源组件来构建微服务架构。Spring Cloud Netflix提供了服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态等微服务治理功能。
  • 特点:Spring Cloud Netflix采用Eureka作为服务注册与发现中心,并使用Hystrix作为断路器来防止服务的雪崩效应。此外,它还支持Ribbon进行负载均衡以及Zuul或Gateway作为API网关来提供路由和过滤功能。Spring Cloud Netflix的功能完备且组件众多,为微服务应用提供了全方位的治理和保护。

对比分析

  • 性能:dubbo+zookeeper在性能上更具优势,因为它使用原生的RPC技术来进行服务调用。而Spring Cloud Netflix和Spring Cloud Alibaba则采用HTTP协议进行远程调用,性能上可能稍逊于dubbo。
  • 生态:Spring Cloud Alibaba和Spring Cloud Netflix依托于Spring平台和Netflix开源组件,具备更加完善的生态体系。而dubbo虽然性能优越,但生态相对匮乏,需要开发者自行寻找相应的解决方案。
  • 组件:dubbo+zookeeper的组件较少,但功能相对完备(可以自己寻找解决方案)。而Spring Cloud Netflix和Spring Cloud Alibaba则提供了丰富的微服务治理组件和功能,能够满足开发者在微服务应用中的各种需求。

二.Dubbo+zookeeper

1 Dubbo介绍

Dubbo 作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。

如上图所示,服务提供者(Provider)启动后,会将自身的服务注册到注册中心(zookeeper)中,包括服务地址、版本号等信息。

服务消费者(Consumer)想zookeeper中订阅所需服务。

注册中心(zookeeper)会监视服务提供者,服务提供者出现变更或故障时,就会通知消费者。

Dubbo 可以帮助解决如下微服务实践问题:

  • 微服务编程范式和工具

Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)

  • 高性能的 RPC 通信

Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题。

  • 微服务监控与治理

Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。

  • 部署在多种环境

Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下。

2 Dubbo工作原理

Dubbo 的工作原理涉及多个层面,主要包括服务注册与发现、服务调用、服务治理、以及高可用设计等方面。以下是Dubbo的核心原理组成部分:

  • 服务注册与发现
  1. 当服务提供者启动时,它会将自己提供的服务接口、实现类、IP地址、端口号等元数据信息注册到注册中心(如Zookeeper、Nacos等)。
  2. 服务消费者在启动时,会订阅并从注册中心拉取服务提供者的地址列表,并在本地缓存这些信息,后续直接使用本地缓存的信息进行服务调用,减少对注册中心的依赖。
  • 服务调用
  1. 服务消费者通过代理(Proxy)的方式调用服务,Dubbo会为服务生成客户端Stub和服务端Skeleton,使得调用过程对开发者透明。
  2. 调用过程中,Dubbo支持多种负载均衡策略(如随机、轮询、最小活跃调用数等),选择合适的服务提供者进行调用。
  3. 调用请求会经过一系列的过滤器(Filter),这些过滤器可以用来做日志记录、监控、权限控制、事务处理等。
  4. 调用是基于Dubbo自定义的RPC协议进行的,支持多种序列化方式,如Hessian、Java自带序列化、Kryo等。
  • 服务治理
  1. Dubbo提供了服务路由、动态配置、服务降级、熔断、限流等服务治理功能,可以根据预设的规则对服务调用进行控制,提高系统的稳定性和弹性。
  2. 监控层负责收集服务调用的统计信息,如调用次数、响应时间等,便于运维人员监控系统状态。

3 Dubbo实现

3.1 环境部署

下载zooKeeper。

docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v /opt/zookeeper/data:/data --name zookeeper --restart=always
registry.cn-hangzhou.aliyuncs.com/vms_app/zookeeper:3.6.3

第一步:
打开文件  etc/docker/daemon.json
第二步
将下列代码加到文件中
{
    "registry-mirrors":[
       "https://registry.docker-cn.com",
       "https://hub-mirror.c.163.com",
       "https://docker.m.daocloud.io",
       "https://9zp47653.mirror.aliyuncs.com"
    ]
}
第三步
 重启docker
先后执行下列命令
sudo systemctl daemon-reload
sudo systemctl restart docker

3.2 创建工程(zookeeper+spring boot+dubbo)

3.3 添加依赖

<properties>
    <dubbo.version>3.2.0-beta.4</dubbo.version>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>      
        <!-- Dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-bom</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

provider+consumer

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>    
        <exclusions>
            <exclusion>
                <artifactId>slf4j-reload4j</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.beiyou</groupId>
        <artifactId>dubbo-spring-boot-demo-interface</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

</dependencies>

interface接口提供工程,无依赖!

3.4 项目介绍

3.4.1 interface

在interface工程在书写要提供的接口,接口不需要其他配置,普通的接口就行,后续围绕接口展开。

3.4.2 provider

在启动类中开启Dubbo功能

实现接口并发布服务

填写配置信息

dubbo.protocol.name:

协议名称有许多种类,下面是协议名称及其简介:

dubbo:

这是 Dubbo 默认的服务通信协议,使用

20880

端口。它是一个高性能的 RPC 协议,专为微服务架构设计,支持多种序列化方式(如 Hessian, Kryo 等)。

rest:

RESTful 协议,支持 HTTP 和 JSON 数据格式。这对于需要与其他系统(如 Web 应用程序)集成的服务特别有用。

http:

基于 HTTP 协议的服务暴露和消费协议。它使用标准的 HTTP 请求来调用远程服务,适合于 Web 服务场景。

https:

类似于

http

协议,但是使用了 SSL/TLS 加密,增强了安全性。适合需要安全通信的应用场景。

hessian:

使用 Caucho 公司的 Hessian 协议,这是一种基于 HTTP 的二进制协议,主要用于跨语言的服务调用。

webservice:

基于 SOAP 协议的服务暴露和消费协议,适用于需要兼容 SOAP 标准的企业级应用。

redis:

使用 Redis 协议,可以将服务注册到 Redis 中,并通过 Redis 进行服务发现。

motan:

Motan 是另一个高性能的 RPC 框架,Dubbo 可以通过 motan 协议与 Motan 服务交互。

thrift:

Apache Thrift 是一个跨语言的软件框架,用于开发可扩展的跨平台服务。Dubbo 支持使用 Thrift 协议进行服务间的通信。

bolt:

Bolt 是一个轻量级的网络通信框架,提供了高性能的网络通信能力,可以作为 Dubbo 的一种传输协议。

dubbo.protocol.port:

Dubbo的协议端口设置为-1时,会寻找默认端口,如果默认端口被占用就随机选用一个可用的端口。

dubbo.registry.address:

定义了注册中心的地址,Dubbo服务会向这个注册中心注册自己的信息,并发现其他服务。

${zookeeper.address:127.0.0.1}:2181

这个表达式意味着注册中心是一个Zookeeper实例,其默认地址是

127.0.0.1:2181

。如果环境变量

zookeeper.address

被设置,则使用该环境变量的值作为地址的一部分。

3.4.3 consumer

application.properties

3.5 测试

3.5.1 虚拟机/本地启动zookeeper

3.5.2 启动项目

provider

表示provider启动成功,虚拟机启动zookeeper的时候,启动项目第一次建立连接会很慢,不用在意,第二次会好一点点,不过有限。

consumer

3.5.3 观察效果

建立连接,如果是虚拟机开启的zookeeper,选择虚拟机地址,如果是本地开启的zookeeper,选择默认地址localhost:2181

具体结构

mapping目录下是接口,接口的全类名文档中是他的实现类的项目名称

metadata下说接口的全类名,全类名下有其发布者和消费者的信息

config: 这个目录包含了Dubbo服务的配置信息,如服务、路由规则等。

转换成json

provider具体状态信息

consumer具体状态信息

prettyzoo

连接成功后

两者相差不大,只是prettyzoo多了数据的格式转化和一些基础设置。

3.6 通过控制器调用方法

3.6.1 在interface中定义其接口和参数

Test1

Product

ProductQuery

3.6.2 在provider中实现方法

3.6.3 在consumer中添加控制器

3.6.4 测试

4 Dubbo与Spring Cloud的区别

1 协议支持

Dubbo支持多种协议,Spring Cloud主要支持HTTP协议。

2 服务治理

Dubbo提供了丰富的服务治理功能,如服务注册与发现、负载均衡、服务降级、服务限流等。Spring Cloud通过多个组件协同实现服务治理功能,每个组件负责特定的功能。

3 性能

Dubbo 高

Spring Cloud 低

4 开发难度(调试)

Dubbo 配置较为复杂,调试难度较高。

Spring Cloud 借助 Spring Boot 的自动配置和约定大于配置的理念,通过注解和简单的配置即可构建微服务应用,开发相对较为简单。

5 完整代码

https://codeup.aliyun.com/62858d45487c500c27f5aab5/Java-ljj


本文转载自: https://blog.csdn.net/zhzjn/article/details/143078380
版权归原作者 这孩子叫逆 所有, 如有侵权,请联系我们删除。

“微服务治理方案之Dubbo+zookeeper”的评论:

还没有评论