ETL基于RPC服务数据抽取实现分析与实践

3,127 阅读3分钟

RPC服务指标数据抽取,根据服务指标参数抽取数据装载至数仓。

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC调用流程

  1. 服务消费方(client)调用以本地调用方式调用服务;
  2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
  3. client stub找到服务地址,并将消息发送到服务端;
  4. server stub收到消息后进行解码;
  5. server stub根据解码结果调用本地的服务;
  6. 本地服务执行并将结果返回给server stub;
  7. server stub将返回结果打包成消息并发送至消费方;
  8. client stub接收到消息,并进行解码;
  9. 服务消费方得到最终结果。
  • client stub作用为把请求的参数以约定的通讯协议打包好发送给服务端然后解析服务端返回消息,server stub为根据收到的请求信息执行相应的业务逻辑调用并把结果返回客户端,要定义一个RPC框架首先要定义好通讯格式。

RPC服务调用实践

  1. 远程代理对象:服务调用者用的服务实际是远程服务的本地代理。说白了就是通过动态代理来实现。
  2. 通信:RPC框架与具体的协议无关。
  3. 序列化:毕竟是远程通信,需要将对象转化成二进制流进行传输。不同的RPC框架应用的场景不同,在序列化上也会采取不同的技术。
  4. 常见RPC技术和框架
    • 应用级的服务框架:阿里的Dubbo/Dubbox、Google GRPC、Spring Boot/Spring Cloud。
    • 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
    • 通信框架:MINA和Netty。

Dubbo 服务调用

Dubbo RPC服务调用,需要用户配置服务协议、主机名、端口、接口名、方法名、查询参数等信息。

  1. 接口定义

  2. 服务注册发布

  3. 服务调用

  • Zookeeper协议
  • Dubbo协议
  • 获取数据

GRPC服务调用

GRPC服务调用,需要用户提供PROTO文件信息、主机名、端口、接口名、方法名、查询参数等信息。

GRPC客户端和服务端可以在多种环境中运行和交互 -从 GOOGLE内部的服务器到你自己的笔记本,并且可以用任何 GRPC支持的语言来编写。所以可以很容易地用GRPC支持的语言创建一个GRPC服务端,用 Java、Go、Python、Ruby来创建客户端。是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

  1. Proto接口描述文件

GRPC基于protobuf来声明数据模型和RPC接口服务。

  1. 生成客户端代码

  2. 服务调用

  3. 获取数据

SpringCloud服务调用

SpringCloud服务调用,需要用户提供主机名、端口、地址、查询参数等接口描述信息。

  1. 接口定义

  2. 服务注册

  3. 服务调用

  4. 获取数据

总结

ETL抽取RPC服务数据,需要提供服务接口相关描述信息,包括RPC服务端实现技术框架、服务接口定义、数据结构、或者中间态的服务定义文件。例如Facebook的 Thrift的IDL文件,Web service的WSDL文件;服务的调用者需要通过一定的场景获取远程服务调用相关的接口描述信息。