`
Kingson_Wu
  • 浏览: 109184 次
文章分类
社区版块
存档分类
最新评论

RPC Notes

阅读更多

PRC调用序列化方式有xml,json,Hessian,protobuffer,thrift等。其中为什么protobuffer,thrift的序列化有中间描述文件xxx.thrift,xxx.proto,而Hessian却没有?
http://blog.csdn.net/jiyiqinlovexx/article/details/17383183
RPC框架关键在于将对接口方法的调用转换为TCP/HTTP请求,并等待响应返回。要不要中间文件对实现RPC框架没有太大的影响,hessian为什么没有我猜测是想做的简单,利用语言内置的动态代理技术就可以完成接口调用到HTTP请求的转换。有中间文件只是开发起来更加便捷,双方不用约定好接口(当然如果服务方提供客户端端调用sdk,那就不用约定了)。


Protobuffer和json深度对比
http://cxshun.iteye.com/blog/1974498
在数据量大的时候GPB是非常占优势的,但一般情况下客户端和服务端并不会直接进行这么大数据的交互,大数据主要发生在服务器端的传输上,如果你面对需求是每天需要把几百M的日志文件传到另外一台服务器,那么这里GPB可能就能帮你的大忙了。


跨语言RPC框架Hessian、Thrift、Protocol Buffer之间的选择
http://blog.csdn.net/jiyiqinlovexx/article/details/17383183
总结在几者之间选择的考量:
1. 如果你不需要很多语言相互调用, 希望保持清晰的java接口代码(无任何业务不相关的接口继承和方法,属性定义),减少开放工作量,推荐Hessian。
2. 如果你的系统之间传输的数据量不是很大(<2M都不算大), 推荐Hessian。
3. 如果需要支持大数据量的传输,多语言调用,极高的并发支持,推荐使用thrift/protocol buffer。 通常我们并发很难超过1000 req/s,如果超过1000 req/s,在国内互联网排名绝对前5,那么恭喜你。因此一般而言,用Hessian就够了。

基于中间描述的协议,例如corba的idl,protocol buffers的proto,thrift的ThriftIDL,ice的slice,这些协议可以通过中间描述生成代码,数据的编码和解析具有很好的性能,而基于直接类型的协议如xmlrpc,hessian等,则必须采用反射的方法进行编码和解析,性能相对较低。(只是记录,未自己考量过,还不确定)


序列化和反序列化
http://blog.csdn.net/Kingson_Wu/article/details/48415121


几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比http://blog.csdn.net/Kingson_Wu/article/details/48415121
1. protobuf 不管是处理时间上,还是空间占用上都优于现有的其他序列化方式。内存暂用是java 序列化的1/9,时间也是差了一个数量级,一次操作在1us左右。缺点:就是对象结构体有限制,只适合于内部系统使用。
2. json格式在空间占用还是有一些优势,是java序列化的1/2.6。序列化和反序列化处理时间上差不多,也就在5us。当然这次使用的jackson,如果使用普通的jsonlib可能没有这样好的性能,jsonlib估计跟java序列化差不多。
3. xml相比于java序列化来说,空间占用上有点优势,但不明显。处理时间上比java序列化多了一个数量级,在100us左右。
4. 以前一种的java序列化,表现得有些失望
5. hessian测试有点意外,具体序列化数据上还步入json。性能上也不如jackjson,输得比较彻底。
6. hessian使用压缩,虽然在字节上有20%以上的空间提升,但性能上差了4,5倍,典型的以时间换空间。总的来说还是google protobuf比较给力


Google Protocol Buffer 的使用和原理
https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
封解包的速度
首先我们来了解一下 XML 的封解包过程。XML 需要从文件中读取出字符串,再转换为 XML 文档对象结构模型。之后,再从 XML 文档对象结构模型中读取指定节点的字符串,最后再将这个字符串转换成指定类型的变量。这个过程非常复杂,其中将 XML 文件转换为文档对象结构模型的过程通常需要完成词法文法分析等大量消耗 CPU 的复杂计算。
反观 Protobuf,它只需要简单地将一个二进制序列,按照指定的格式读取到 C++ 对应的结构类型中就可以了。从上一节的描述可以看到消息的 decoding 过程也可以通过几个位移操作组成的表达式计算即可完成。速度非常快。


请求传参方式
1. 请求参数有多个,这多个参数其实属于一个对象,如:
id=4&name=torres&age=30
然后服务端使用反射转化成对个对象,当然可以像spring mvc那样在项目启动保存类的参数名词,访问时快速使用反射转化。
2. 请求参数只有一个,就是一个json字符串,如:
data={"id":4,"name":"torres","age":30}可以使用性能较高的jackson等库来序列化成对象。

fastjson是怎么实现JSON的序列化和反序列化的
https://www.zhihu.com/question/40002316/answer/84310005

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    notesrpcparser:Notes RPC解析器

    Notes RPC解析器该实用程序将Notes RPC文件解析为更有用的RPC事务动态视图,包括将ReplicaID,NoteID和RPC命令转换为易于理解的数据库名称和元素名称格式。 显示时间测量,已发送字节和已接收字节。

    passing-notes-rpc

    传递笔记-rpc 一个很棒的包装 用法 通过运行以下命令安装 : yarn add passing-notes-rpc

    Android代码-大众点评开源的分布式服务通信框架(RPC)

    Release Notes Release Notes Comitters 苗向彬,saber.miao 吴湘,xiang.wu@dianping.com(wu-xiang) 陈华,enlight.chen@dianping.com(fv3386) 陈充泽,chongze.chen@dianping.com(wps886) 殷琦,qi.yin@...

    IO_deep_learning_notes.zip

    主要来自于以下课程内容以及其他牛人文章总结+一nene自己的思考 ...207 全手写基于Netty的RPC框架 简单重构框架分层及RPC传输的本质及有无状态的RPC区别 地址 216 自定义HTTP协议解析和HTTPserver调用实现 地址

    org.liveSense.sample.gwt.notes-1.0.5.zip

    org.liveSense.sample.gwt.notes.zip,livesense gwt rpc samplelivesense gwt示例

    notes:加密笔记记录Web应用程序

    加密笔记 一个存储加密笔记的Web应用程序。 ... 使用Sublime Text查找笔记,例如模糊搜索。 只需按正确的顺序按标题中的几个键即可缩小搜索范围。... 您可能对后端很感兴趣,后端是一个简单的JSONRPC api: 部署到Heroku

    longhai3395#BigData-Notes#Storm和流处理简介1

    1.1简介Storm 是一个开源的分布式实时计算框架,可以以简单、可靠的方式进行大数据流的处理。通常用于实时分析,在线机器学习、持续计算、分布式 RPC、ETL

    notes:JavaJava后端工程师的学习笔记https

    loveincode's notes 学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 常用设计模式 单例模式 , 工厂模式 , 装饰者模式 , 代理...

    msgpack-python-0.4.2.tar

    Notes ----- Note for msgpack 2.0 support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ msgpack 2.0 adds two types: *bin* and *ext*. *raw* was bytes or string type like Python 2's ``str``. To distinguish string and ...

    java8集合源码分析-notes:读书笔记

    RPC](#自己实现simple RPC) [JDK NIO/BIO](#JDK NIOBIO) [JVM SandBox](#JVM SandBox) [PL/SQL Developer](#PLSQL Developer) [Micronaut Framework](#Micronaut Framework) quickstart-lua lua脚本语言 I/O Java8 ...

    JavaNotes:自学,存放学习笔记

    RPC 分散ID API网关 杰克逊 MyBatisPlus 正则表达式 重新组织函数 JavaWeb HTML,CSS JavaScript jQuery查询 Servelet JSON格式 阿贾克斯 RESTful的 单点登录 VUE CDN 搜索引擎优化 XSS CSRF 会议 曲奇饼 ...

    6.824-lecture-notes:6.824分布式系统

    第2: :RPC概述,编组,绑定,线程,“至少一次”,“最多一次”,“恰好一次”,Go的RPC,线程同步 第3讲::主备份复制,状态转移,“裂脑”,Remus(NSDI 2008), 第4课::平面数据中心存储,二等分带宽,条...

    毕业设计反病毒虚拟机源码-notes:笔记

    毕业设计 反病毒虚拟机源码 tcp 进阶 我们已经介绍了以下几种分组格式: ...RPC(29.2节)采用了这种技术。 为什么在T C P首部的开始便是源和目的的端口号? 就像我们在6.5节所看到的,一个ICMP差错报文必须至

    diego-design-notes:迭戈建筑设计的沉思和启示

    迭戈设计笔记 ... 客户通过HTTP上的RPC样式的API向 (公告板系统)提交,更新和检索任务和LRP。 Diego的最佳地将任务和LRP分配到Diego Cells集群,该会查询然后将工作发送给Cell 。 拍卖将任务或LR

    Beginning Python (2005).pdf

    xvii Contents Finishing Your Modules 154 Defining Module-Specific Errors 154 Choosing What to Export 155 Documenting Your Modules 156 Try It Out: Viewing Module Documentation ...

    PHP5 完整官方 中文教程

    Lotus Notes — Lotus Notes Functions LZF — LZF Functions Mail — Mail 邮件函数 Mailparse — Mailparse Functions Math — Math 数学函数 MaxDB — MaxDB PHP Extension MCAL — MCAL Functions mcrypt — ...

    PHP5中文参考手册

    Lotus Notes — Lotus Notes Functions LZF — LZF Functions Mail — Mail 邮件函数 Mailparse — Mailparse Functions Math — Math 数学函数 MaxDB — MaxDB PHP Extension MCAL — MCAL Functions mcrypt — ...

    php中文完全开发手册

    Lotus Notes Functions LXXI. NSAPI-specific Functions LXXII. Unified ODBC Functions LXXIII. Object Aggregation/Composition Functions LXXIV. Oracle 8 函数库 LXXV. OpenSSL Functions LXXVI. Oracle 函数库...

    ZendFramework中文文档

    Notes Regarding Cascading Operations 11. Zend_Debug 11.1. 输出变量的值 (Dumping Variables) 12. Zend_Exception 12.1. 使用“异常” 13. Zend_Feed 13.1. 介绍 13.2. 导入Feeds 13.2.1. 定制 feeds ...

    PHP函数参考手册大全

    Lotus Notes Functions LXIV. LZF Functions LXV. Mail Functions LXVI. mailparse Functions LXVII. Math 数学函数 LXVIII. MaxDB PHP Extension LXIX. MCAL Functions LXX. Mcrypt Encryption Functions LXXI. ...

Global site tag (gtag.js) - Google Analytics