2023年,真的需要Thrift,RPC微服务框架来拯救传统HTTP接口(api)
目前市面上类似Django的drf框架基于json的http接口解决方案大行其道,人们也热衷于在接口不多、系统与系统交互较少的情况下使用它,http接口的优点就是简单、直接、开发方便,门槛低,利用现成的http协议进行传输。
但是事情往往有两面,如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http 一样去3次握手4次挥手,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。
论复杂度,RPC框架肯定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP协议,需要带HTTP请求头,导致传输起来效率或者说安全性不如RPC,目前市面上流行的rpc框架有dubbo/hessian Thrift,阿里开源的dubbo固然还不错,但是本人更倾向于facebook开源的Thrift框架,这款框架在github上好评如潮,这一次我们使用的就是基于Thrift的thriftpy2框架。
Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务,这是维基百科的描述。简单来说就是你可以按照Thrift定义语法编写.thrift,然后用Thrift命令行生成各种语言的代码,比如OC、Java、C++、JS,调用这些代码就可以完成客户端与服务器的通信了,不需要自己去写网络请求、数据解析等接口。
其实在本人的实际教学工作中主要考虑到这两个优点:
RPC。通过简单定义Thrift描述语言文件,使用Thrift -gen命令可以生成多种语言的代码,这些代码包含了网络通信,数据编解码的功能。这就免去了前后台编写这部分繁琐的代码,同时也统一了前后台的实现逻辑。
Thrift的二进制数据的编码比json更加紧凑、减少了无用的数据的传输。
安装: pip3 install thriftpy2
首先定义 thrift 通讯文件,无论是server端还是clinet端都是基于这个文件进行通信 pingpong.thrift service PingPong { string ping(), string check_login( 1: string username, 2: string password ), }
可以看到我们定义了两个方法,一个有参一个无参,第一个方法用来检测接口是否通信成功,也就是传统的ping命令,第二个方法顾名思义,用户登录
然后建立一个thrift_server.py 建立服务端的代码 import thriftpy2 pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift") from thriftpy2.rpc import make_server class Dispatcher(object): def ping(self): return "pong" def check_login(self,username,password): print(username,password) return "123" server = make_server(pingpong_thrift.PingPong, Dispatcher(), "127.0.0.1", 6000) server.serve()
服务端首先读取通信文件,然后建立起一个服务,监听6000端口,等待客户端请求,实际上服务端的方法也是主要业务逻辑编写的地方。
随后建立一个thrift_client.py文件,编写客户端代码 import thriftpy2 pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift") from thriftpy2.rpc import make_client client = make_client(pingpong_thrift.PingPong, "127.0.0.1", 6000) print(client.ping()) print(client.check_login("admin","123456"))
我们看到客户端同样读取通信文件,严格按照通信文件的方法调用方式进行传参调用,获取返回值
运行服务器端的服务 python3 thrift_server.py
然后再执行客户端脚本python3 thrift_client.py
可以看到服务端和客户端就可以通信了
可以说非常简单,这里着重提到的一点是Thrift的数据编解码,我们知道传统http接口通常以json为数据介质,json中一个对象类似于这样的:{"key":"content"},但实际上这个对象只有"content"才是我们真正想要的数据,而"key"这个字符串并不是我们实际需要的,只是为了做一个标记,方便我们查找"content"。而Thrift则可以省去"key"这个多余的字符串。
定义thrift的结构里的属性名称实际上在thrift数据二进制编解码是被忽略的(thrift的json编解码未验证),这个名称的作用只是作为生成的OC代码类的属性名称。这也解释了为什么Thrift的二进制编码会比平时使用的json更省流量。同时也说明了只要我们在.thrift文件中定义struct的时候保证struct的属性的顺序不变,即使通信双方使用了各自使用不同的属性名称也不会有问题。
随着请求并发量的提高,简单的HTTP肯定达不到预期的效果,Thrift或许才是你寻找的答案。
明天2023年3月19日生猪价格信息,稳中有涨明天2023年3月19日全国生猪价格稳中有涨。其中7地上涨,2地下跌,17地持平。今日(3月18日)生猪外三元均价7。63元斤。猪粮比5。341明日猪价,大部分地区稳定,少数地区上
朋友投资区块链发了财,后来我也进入了第一次接触数字货币区块链数字货币是时代产物,有的人说是无形财产,有的人说是一场骗局,对我来说太深奥了,也不是很明白,因为我也是刚入门的小白。我的一个朋友有一天找到我说想不想发财,我
顶替谁?外媒克罗地亚中卫帕夫洛维奇将以自由身加盟浙江队直播吧3月18日讯据克罗地亚媒体germanijak报道,租借效力圣埃蒂安的克罗地亚中卫马特奥帕夫洛维奇,很可能以自由身加盟浙江队。所有权属于里耶卡的帕夫洛维奇正在敲定前往浙江队的
历史杂谈秦汉时期陇西李氏的兴衰在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论和分享,又能给您带来不一样的参与感,感谢您的支持李姓自古以来就是一支非常庞大的姓氏宗族,但是在天下只有陇西郡的李氏家族数量最多,
两款骁龙7Gen2新机前瞻真我GTNeo5SE和红米Note12TPro怎么选?文小伊评科技最新发布的骁龙7Gen1处理器凭借极为强悍的外围配置和出色的性能一经发布就成为了非常热门的中端SOC,笔者在前几天的文章中也对这枚芯片进行了一个详细的解读。单纯站在性能
台前县各乡镇名称的来历1978年由范县析置,寿张故城南十二里有凤凰山,由于常年雨水冲刷,现在只剩一个小丘陵,按故城的方位,群众称为南台子。今县城设在南台子前,因名台前。城关镇台前县政府所在地而得名。侯庙
海南自由贸易港封关运作后,儋州和三亚哪个发展更快?我拭目以待头条创作挑战赛海南现在的很多年轻人知道三亚,但是不一定知道儋州。在40年前,可能很多的文化人知道儋州,并不知道三亚。儋州的历史可以追溯到唐朝,而三亚的历史仅仅只有不到40年。以前的
海南周刊丨清广彩开光波斯文人物花卉纹碗堆金织玉闻名于世特约撰稿李剑唐宋以降,海上丝绸之路逐渐成为中国对外贸易的主要通道。其中的南海航线,是从广州徐闻合浦出发,穿过南海诸岛,经马六甲海峡进入印度洋,而后西行至阿拉伯半岛欧洲非洲东部等。1
古山茶绽放迎客来2023年3月18日,演员在江苏省泰州市姜堰区溱潼古镇中国溱潼万朵古山茶观赏节开幕式上表演。当日,中国溱潼万朵古山茶观赏节拉开帷幕。据了解,溱潼万朵古山茶树高10。2米,每年9月孕
悬棺之谜,悬崖上的棺木是怎么放上去的?大家都知道入土为安,知道棺木都是埋在土里,但是你们知道悬在悬崖上的棺木吗?他是怎么放上去的呢?又是为什么要放上去呢?它又是哪个地方的丧葬民俗吗?今天小C就来和大家科普一下。科普1。
贵州永乐万亩桃花引客来来源人民网朵朵桃花次第开。人民网阳茜摄粉里透红的桃花缀满枝头。人民网阳茜摄漫山遍野的桃花争相绽放。人民网阳茜摄盛放的桃花摇曳在春风里。人民网阳茜摄桃花和油菜花交相辉映。人民网阳茜摄