Dubbo
Dubbo 与 RPC 的关系
Dubbo 是一种开源的分布式服务框架,由阿里巴巴公司开发。它为应用程序提供高性能的 RPC(近程过程调用)通信和服务治理能力,让应用程序可能在分布式环境中疾速构建高可靠性和可扩展性的服务。Dubbo 外围性能包含服务注册与发现、负载平衡、服务调用和容错能力等,实用于多种语言和多种异构环境的通信。Dubbo 采纳阻塞 I/O 和线程池的形式来实现高并发,同时还反对多种协定和序列化格局的扩大。其生态系统日趋完善,用户社区沉闷,被广泛应用于 Web 利用,企业级中间件,大数据等畛域。
Dubbo 的外围
Dubbo 的外围包含了:
- 近程通信:Dubbo 提供了多种近程通信协定,如 Dubbo 协定、Http 协定 、RMI 协定等。其中,Dubbo 协定是 Dubbo 自带的一种二进制、高性能的 RPC 通信协定,具备较低的序列化和反序列化开销,适宜高并发、大数据量的服务通信。
- 集群容错:当 Dubbo 消费者发动服务调用时,Dubbo 提供了多种集群容错策略,如 Failover、Failfast、Failsafe、Failback 等。Failover 是 Dubbo 的默认集群容错策略,其会在服务提供者出错或超时时主动切换到其余可用节点进行调用,保障调用的可靠性。
- 主动发现:为了便于管理泛滥的服务提供者,Dubbo 提供了注册核心作为服务注册与发现的中心化管理工具。Dubbo 反对多种注册核心,如 ZooKeeper、Redis、Consul、Etcd 等。通过注册核心,服务消费者能够主动发现可用的服务提供者,而无需手动配置服务提供者地址,大大降低了服务调用的复杂度。
Dubbo 和 Spring Cloud 区别
Dubbo 是一个高性能的 RPC 框架,次要用于构建微服务架构下的服务治理和服务通信。它能够十分不便地扩大服务,进步零碎的性能和可扩展性。
Spring Cloud 是一个残缺的微服务框架,它提供了一整套微服务框架的解决方案,包含服务注册与发现、配置核心、负载平衡、断路器、路由等等,比 Dubbo 更为全面。
深刻理解: 微服务框架比照:Spring Cloud vs Dubbo
Dubbo 的节点
- Provider:公布服务,并将服务注册到注册核心,期待消费者调用。
- Consumer:从注册核心订阅服务,和服务提供者进行通信,生产服务。
- Registry:记录服务提供者的信息,以及服务提供者和服务消费者之间的关系,帮忙消费者发现可用的服务实例。
- Monitor:收集 Dubbo 节点的性能指标、服务调用统计信息等,以便运维人员进行监控和治理。
- Container:服务的运行容器
Dubbo 的框架
Dubbo 的框架 包含了:
- 繁多利用框架:实用于流量较小的时候
- 垂直利用框架:实用与流量较大的时候
- 分布式服务架构:实用于垂直利用架构较多的时候
- 流动计算架构:当流量超级大的时候,须要一个调度核心
Dubbo 服务
Dubbo 接口定义
咱们能够写一个 sayHello 的办法。
/**
* xml 形式服务提供者接口
*/
public interface ProviderService {String SayHello(String word);
}
接着,定义它的实现类。
/**
* xml 形式服务提供者实现类
*/
public class ProviderServiceImpl implements ProviderService{public String SayHello(String word) {return word;}
}
而后,导入 maven 依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ouyangsihai</groupId>
<artifactId>dubbo-provider</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https: //mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
</project>
公布 Dubbo 接口
接口写完之后,须要进行接口的公布,这样能力拜访到此接口。
package com.sihai.dubbo.provider;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.alibaba.dubbo.container.Main;
import com.sihai.dubbo.provider.service.ProviderService;
import com.sihai.dubbo.provider.service.ProviderServiceImpl;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* xml 形式启动
*
*/
public class App
{public static void main( String[] args ) throws IOException {
// 加载 xml 配置文件启动
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/provider.xml");
context.start();
System.in.read(); // 按任意键退出}
}
启动 Dubbo 服务
最初就是启动 Dubbo 服务,看到以下 log,阐明启动胜利。
常识扩大:
- 分布式 RPC 框架比拟:dubbo、dubbox、motan、thrift、grpc
- 深刻了解 Dubbo:原理和机制详解