分布式中台实践-Dubbo学习之架构讲述

2024-02-16 13:58

本文主要是介绍分布式中台实践-Dubbo学习之架构讲述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dubbo作为阿里巴巴的一个开源架构,其目标是完成传统程序的分布式部署,为大数据并发提供技术支撑。

1、系统架构

 

消费者:负责订阅注册中心的服务和接收注册中心的通知。另外,消费者能够根据本身的服务记录直接调用生产者的服务。

生产者:对外提供服务和向注册中心注册服务。

注册中心:注册订阅服务和主动发现服务状态并通知。

监控中心:负责监控消费者和生产者的服务调用次数

在消费者、生产者和注册中心维持者长连接,因此注册中心能够及时的了解生产的服务状态,并将其通知到消费者。在生产者和消费者之间的核心因素为通信协议,Dubbo支持的通信协议包括Dubbo、RMI、Hessian、Http、webService、memcached和Redis,其调用都通过代理方式实现。

2、Maven配置

Dubbo项目的版本维护采用Maven,因此在开发之前需要首先配置Maven的依赖关系,配置信息如下:

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.5.7</version>

</dependency>

3、最佳实践

Dubbo的实现可以采用配置文件和注解,其官方建议采用XML的配置方式实现。

3.1采用组播技术注册生产者

作为一个快速实现的案例,我们定义一个简单的接口和简单的实现,如下:

public interface GreetingsService {

String sayHi(String name);

}

public class GreetingsServiceImpl implements GreetingsService {

@Override

public String sayHi(String name) {

return "hi, " + name;

}

}

消费者为了进行远程调用,必须与服务方公用服务调用接口。另外,服务方必须依托于服务容器,此案例采用Spring+Tomcat作为容器方。

3.2服务实现后需要将其注册到祖册服务中心:

<dubbo:application name="demo-provider" version="1.0"/>

<dubbo:registry address="multicast://224.1.1.1:9090"/>

<dubbo:protocol name="dubbo" port="20880"/>

<bean id="greetingsService" class="com.baeldung.dubbo.remote.GreetingsServiceImpl"/>

<dubbo:service interface="com.baeldung.dubbo.remote.GreetingsService"

ref="greetingsService"/>

具体参数解析:

注册服务地址为:multicast://224.1.1.1:9090

注册协议采用dubbo,接口采用20880

另,将生产服务接口和实现也通过服务实现。

3.3服务消费者注册

<dubbo:application name="demo-consumer" version="1.0"/>

<dubbo:registry address="multicast://224.1.1.1:9090"/>

<dubbo:reference interface="com.baeldung.dubbo.remote.GreetingsService"

id="greetingsService"/>

3.4 启动服务

public class MulticastRegistryTest {

@Before

public void initRemote() {

ClassPathXmlApplicationContext remoteContext

= new ClassPathXmlApplicationContext("multicast/provider-app.xml");

remoteContext.start();

}

@Test

public void givenProvider_whenConsumerSaysHi_thenGotResponse(){

ClassPathXmlApplicationContext localContext

= new ClassPathXmlApplicationContext("multicast/consumer-app.xml");

localContext.start();

GreetingsService greetingsService

= (GreetingsService) localContext.getBean("greetingsService");

String hiMessage = greetingsService.sayHi("baeldung");

assertNotNull(hiMessage);

assertEquals("hi, baeldung", hiMessage);

}

}

当生产者启动时,Dubbo自动将服务注册到服务中心,本机为组播注册。消费者向注册中心订阅,并创建服务代理调用服务方的服务。此外,消费者也可以直接向服务方发起服务,

<dubbo:reference interface="com.baeldung.dubbo.remote.GreetingsService"

id="greetingsService" url="dubbo://127.0.0.1:20880"/>

4、简单注册服务

组播注册服务适用于服务方和消费方在同一局域网的情景,如果在公网上建议采用单独的注册服务。如果在测试环境,则可以通过简单的注册服务实现;如果在生产环境,建议采用zookeeper实现服务注册于发现。

4.1启动简单注册服务

<dubbo:application name="simple-registry" />

<dubbo:protocol port="9090" />

<dubbo:service interface="com.alibaba.dubbo.registry.RegistryService"

ref="registryService" registry="N/A" ondisconnect="disconnect">

<dubbo:method name="subscribe">

<dubbo:argument index="1" callback="true" />

</dubbo:method>

<dubbo:method name="unsubscribe">

<dubbo:argument index="1" callback="true" />

</dubbo:method>

</dubbo:service>

<bean class="com.alibaba.dubbo.registry.simple.SimpleRegistryService"

id="registryService" />

服务方服务注册替换为:

<dubbo:registry address="127.0.0.1:9090"/>

5、集群服务配置

5.1可以通过Zookeeper实现注册服务集群的配置管理,配置如下

<dubbo:registry address="zookeeper://127.0.0.1:2181"/>

另外,在Maven依赖中,需要做如下配置:

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.4.11</version>

</dependency>

<dependency>

<groupId>com.101tec</groupId>

<artifactId>zkclient</artifactId>

<version>0.10</version>

</dependency>

5.2Dubbo支持服务集群的另一个特性是在前端支持负载均衡,配置如下:

<dubbo:reference interface="com.baeldung.dubbo.remote.GreetingsService"

id="greetingsService" loadbalance="roundrobin" />

通过以上的特性,Dubbo能够实现注册服务的集群化和服务的集群化,从而能够使得服务实现横向的扩展,最终完成大规模集群的应用。

5.3为了保证服务集群的稳定,Dubbo还实现了服务的容灾处理,包括:

失败重连、失败安全、快速重启、失败回复等技术,保证服务的稳定可靠,其配置方式如下:

<dubbo:service interface="com.baeldung.dubbo.remote.GreetingsService"

ref="greetingsService" cluster="failover"/>

<dubbo:reference interface="com.baeldung.dubbo.remote.GreetingsService"

id="greetingsService" retries="2" timeout="2000" />

通过以上讲述,我们能够看到Dbubbo作为中台的广阔应用前景。当然,此处也会是作为架构的管中窥豹,向服务的协议、服务的调用

远程代理模式、注册服务、监控等服务还没有深入的讲述,本篇文章仅仅作为Dubbo的入门之作,希望能够帮到大家。

参考文献:

http://www.baeldung.com/dubbo

 

 

 

 


这篇关于分布式中台实践-Dubbo学习之架构讲述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714737

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb