基本组成:
Client (客户端):服务调用方。
Server(服务端):服务提供方。
Client Stub(客户端存根):存放服务端的消息,负责将客户端的请求参数打包成网络消息,然后通过网络发送给服务提供方。
Server Stub(服务端存根):接收客户端发送的消息,再将客户端请求参数打包成网络消息,然后通过网络远程发送给服务方。
其它:
- 序列化协议:
- 网络协议:TCP, HTTP 等(TCP 更快(Dubbo),因为 HTTP header 内容过多(SpringCloud))
- 注册中心:Zookeeper CP 保证一致性,Eureka AP 保证可用性
Dubbo
zookeeper 作为注册中心:
- 提供者节点: /GLOBAL_REGISTRY/tuling.dubbo.server.UserService/providers
- 存放的内容是一个所有注册的提供者的 URL List [dubbo://127.0.0.1:12345/tuling.dubbo.server.UserService?application=myapp1&dubbo=2.0.2&protocal=dubbo&..., dubbo://..... ]
- 在提供者中进行负载均衡
- 消费者节点:/GLOBAL_REGISTRY/tuling.dubbo.server.UserService/consumers
- 存放的内容是一个所有注册的提供者的 URL List [consumer://127.0.0.1:12345/tuling.dubbo.server.UserService?application=myapp2&dubbo=2.0.2&protocal=dubbo&..., consumer://..... ]
- 提供者动态配置节点:/GLOBAL_REGISTRY/tuling.dubbo.server.UserService/configurators
- 消费者路由策略节点:/GLOBAL_REGISTRY/tuling.dubbo.server.UserService/routers
网络协议是 TCP
序列化协议是 Hessian
Dubbo序列化支持java、compactedjava、nativejava、fastjson、dubbo、fst、hessian2、kryo,其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。
- dubbo 序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它。
- hessian2 序列化:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的,它是dubbo RPC默认启用的序列化方式。
- json 序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且 json这种文本序列化性能一般不如上面两种二进制序列化。
- java 序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。
JDK Serializable中通过serialVersionUID控制序列化类的版本,如果序列化与反序列化版本不一致,则会抛出java.io.InvalidClassException异常信息,提示序列化与反序列化SUID不一致。
dubbo序列化主要由Serialization(序列化策略)、DataInput(反序列化,二进制->对象)、DataOutput(序列化,对象->二进制流) 来进行数据的序列化与反序列化。
标签:dubbo,java,框架,server,RPC,UserService,序列化,tuling From: https://www.cnblogs.com/suBlog/p/17771934.html