thrift学习1 | 青训营笔记

124 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第2天。

流计算项目的实现需要用到 RPC 技术,在队长的引领下,小组成员进行了rpc、thrift、netty、akka 等的学习。下面是我个人对 rpc 和 thrift 的一些学习笔记。

RPC

RPC 是什么

分布式系统涉及多个节点,节点和节点之间通过消息传递进行通信和协作,因此节点之间的通信是重要环节。

远程过程调用(RPC,Remote Produce Call)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。是分布式系统中的一个重要通信技术。

RPC 将过程调用的通用编程抽象扩展到了分布式环境,使得节点可以像调用本地过程那样去调用远程结点上的过程。对于调用者,它感知不到远程调用的过程,是透明的。

RPC 只一种设计,具体的实现中可以结合多种协议实现,如HTTP,TCP,UDP等。

RPC 的示例

基于Python Socket 实现一个最基础的 RPC 框架。参考: 使用Python实现RPC框架

  • 请求-应答协议:具有两个节点,客户端和服务端(项目中用两个进程模拟)。服务端等待着请求的到来。当客户端调用函数时,RPC模块向服务端发起请求。服务端接收请求、执行函数和返回结果。

  • 过程调用:如定义了sum(float a, float b)的加法过程,客户端调用 sum(1, 2) 时,其本地并没有sum这个函数。

此时将通过RPC 机制将函数名、函数参数等传递给服务端,服务端执行并获得了 sum result=3,再将结果返回给客户端。

  • 存根过程:负责消息的序列化、反序列化。

  • 跨语言:客户端和服务端可以使用不同的编程语言实现。

thrift 基础

thrift 简介

Thrift 是一个成熟的 RPC 框架,能很方便的进行可扩展且跨语言的服务的开发。

thrift 允许通过一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成 RPC 客户端和服务器通信的无缝跨编程语言。

thrift 入门

上手参考:# 一步步完成thrift rpc示例

使用的主要流程如下:

  1. 下载thrift编译器,这里直接下载windows 版本。# thrift 下载
  2. 写.thrift文件,定义传输的数据对象和提供的具体服务 比如写一个hello.thrift,提供的服务是服务端会获取客户端传输过来的 name,并打印出来:
namespace java com.tutorial.thrift.service    
service  GreetingService {
    string sayHello(1:string name)  
}
  1. 运行编译命令:thrift --gen ;自动生成该语言对应的接口文件。 比如 windows版本的 thrift 生成 java 文件:

        thrift-0.10.0.exe -gen java hello.thrift
    
  2. 将 java 文件放入自己的项目中,服务端和客户端的项目都需要放入。

  3. 服务端 Service 需要实现服务的具体方法:

  4. 服务端 Server 需要定义 Transport, Protocol, Processor, 启动服务端和关联服务方法

  5. 客户端 Clinet 创建 transport 连接客户端,并调用RPC 服务接口提供的方法。

  6. 添加依赖,编译项目,启动 Server, 再运行 Client 端代码,实现客户端 Clinet 到 Server 的 name 数据传递。