RPC基础/dubbo入门知识点

学习链接:添加链接描述

目录

  • 分布式系统
    • 概念
  • RPC基础
    • 概念
    • 核心原理
  • 网络编程
      • Sockets
      • Netty
  • Dubbo入门
      • 概念
      • 使用步骤
        • 直连方式
        • 服务化最佳实现
      • dubbo版本

分布式系统

概念

即若干个独立的系统,但看起来是统一的整体。将不同的程序分布部署多个计算机服务器上。
演变:由最初的单一应用架构(所有业务放在同一台服务器上)->垂直应用架构()

RPC基础

概念

RPC(remote procedure call)即远程过程调用。
原因:由于两个及以上不同的服务器上的服务所提供的方法不在同一个内存中,所以需要通过网络编程的方式才能传递方法调用所需要的参数。方法调用的结果通常通过网络编程来接收。
简单来说:两个不同服务器上的服务,通过RPC可以想在本地调用本地方法一样。

核心原理

RPC核心功能:

  1. 客户端(服务消费端):调用远程方法的一端。
  2. 客户端Stub(桩):代理类。把调用方法、类、参数等信息传递到服务端。
  3. 网络传输:在客户端调用的方法信息传输到服务端,然后服务端执行完之后再把返回结果通过网络传输给客户端。网络传输方式:Socket、Netty等。
  4. 服务端Stub:接收客户端请求后,去指定对应的方法然后返回结果给客户端的类。
  5. 服务端(服务提供端):提供远程方法的一端。

RPC基础/dubbo入门知识点_第1张图片
链接:添加链接描述

  • 客户端(client)本地调用方式调用远程服务;
  • 客户端Stub接收到调用后负责将方法、参数等组装成能够进行网络传输(sockets)的消息体(序列化);
  • 客户端找到远程服务地址,将消息发送到服务端;
  • 服务端Stub收到消息将消息反序列化为java对象;
  • 服务端Stub根据java对象中的类、方法和参数等信息调用本地方法;
  • 服务端Stub得到方法执行结果并将组装成能够进行网络传输的消息体:序列化后发送给客户端;
  • 客户端Stub接收到消息并将其反序列化成java对象。

序列化方式:xml/json/二进制流等。数据只能以二进制的方式在网络中传输,由于计算机之间传递的信息最小单位是字节流,序列化就是将一个对象保存为二进制字节码的过程。

网络编程

Sockets

添加链接描述

Netty

Dubbo入门

概念

dubbo是一款微服务框架,为大规模服务实践提供高性能RPC通信、流量治理等解决方案。ali创建,后加入apache。

常见的RPC框架还有:Motan(新浪微博开源的一款RPC框架)
、gRPC、Thrift等
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f2e4aa378444cee9ca19b5ba80272fa.pngRPC基础/dubbo入门知识点_第2张图片

  • registry:注册中心。服务的注册和发现,并发送提供者地址列表给消费者;
  • container:容器。放入需要进行RPC的业务的接口、方法等;
  • provider:提供者。作为业务的提供者,将暴露业务的接口、方法等信息,会向注册中心注册自己的的业务;
  • consumer:消费者。作为业务的调用者,向注册中心订阅自己需要的业务,采用负载均衡的方式进行调用;
  • monitor:监控中心。有对应的可视化界面,存放服务者与消费者的调用的时间、内存等信息。不论调用注册,都会和监控中心报备;
  • 配置中心Config center:存放dubbo启动阶段消费者与提供者的所有配置,保证配置的跨环境共享与全局一致性;
  • metadata元数据中心:维护接口与服务之间的映射关系。作为服务发现的补充,提供额外的接口、方法级别配置信息的同步能力,相当于注册中心的扩展。

使用步骤

直连方式

不需要注册中心,服务者与消费者直连

  1. 服务提供者
    a. 导入依赖:dubbo
    b. 业务类
public interface MonitorDataCxRelationHandler {
    String uploadMonitorCxRelationFile(String destinationFileName) throws Exception;
}
@Component
public class MonitorDataCxRelationHandlerImpl  implements MonitorDataCxRelationHandler {
 
    @Override
    public String uploadMonitorCxRelationFile(String destinationFileName) throws Exception {
        // 判断文件地址是否为空
        if(destinationFileName == null || destinationFileName.isEmpty()){
            return "文件上传失败";
        }
        return uploadMonitorCxRelationFile(destinationFileName);
    }
}

c. 配置中心

<!--   服务提供者名,引用apache的dubbo -->
<dubbo:application name="provider_1">
<!--   服务提供者协议定义,N/A表示直连,没有注册中心 -->
<dubbo:protocol name="dubbo" port="2180" registry="N/A">
<!--   暴露接口 -->
<dubbo:service interface ="接口的全限定类名" ref="定义的容器名,即暴露的业务名">

记得配置注解驱动以及注解扫描

  1. 消费者

a. 导入依赖
b. 配置中心

<!--   消费者名,引用apache的dubbo -->
<dubbo:application name="consumer_1">
<!--   消费者 -->
<dubbo:reference interface="业务的实现接口" url="dubbo(提供者定义的协议名)://localhost:端口号" registry="N/A">

c. 调用业务

服务化最佳实现

即单独设置公共包和接口为一个系统,接口实现为提供者,调用者为消费者。
配置zookeeper

  1. 中间公共系统处中加配置
    配置文件修改
<dubbo:registry address:"zookeeper://localhost:2181">
<dubbo:service interface ="接口的全限定类名" ref="定义的容器名,即暴露的业务名">
  1. 消费者定义注册中心
<dubbo:registry address="zookeeper://localhost:2181">
<dubbo:reference id="容器" interface="业务实现定义全限定类名">
  1. 依赖:org.apache.curator-》curator-framework
    具体实现可参考:添加链接描述

dubbo版本

添加链接描述

dubbox-2.8.1:主要支持嵌入式tomcat的http-remoting,优化了rest客户端性能等;servletApi升级到 3.1;支持基于Kryo和FST的Java高效序列化,并支持默认的json序列化;

dubbo:使用Dubbo的RPC调用方式,服务间仍然会存在API强依赖;
dubbox:相对于Dubbo支持了REST风格的原创调用(HTTP +JSON/XML);
支持REST风格远程调用(HTTP + JSON/XML);
支持基于Kryo和FST的Java高效序列化实现;
支持基于Jackson的JSON序列化;
支持基于嵌入式Tomcat的HTTP remoting体系;
升级Spring至3.x;
升级ZooKeeper客户端;
支持完全基于Java代码的Dubbo配置;

你可能感兴趣的:(实习工作,sj项目其他,dubbo,rpc,网络)