微服务治理方案之Dubbo+zookeeper

打印 上一主题 下一主题

主题 832|帖子 832|积分 2496

一.三种微服务治理方案

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的核心原理构成部分:


  • 服务注册与发现

  • 当服务提供者启动时,它会将自己提供的服务接口、实现类、IP地点、端口号等元数据信息注册到注册中心(如Zookeeper、Nacos等)。
  • 服务消耗者在启动时,会订阅并从注册中心拉取服务提供者的地点列表,并在本地缓存这些信息,后续直接使用本地缓存的信息举行服务调用,减少对注册中心的依靠。


  • 服务调用

  • 服务消耗者通过代理(Proxy)的方式调用服务,Dubbo会为服务生成客户端Stub和服务端Skeleton,使得调用过程对开辟者透明。
  • 调用过程中,Dubbo支持多种负载平衡计谋(如随机、轮询、最小活跃调用数等),选择合适的服务提供者举行调用。
  • 调用哀求会颠末一系列的过滤器(Filter),这些过滤器可以用来做日记记录、监控、权限控制、事件处理处罚等。
  • 调用是基于Dubbo自界说的RPC协议举行的,支持多种序列化方式,如Hessian、Java自带序列化、Kryo等。


  • 服务治理

  • Dubbo提供了服务路由、动态配置、服务降级、熔断、限流等服务治理功能,可以根据预设的规则对服务调用举行控制,进步体系的稳定性和弹性。
  • 监控层负责网络服务调用的统计信息,如调用次数、响应时间等,便于运维职员监控体系状态。
3 Dubbo实现

3.1 情况摆设

下载zooKeeper。

  1. docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v /opt/zookeeper/data:/data --name zookeeper --restart=always
  2. registry.cn-hangzhou.aliyuncs.com/vms_app/zookeeper:3.6.3
  3. 第一步:
  4. 打开文件  etc/docker/daemon.json
  5. 第二步
  6. 将下列代码加到文件中
  7. {
  8.     "registry-mirrors":[
  9.        "https://registry.docker-cn.com",
  10.        "https://hub-mirror.c.163.com",
  11.        "https://docker.m.daocloud.io",
  12.        "https://9zp47653.mirror.aliyuncs.com"
  13.     ]
  14. }
  15. 第三步
  16. 重启docker
  17. 先后执行下列命令
  18. sudo systemctl daemon-reload
  19. sudo systemctl restart docker
复制代码


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


3.3 添加依靠


  1. <properties>
  2.     <dubbo.version>3.2.0-beta.4</dubbo.version>
  3.     <java.version>1.8</java.version>
  4.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  5.     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  6.     <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
  7. </properties>
  8. <dependencies>
  9.     <dependency>
  10.         <groupId>org.springframework.boot</groupId>
  11.         <artifactId>spring-boot-starter-web</artifactId>
  12.     </dependency>
  13.     <dependency>
  14.         <groupId>org.springframework.boot</groupId>
  15.         <artifactId>spring-boot-starter-test</artifactId>
  16.         <scope>test</scope>
  17.     </dependency>
  18. </dependencies>
  19. <dependencyManagement>
  20.     <dependencies>      
  21.         <!-- Dubbo -->
  22.         <dependency>
  23.             <groupId>org.apache.dubbo</groupId>
  24.             <artifactId>dubbo-bom</artifactId>
  25.             <version>${dubbo.version}</version>
  26.             <type>pom</type>
  27.             <scope>import</scope>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>org.apache.dubbo</groupId>
  31.             <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
  32.             <version>${dubbo.version}</version>
  33.             <type>pom</type>
  34.         </dependency>
  35.     </dependencies>
  36. </dependencyManagement>
复制代码

provider+consumer
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>org.springframework.boot</groupId>
  4.         <artifactId>spring-boot-starter</artifactId>
  5.     </dependency>
  6.     <dependency>
  7.         <groupId>org.apache.dubbo</groupId>
  8.         <artifactId>dubbo-spring-boot-starter</artifactId>
  9.     </dependency>
  10.     <dependency>
  11.         <groupId>org.apache.dubbo</groupId>
  12.         <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>   
  13.         <exclusions>
  14.             <exclusion>
  15.                 <artifactId>slf4j-reload4j</artifactId>
  16.                 <groupId>org.slf4j</groupId>
  17.             </exclusion>
  18.         </exclusions>
  19.     </dependency>
  20.     <dependency>
  21.         <groupId>com.beiyou</groupId>
  22.         <artifactId>dubbo-spring-boot-demo-interface</artifactId>
  23.         <version>0.0.1-SNAPSHOT</version>
  24.         <scope>compile</scope>
  25.     </dependency>
  26. </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




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表