首先,最近公司对原来的项目重构,用thriftpy框架(饿了么对thrift的python实现),原来的thriftpy废弃了,现在基本都用的是thriftpy2。刚刚接触到RPC方面的东西,网上关于thriftpy2的资料也比较少,就想写自己的第一篇博客吧。

python搞微服务,是最近的趋势,但相关的资料很少。我会大概梳理下大概的流程,具体的百度下就ok了。

先讲RPC,这是远程功能调用,就是我们原来是一个整体的项目,现在需要拆分为一个个服务。RPC框架就是编程人员在同一台机器的不同进程之间,或者同的机器之间,进行远程调用代码的工具。这样我们就不用去管底层的具体实现,只需要搞好我们原来的业务逻辑处理。

然后就是我们的thrift框架,主要用于各个服务之间的RPC通信。支持跨语言,比如客户端用python写,服务端可以用java来写,这都取决于开发者。

thrift的实现步骤

通过IDL(接口定义语言) ==> 来定义 RPC(远程过程调用)的接口和数据类型 ==> thrift编译器生成不同语言的代码 ==> 负责RPC协议层和传输层的实现

thrift框架通过定义IDL文件,来来关联客户端和服务端

IDL文件中定义的内容,定义我们要运行的服务,需要的变量等

指定目标语言
namespace language xxx(文件夹目录)

定义变量
const 

定义结构体
struct xxx{
    
}

定义服务
service xxx{
    
}

在thrift框架中,我们需要执行 thrift --gen <language> <Thrift filename>,帮我们生成相应的thrift 服务需要的依赖文件

构建服务端代码,客户端代码,具体的我就不说了,官方也有给出例子。

thrift框架的github地址

https://github.com/apache/thrift

 

thriftpy2框架是以pythonic方式实现的,不需要通过thrift文件,生成SDK,只需要动态导入thrift文件即可

https://github.com/Thriftpy/thriftpy2

安装也很简单,不过微服务基本都是用docker容器来运行服务,通过Dockerfile安装在容器内即可

pip install thriftpy2

thriftpy2的基本流程

我们需要定义thrift文件,来描述服务接口

定义客户端代码

定义服务端代码

先开启服务,就可以执行客户端
如果需要同时提供多个服务,就需要建立多个.thrift文件来实现

 

thriftpy2中服务端和客户端都需要调用thriftpy2.load方法,对thrift文件进行解析,会在内存中构建相应的module

1.thriftpy2构建服务端

调用thriftpy.load方法对thrift文件进行解析,在内存中构建对应的module
调用make_server将构建的module和完成具体业务功能的class绑定,同时完成传输层和协议层的设置,生成thrift服务器端
调用server.serve方法启动服务器

2.thriftpy2构建客户端接口

调用thriftpy.load方法对thrift文件进行解析,在内存中构建对应的module
调用make_client绑定上一步构建的module,同时完成传输层和协议层的设置,生成Thirft客户端
根据生成的客户端调用响应的接口

 

由于微服务基本都会用docker来运行,用docker来搭建python微服务,大家可以参考下https://blog.csdn.net/qq_35394891/article/details/84144936

简单说下吧,通过Dockerfile,来帮我们快速生成容器,使用的python版本,运行的命令以及我们需要安装的包等,生成对应的容器

这样我们就构建好容器了

通过gunicorn来帮助我们,运行服务

 

文笔方面,还有布局应该都比较差,将就看吧,有什么错误,还望指出,谢谢。

参考文档

https://blog.csdn.net/yzj225/article/details/76855991

https://blog.csdn.net/qq_35394891/article/details/84144936

https://blog.csdn.net/zkp_java/article/details/81879577

posted on 2019-07-07 23:28  亦无归路  阅读(5230)  评论(0编辑  收藏  举报