DUBBO详解,Nacos注册中心实现服务注册与发现

什么是Dubbo

Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架

致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。

DUBBO 总体架构

DUBBO详解,Nacos注册中心实现服务注册与发现_第1张图片

节点角色说明

  1. Provider 暴露服务的服务提供方
  2. Consumer 调用远程服务的服务消费方
  3. Registry 服务注册与发现的注册中心
  4. Monitor 统计服务的调用次数和调用时间的监控中心
  5. Container 服务运行容器

调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo主要特性

  • 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,屏蔽了远程调用底层细节。
  • 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
  • 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
  • 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
  • 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
  • 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

整体设计

  1. Service服务层:具体业务实现
  2. Config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  3. Proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  4. Registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService
  5. Cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance
  6. Monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
  7. Protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
  8. Exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  9. Transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
  10. Serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

Dubbo协议

  1. Dubbo :Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
  2. Http :基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现,2.3.0 以上版本支持。
  3. Hessian :Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

Dubbo 案例不使用注册中心

Server




    
    
    
    
    


public interface ILoginService {
    String login(String userName,String pwd);
}

public class LoginServiceImpl implements ILoginService {
    @Override
    public String login(String userName, String pwd) {
        return userName + " success";
    }
}

Clent




    
    
    


    public static void main( String[] args ) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:META-INF/spring/application.xml");
        ILoginService service=applicationContext.getBean(ILoginService.class);
        System.out.println( service.login("username", "pwd"));
    }

Dubbo 使用nacos注册中心

nacos下载地址

https://github.com/alibaba/nacos/tags

DUBBO详解,Nacos注册中心实现服务注册与发现_第2张图片

1、Windows:

	startup.cmd -m standalone

2、Linux:

	startup.sh -m standalone

3、本地访问

	http://127.0.0.1:8848/nacos/#/login    # username:nacos  password:nacos

DUBBO详解,Nacos注册中心实现服务注册与发现_第3张图片

Server Client

只需要修改注册的协议,启动客户端调用dubbo接口

 

DUBBO详解,Nacos注册中心实现服务注册与发现_第4张图片
DUBBO详解,Nacos注册中心实现服务注册与发现_第5张图片

你可能感兴趣的:(rpc)