5 远程调用传输层图解
6 设计传输层协议栈
协议头
协议体
1)metadata: <group,providerName,version>
2)methodName
3)parameterTypes[] 真的需要吗?
(a)有什么问题?
- 反序列化时 ClassLoader.loadClass() 潜在锁竞争。
- 协议体码流大小。
- 泛化调用多了参数类型。
(b)能解决吗?
- Java方法静态分派规则参考JLS <Java语言规范> $15.12.2.5 Choosing the Most Specific Method 章节。
(c)args[]
(d)其他:traceId,appName…
三 一些Features&好的实践&压榨性能1 创建客户端代理对象
1)Proxy 做什么?
- 集群容错 —> 负载均衡 —> 网络
2)有哪些创建 Proxy 的方式?
- jdk proxy/javassist/cglib/asm/bytebuddy
3)要注意的:
- 注意拦截toString,equals,hashCode等方法避免远程调用。
4)推荐的(bytebuddy):
2 优雅的同步/异步调用
- 先往上翻再看看“远程调用客户端图解”
- 再往下翻翻看看 Failover 如何处理更好
- 思考下如何拿到 future?
3 单播/组播
- 消息派发器
- FutureGroup
4 泛化调用