Enviar búsqueda
Cargar
Rpc原理与实现
•
8 recomendaciones
•
2,684 vistas
W
wavefly
Seguir
a brief view of rpc, eg: hessian
Leer menos
Leer más
Denunciar
Compartir
Denunciar
Compartir
1 de 18
Descargar ahora
Descargar para leer sin conexión
Recomendados
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移
wang hongjiang
Exodus2 大局观
Exodus2 大局观
wang hongjiang
Aswan&hump
Aswan&hump
wang hongjiang
Jvm内存管理基础
Jvm内存管理基础
wang hongjiang
Java7 fork join framework and closures
Java7 fork join framework and closures
wang hongjiang
Ali-tomcat
Ali-tomcat
wang hongjiang
Introduction of netty
Introduction of netty
Bing Luo
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
wang hongjiang
Recomendados
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移
wang hongjiang
Exodus2 大局观
Exodus2 大局观
wang hongjiang
Aswan&hump
Aswan&hump
wang hongjiang
Jvm内存管理基础
Jvm内存管理基础
wang hongjiang
Java7 fork join framework and closures
Java7 fork join framework and closures
wang hongjiang
Ali-tomcat
Ali-tomcat
wang hongjiang
Introduction of netty
Introduction of netty
Bing Luo
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
wang hongjiang
独爽不如众乐
独爽不如众乐
Zheng Biao
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
StreamNative
The Evolution History of RoP(RocketMQ-on-Pulsar) - Pulsar Summit Asia 2021
The Evolution History of RoP(RocketMQ-on-Pulsar) - Pulsar Summit Asia 2021
StreamNative
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
ideawu
gRPC - 打造輕量、高效能的後端服務
gRPC - 打造輕量、高效能的後端服務
升煌 黃
Hbase性能测试文档
Hbase性能测试文档
baggioss
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
Tony Deng
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
wang hongjiang
Res tful api design tw-2.0
Res tful api design tw-2.0
昀陞 李
Golang 高性能实战
Golang 高性能实战
rfyiamcool
Web并发模型粗浅探讨
Web并发模型粗浅探讨
Robbin Fan
Mysql fast share
Mysql fast share
rfyiamcool
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
Web性能测试指标参考v0.2
Web性能测试指标参考v0.2
beiyu95
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmm
Yiwei Ma
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Justin Lin
Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析
wang hongjiang
并发编程交流
并发编程交流
bluedavy lin
US DTV Transition
US DTV Transition
Jeffrey Hart
Finagle - an intro to rpc & a sync programming in jvm
Finagle - an intro to rpc & a sync programming in jvm
PrasannaKumar Sathyanarayanan
Make it fast for everyone - performance and middleware design
Make it fast for everyone - performance and middleware design
Sriskandarajah Suhothayan
Más contenido relacionado
La actualidad más candente
独爽不如众乐
独爽不如众乐
Zheng Biao
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
StreamNative
The Evolution History of RoP(RocketMQ-on-Pulsar) - Pulsar Summit Asia 2021
The Evolution History of RoP(RocketMQ-on-Pulsar) - Pulsar Summit Asia 2021
StreamNative
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
ideawu
gRPC - 打造輕量、高效能的後端服務
gRPC - 打造輕量、高效能的後端服務
升煌 黃
Hbase性能测试文档
Hbase性能测试文档
baggioss
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
ykdsg
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
Tony Deng
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
wang hongjiang
Res tful api design tw-2.0
Res tful api design tw-2.0
昀陞 李
Golang 高性能实战
Golang 高性能实战
rfyiamcool
Web并发模型粗浅探讨
Web并发模型粗浅探讨
Robbin Fan
Mysql fast share
Mysql fast share
rfyiamcool
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
Web性能测试指标参考v0.2
Web性能测试指标参考v0.2
beiyu95
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmm
Yiwei Ma
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Justin Lin
Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析
wang hongjiang
并发编程交流
并发编程交流
bluedavy lin
La actualidad más candente
(19)
独爽不如众乐
独爽不如众乐
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
The Evolution History of RoP(RocketMQ-on-Pulsar) - Pulsar Summit Asia 2021
The Evolution History of RoP(RocketMQ-on-Pulsar) - Pulsar Summit Asia 2021
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
gRPC - 打造輕量、高效能的後端服務
gRPC - 打造輕量、高效能的後端服務
Hbase性能测试文档
Hbase性能测试文档
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
JVM内容管理和垃圾回收
JVM内容管理和垃圾回收
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
Res tful api design tw-2.0
Res tful api design tw-2.0
Golang 高性能实战
Golang 高性能实战
Web并发模型粗浅探讨
Web并发模型粗浅探讨
Mysql fast share
Mysql fast share
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Web性能测试指标参考v0.2
Web性能测试指标参考v0.2
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmm
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
Hash map导致cpu100% 的分析
Hash map导致cpu100% 的分析
并发编程交流
并发编程交流
Destacado
US DTV Transition
US DTV Transition
Jeffrey Hart
Finagle - an intro to rpc & a sync programming in jvm
Finagle - an intro to rpc & a sync programming in jvm
PrasannaKumar Sathyanarayanan
Make it fast for everyone - performance and middleware design
Make it fast for everyone - performance and middleware design
Sriskandarajah Suhothayan
Serialization and performance in Java
Serialization and performance in Java
Strannik_2013
Modern Distributed Messaging and RPC
Modern Distributed Messaging and RPC
Max Alexejev
High Performance RPC with Finagle
High Performance RPC with Finagle
Samir Bessalah
Netty 4-based RPC System Development
Netty 4-based RPC System Development
Allan Huang
Destacado
(7)
US DTV Transition
US DTV Transition
Finagle - an intro to rpc & a sync programming in jvm
Finagle - an intro to rpc & a sync programming in jvm
Make it fast for everyone - performance and middleware design
Make it fast for everyone - performance and middleware design
Serialization and performance in Java
Serialization and performance in Java
Modern Distributed Messaging and RPC
Modern Distributed Messaging and RPC
High Performance RPC with Finagle
High Performance RPC with Finagle
Netty 4-based RPC System Development
Netty 4-based RPC System Development
Similar a Rpc原理与实现
Tcpcopy 阿里技术沙龙
Tcpcopy 阿里技术沙龙
drewz lin
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
ideawu
分布式索引系统调研
分布式索引系统调研
zijingyeshao
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
Renaun Erickson
Cdc@ganji.com
Cdc@ganji.com
Tailor Cai
Alibaba Service Framework Practice
Alibaba Service Framework Practice
Shawn Qian
基于Erlang的
基于Erlang的
hnoutman
Thrift
Thrift
jiaqing zheng
About Thrift
About Thrift
jiaqing zheng
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
YingSiang Geng
Hacking Nginx at Taobao
Hacking Nginx at Taobao
Joshua Zhu
分享平台构建之旅
分享平台构建之旅
tblanlan
Micro service
Micro service
rfyiamcool
Static server介绍
Static server介绍
sun jamie
Hbase使用hadoop分析
Hbase使用hadoop分析
baggioss
纵览Loadrunner核心功能
纵览Loadrunner核心功能
beiyu95
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
thinkinlamp
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
pwesh
Similar a Rpc原理与实现
(20)
Tcpcopy 阿里技术沙龙
Tcpcopy 阿里技术沙龙
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
分布式索引系统调研
分布式索引系统调研
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
Cdc@ganji.com
Cdc@ganji.com
Alibaba Service Framework Practice
Alibaba Service Framework Practice
基于Erlang的
基于Erlang的
Thrift
Thrift
About Thrift
About Thrift
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
Hacking Nginx at Taobao
Hacking Nginx at Taobao
分享平台构建之旅
分享平台构建之旅
Micro service
Micro service
Static server介绍
Static server介绍
Hbase使用hadoop分析
Hbase使用hadoop分析
纵览Loadrunner核心功能
纵览Loadrunner核心功能
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
Más de wavefly
The comet technology on Jetty
The comet technology on Jetty
wavefly
Jetty(version 8)核心架构解析
Jetty(version 8)核心架构解析
wavefly
Head first in xmemcached yanf4j
Head first in xmemcached yanf4j
wavefly
Google protocol buffers简析
Google protocol buffers简析
wavefly
ClassLoader简析
ClassLoader简析
wavefly
Java并发核心编程
Java并发核心编程
wavefly
Más de wavefly
(6)
The comet technology on Jetty
The comet technology on Jetty
Jetty(version 8)核心架构解析
Jetty(version 8)核心架构解析
Head first in xmemcached yanf4j
Head first in xmemcached yanf4j
Google protocol buffers简析
Google protocol buffers简析
ClassLoader简析
ClassLoader简析
Java并发核心编程
Java并发核心编程
Rpc原理与实现
1.
RPC原理与实现
刘海波 http://blog.csdn.net/liu251 1
2.
内容大纲 简介 涉及技术及实现 RPC简单实现 RPC简单实现 odis实现 odis实现 Q&A
2
3.
简介 RPC:面向过程 RPC:面向过程 CORBA:面向对象 CORBA:面向对象 RMI/EJB(COM/DCOM):面向对象,易用(相对CORBA) RMI/EJB(COM/DCOM):面向对象,易用(相对CORBA)
面向对象,易用(相对CORBA WebServices/XML-RPC:dotNet平台推出 WebServices/XML-RPC:dotNet平台推出 RPC(BINARY/JSON/XML):简化版的WebServices RPC(BINARY/JSON/XML):简化版的 :简化版的WebServices REST:面向资源 REST:面向资源 3
4.
涉及技术及实现 序列化协议 序列化协议 通讯协议 Hessian
proxy方式隔离使用者与序列化和通讯 proxy方式隔离使用者与序列化和通讯 实现代码 4
5.
涉及技术及实现 Hessian客户端 Hessian客户端 HessianProxy
.invoke HessianProxy .sendRequest :返回 .sendRequest:返回 HttpUrlConnection ,基 HttpUrlConnection,基 于http协议的通讯 http协议的通讯 Hession服务器端 Hession服务器端 HessianSkeleton.invoke 5
6.
涉及技术及实现 Hessian序列化协议 Hessian序列化协议
不同类型的序列化/反序列化都实现了Serializer 和 不同类型的序列化/ 反序列化都实现了Serializer Serializer和 Deserializer 接口, 然后由 SerializerFactory 根据不 Deserializer接口 接口, 同类型(Class)来创建不同的 Serializer /Deserializer. 同类型(Class) (Class)来创建不同的 6
7.
RPC简单实现 模块实现 序列化协议:fastjson 序列化协议:fastjson 通讯:socket 通讯:socket 示例代码 simplerpc
7
8.
odis-client 主要类介绍 ClientConfig StatusClient
ServerProxies RpcClient RPC:支持properties RPC:支持 支持properties Rpc.Invoker implements InvocationHandler RpcClient.Connection RpcClient.CallFuture 工具类 pakcage lib的IWritable类 lib的 IWritable类 8
9.
odis-client 初始化流程: 初始化过程中支持特 定domain的调用
domain的调用 每个调用的timeout 每个调用的timeout 可以自定义 初始化过程中会检查 每个代理方法是否抛 出RpcException 9
10.
odis-client 请求流程: toString方法返回 toString方法返回
interface名称、ip、 interface名称、 ip、 名称、ip port 初始化connection对 初始化connection connection对 象,不适用本地黑名单中 的port RpcClient获取 RpcClient获取 connection:初始化 connection:初始化 connection,发送附加 connection,发送附加 属性之后,如果缓存中已 经存在类似 connection,则关闭当 connection,则关闭当 前connection ,否则, connection,否则, 将当前connection以 将当前connection connection以 address为key缓存到 address为 key缓存到 map中.connection 是长 map中 .connection是长 连接 代码中的timeout是通过 代码中的timeout timeout是通过 自己编码实现的 10
11.
odis-client
11
12.
odis-server 主要类介绍 RpcConfig RpcServer(spring
bean id) RpcServer RpcServer.DomainManager RpcServer.Listener RpcServer.Connection RpcServer.Handler RpcServer.Call 12
13.
odis-server 主要类介绍
RpcConfig RpcServer(spring bean id) RpcServer RpcServer.DomainManager RpcServer.Listener :创建socket 连接connection RpcServer.Listener:创建 socket连接 :创建socket 连接connection RpcServer.Connection :每个socket ,connection 单进程处理,不需要考虑InputStream 的同步,call入队列 :每个socket socket, 单进程处理,不需要考虑InputStream 的同步,call InputStream的同步,call入队列 RpcServer.Call :客户端传入参数,多个call对象共用一个connection ,需要synchronized OutputStream RpcServer.Call:客户端传入参数,多个call对象共用一个connection,需要 :客户端传入参数,多个call 对象共用一个connection ,需要synchronized RpcServer.Handler :handler 是多线程处理,将call数据返回到客户端 RpcServer.Handler: handler是多线程处理,将call数据返回到客户端 是多线程处理,将call 13
14.
优化?(线程同步) 数据传输 odis中使用长连接来传送数据 odis中使用长连接来传送数据
blocking io vs nio 线程竞争 客户端多个线程竞争一个 socket.outputStream vs 客户端多个线程竞争一个socket.outputStream 客户端多个线程使用一个队列 参考代码:org.netease.socketio.multiclient 参考代码:org.netease.socketio.multiclient 14
15.
优化?(线程同步) 结果 1375
1438 1343 1360 1438(同步client) 1438(同步 同步client) 1281 1238 1250 1282 1297(队列client) 1297(队列 队列client) 5次请求(毫秒-10000线程,休眠10 ms/线程) 1450 1400 1350 1300 同步client 1250 队列client 1200 1150 1100 1 2 3 4 5 15
16.
优化?(代理类)
使用分析 在client初始化ServerProxies 的过程中,通过 client初始化 ServerProxies的过程中,通过 初始化ServerProxies JDK:Proxy.newProxyInstance 生成代理类。client在 JDK:Proxy.newProxyInstance生成代理类。 client在 生成代理类。client AbstractTask 声明为静态字段,则所有的代理类也为静态的。 AbstractTask声明为静态字段,则所有的代理类也为静态的。 JDK Proxy和cglib Enhancer对比 Proxy和 Enhancer对比 初始化耗时: - jdk:15ms enhancer:78ms 运行时耗时 1kw循环 Proxy Enhancer 1000 968 953 938 800 时间(ms) 600 500 468 453 400 200 16 0 1 2 3 运行次数
17.
优化?(代理类) 结果分析 初始化化代理类,因为cglib需要多创 初始化化代理类,因为cglibcglib需要多创 建2个类,耗时多于jdk proxy方式
个类,耗时多于jdk proxy方式 运行期,cglib enhancer则优与jdk 运行期,cglib enhancer则优与 则优与jdk proxy 如果代码运行过程中不需要重复创建代 理类,可以考虑使用cglib enhancer 理类,可以考虑使用cglib 方式,节省时间 17
18.
Q&A
18
Descargar ahora