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或许才是你寻找的答案。
闽山闽水物华新南平来南平,看碧水清荷在赏荷之旅中留下唯美大片吧最佳赏荷期6月9月夏日美景,即刻抵达,为美好生活加点料图COSMOS图Ccccsss最佳赏荷地武夷山五夫镇延平溪源峡谷顺昌洋口浦城际岭村
天龙八部中,谁最该接受心理咨询与治疗?最近在刷TVB版天龙八部,弹幕上网友讨厌的名单中,阿紫赫然在列。甚至有网友建议阿紫需要看心理医生,接受心理治疗。如果阿紫可以穿越,她看了心理咨询与治疗这本书,悟性强的她会明白自己的
西媒加拿大批准大麻商店开进大学校园引质疑据西班牙日报网站7月6日报道,加拿大不列颠哥伦比亚大学将在其校园内开设一家大麻商店,这是世界上第一家开进校园的大麻店,温哥华地区居民表示反对。报道称,加拿大本土大麻店BurbCan
刘文彩,喝人奶,他到底喝没喝过?刘文彩的儿子揭露真相在诸多中国的地主当中,刘文彩的名头无疑是最为响亮的,很多当代人关于旧时地主的印象,都来自于各种文章对于刘文彩的描述,四川的很多老百姓也都听说过刘文彩,喝人奶这件事。而他曾经的庄园,
英首相约翰逊同意辞职,跳船大戏上演,至少54名官员对其失去信心辞职(当地时间7月7日,英国首相鲍里斯约翰逊在伦敦唐宁街10号门前发表讲话后离开。图新华社)撰文潇湘晨报通讯员啸风俄乌战争下第一个下台的,没想到是炸毛约翰逊,真的没想到。对普京来说,此
云南永德县坚持生态优先打造61绿色主导产业来源经济日报新闻客户端近日,记者来到云南省永德县康甸糖厂,只见工人们清扫厂房检修设备鼓足干劲,为糖厂恢复性生产做好准备。甘蔗是永德传统农业。前几年由于企业经营不景气,导致甘蔗种植面
曾国藩为什么被吹上天?他做过什么利于百姓利于人民的事?曾国藩为啥会被吹上天将他跟孔子诸葛亮王阳明并称为3个半圣人甚至说,千古第一亡人曾国藩有影响深远的学说吗?他有开疆拓土,抗击异族的功绩吗?他有造福百姓,恩泽后世的重大贡献吗?都没有,
招聘2022年应届中核霞浦核电有限公司夏季校招公告一公司简介中核霞浦核电有限公司于2015年7月23日成立,由中国核能电力股份有限公司福建福能股份有限公司华能核电开发有限公司中国长江电力股份有限公司宁德市国有资产投资经营有限公司分
为全球发展合作贡献金砖力量2018年8月27日,巴西巴拉那瓜港TCP码头堆场扩建工程现场。新华社记者彭桦摄2022年6月1日,当地员工在南非开普敦海信南非工业园的冰箱生产线上工作。新华社记者吕天然摄2020
大刀向鬼子们的头上砍去一名海军陆战队员拿着一把战壕刀,刀具带有用于近距离肉搏用的金属指套与大多数美军士兵一样,海军陆战队员在通常情况下大多会自费购买自己使用的战斗刀具,除了配发一些由美国国内民众捐赠的刀
龙葵最初造型曝光,雷人发型影楼风浓重,刘诗诗也很难驾驭7月6日,网上曝光了一组仙剑奇侠传三龙葵的初次造型,引发了一众网友的围观和热烈讨论。不得不说,从网上曝光的照片来看,仙剑奇侠传三蓝龙葵和红葵的造型真的是一言难尽,最初的龙葵造型并非