分布式中台实践-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

相关文章

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

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再