目录
目标
版本
需要考虑什么
服务发布与订阅的流程
发布与订阅的入口类
服务的元数据
注册流程图示
服务器端服务映射结构
服务订阅的流程图示
消费者端的映射结构
消费者调用服务的流程
服务代理
协议模板服务
协议服务
消费者调用服务的流程图示
目标
针对淘宝RPC中间件-HSF,个人选择性的阅读了源码,并绘制流程图,以便清晰展示重要流程,包括服务发布、服务订阅、服务调用。
版本
HSF 2.0
Netty 3.6.5
需要考虑什么
RPC需要考虑
网络框架 协议 序列化方式 服务发现机制
服务器端需要考虑
服务target路由 服务吞吐量(每个服务一个线程池) 过滤机制(代理)
客户端需要考虑
服务地址路由(接口名->方法名->参数维度) 过滤机制(代理)
服务发布与订阅的流程
发布与订阅的入口类
ProcessComponent
创建服务的发布者和消费者,控制整个发布流程和生成服务调用代理的流程
列举发布、订阅、创建代理的行为
public Object consume(ServiceMetadata metadata)
public void publish(ServiceMetadata metadata)
private <T> T createxxxDynamicProxy(final ServiceMetadata metadata, Class<?>[] classes)
服务的元数据
ServiceMetadata
HSF服务的元数据(如接口名称 版本 组名 超时 线程池等很多信息)
注册流程图示
服务器端服务映射结构
服务订阅的流程图示
消费者端的映射结构
消费者调用服务的流程
服务代理
通过服务代理进行服务调用,其中使用了过滤器
ProcessComponent.HSFServiceProxy implements InvocationHandler
主要行为
public Object invoke(Object proxy, Method method, Object[] args)
private Object trueInvoke(Method method, String methodName, Class<?>[] parameterTypes, Object[] args)
协议模板服务
j接口 RPCProtocolTemplateService
RPC协议模板服务,提供一些RPC协议的公用实现
实现类 RPCProtocolTemplateComponent
实现RPC协议调用时的共同部分,例如HSFRequest的组装,地址路由的获取、检查,监测信息的埋点,日志的处理等,最后转由各RPC协议的具体实现完成远程调用。
主要行为
invokeWithMethodObject(String protocol, ServiceMetadata metadata, Method method, String methodName,
Class<?>[] parameterTypes, Object[] args)
协议服务
接口 RPCProtocolService
RPC协议服务,负责最终发起远程调用
实现类 RemotingRPCProtocolComponent
基于HSFRemoting实现RPC,此为HSF默认采用的RPC机制
消费者调用服务的流程图示
方法调用链
选址与远程调用的流程图
对于dubbo和hsf两者孰优孰略,我没有进行过系统性对比。阿里的一些项目已经放在github上,未找到hsf。dubbo使用广泛,社区活跃丰富,所以选型时确定它,不需要更多的理由。