国内外个人免费云服务器推荐 liunx服务器搭建与管理( 三 )


一开始你用基于HTTP的RESTful接口在服务器之间通信,后来发现用JSON格式传输数据效率低下,你需要更高效的通信方案 。
这个时候你需要:
RPC && 序列化技术什么是RPC技术?
RPC全称Remote Procedure Call,远程过程调用 。我们平时编程中,随时都在调用函数,这些函数基本上都位于本地,也就是当前进程某一个位置的代码块 。但如果要调用的函数不在本地,而在网络上的某个服务器上呢?这就是远程过程调用的来源 。
从图中可以看出,通过网络进行功能调用,涉及参数的打包解包、网络的传输、结果的打包解包等工作 。而其中对数据进行打包和解包就需要依赖序列化技术来完成 。
什么是序列化技术?
序列化简单来说,是将内存中的对象转换成可以传输和存储的数据,而这个过程的逆向操作就是反序列化 。序列化 && 反序列化技术可以实现将内存对象在本地和远程计算机上搬运 。好比把大象关进冰箱门分三步:
将本地内存对象编码成数据流通过网络传输上述数据流将收到的数据流在内存中构建出对象序列化技术有很多免费开源的框架,衡量一个序列化框架的指标有这么几个:
是否支持跨语言使用,能支持哪些语言是否只是单纯的序列化功能,包不包含RPC框架序列化传输性能扩展支持能力(数据对象增删字段后,前后的兼容性)是否支持动态解析(动态解析是指不需要提前编译,根据拿到的数据格式定义文件立即就能解析)下面流行的三大序列化框架protobuf、thrift、avro的对比:
ProtoBuf:厂商:Google
支持语言:C++、Java、Python等
动态性支持:较差,一般需要提前编译
是否包含RPC:否
简介:ProtoBuf是谷歌出品的序列化框架,成熟稳定,性能强劲,很多大厂都在使用 。自身只是一个序列化框架,不包含RPC功能,不过可以与同是Google出品的GPRC框架一起配套使用,作为后端RPC服务开发的黄金搭档 。
缺点是对动态性支持较弱,不过在更新版本中这一现象有待改善 。总体来说,ProtoBuf都是一款非常值得推荐的序列化框架 。
Thrift厂商:Facebook
支持语言:C++、Java、Python、PHP、C#、Go、JavaScript等
动态性支持:差
是否包含RPC:是
简介:这是一个由Facebook出品的RPC框架,本身内含二进制序列化方案,但Thrift本身的RPC和数据序列化是解耦的,你甚至可以选择XML、JSON等自定义的数据格式 。在国内同样有一批大厂在使用,性能方面和ProtoBuf不分伯仲 。缺点和ProtoBuf一样,对动态解析的支持不太友好 。
Avro支持语言:C、C++、Java、Python、C#等
动态性支持:好
是否包含RPC:是
简介:这是一个源自于Hadoop生态中的序列化框架,自带RPC框架,也可独立使用 。相比前两位最大的优势就是支持动态数据解析 。
为什么我一直在说这个动态解析功能呢?在之前的一段项目经历中,轩辕就遇到了三种技术的选型,摆在我们面前的就是这三种方案 。需要一个C++开发的服务和一个Java开发的服务能够进行RPC 。
Protobuf和Thrift都需要通过“编译”将对应的数据协议定义文件编译成对应的C++/Java源代码,然后合入项目中一起编译,从而进行解析 。
当时,Java项目组同学非常强硬的拒绝了这一做法,其理由是这样编译出来的强业务型代码融入他们的业务无关的框架服务,而业务是常变的,这样做不够优雅 。
最后,经过测试,最终选择了AVRO作为我们的方案 。Java一侧只需要动态加载对应的数据格式文件,就能对拿到的数据进行解析,并且性能上还不错 。(当然,对于C++一侧还是选择了提前编译的做法)


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: