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

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定