空白键|我要消灭一半程序员,10大高性能开发宝石( 三 )


用上了高性能的共享内存通信机制 , 多个服务进程之间就可以愉快的工作了 , 即便有工作进程出现Crash , 整个服务也不至于瘫痪 。
不久 , 老板增加需求了 , 不再满足于只能提供静态网页浏览了 , 需要能够实现动态交互 。 这一次老板还算良心 , 给你加了一台硬件服务器 。
于是你用Java/PHP/Python等语言搞了一套web开发框架 , 单独起了一个服务 , 用来提供动态网页支持 , 和原来等静态内容服务器配合工作 。
这个时候你发现 , 静态服务和动态服务之间经常需要通信 。
一开始你用基于HTTP的RESTful接口在服务器之间通信 , 后来发现用JSON格式传输数据效率低下 , 你需要更高效的通信方案 。
这个时候你需要:
RPC&&序列化技术
什么是RPC技术?
RPC全称RemoteProcedureCall , 远程过程调用 。 我们平时编程中 , 随时都在调用函数 , 这些函数基本上都位于本地 , 也就是当前进程某一个位置的代码块 。 但如果要调用的函数不在本地 , 而在网络上的某个服务器上呢?这就是远程过程调用的来源 。
什么是序列化技术?
将本地内存对象编码成数据流通过网络传输上述数据流将收到的数据流在内存中构建出对象序列化技术有很多免费开源的框架 , 衡量一个序列化框架的指标有这么几个:
是否支持跨语言使用 , 能支持哪些语言是否只是单纯的序列化功能 , 包不包含RPC框架序列化传输性能扩展支持能力(数据对象增删字段后 , 前后的兼容性)是否支持动态解析(动态解析是指不需要提前编译 , 根据拿到的数据格式定义文件立即就能解析)下面流行的三大序列化框架protobuf、thrift、avro的对比:
ProtoBuf:
厂商:Google
支持语言:C++、Java、Python等
动态性支持:较差 , 一般需要提前编译
是否包含RPC:否
简介:ProtoBuf是谷歌出品的序列化框架 , 成熟稳定 , 性能强劲 , 很多大厂都在使用 。 自身只是一个序列化框架 , 不包含RPC功能 , 不过可以与同是Google出品的GPRC框架一起配套使用 , 作为后端RPC服务开发的黄金搭档 。
Thrift
厂商:Facebook
支持语言:C++、Java、Python、PHP、C#、Go、JavaScript等
动态性支持:差
是否包含RPC:是
简介:这是一个由Facebook出品的RPC框架 , 本身内含二进制序列化方案 , 但Thrift本身的RPC和数据序列化是解耦的 , 你甚至可以选择XML、JSON等自定义的数据格式 。 在国内同样有一批大厂在使用 , 性能方面和ProtoBuf不分伯仲 。 缺点和ProtoBuf一样 , 对动态解析的支持不太友好 。


推荐阅读