RPC中间件-HSF

目录

目标

版本

需要考虑什么

服务发布与订阅的流程

发布与订阅的入口类

服务的元数据

注册流程图示

服务器端服务映射结构

服务订阅的流程图示

消费者端的映射结构

消费者调用服务的流程

服务代理

协议模板服务

协议服务

消费者调用服务的流程图示


目标

针对淘宝RPC中间件-HSF,个人选择性的阅读了源码,并绘制流程图,以便清晰展示重要流程,包括服务发布、服务订阅、服务调用。

版本

HSF 2.0
Netty 3.6.5

需要考虑什么

RPC需要考虑

网络框架 协议 序列化方式 服务发现机制

服务器端需要考虑

服务target路由 服务吞吐量(每个服务一个线程池) 过滤机制(代理)

客户端需要考虑

服务地址路由(接口名->方法名->参数维度) 过滤机制(代理)

服务发布与订阅的流程

发布与订阅的入口类

ProcessComponent

创建服务的发布者和消费者,控制整个发布流程和生成服务调用代理的流程

列举发布、订阅、创建代理的行为

public Object consume(ServiceMetadata metadata)
public void publish(ServiceMetadata metadata)
private  T createxxxDynamicProxy(final ServiceMetadata metadata, Class[] classes)

服务的元数据

ServiceMetadata

HSF服务的元数据(如接口名称 版本 组名 超时 线程池等很多信息)

注册流程图示

RPC中间件-HSF_第1张图片

服务器端服务映射结构

RPC中间件-HSF_第2张图片

服务订阅的流程图示

RPC中间件-HSF_第3张图片

消费者端的映射结构

RPC中间件-HSF_第4张图片

消费者调用服务的流程

服务代理

通过服务代理进行服务调用,其中使用了过滤器

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机制

消费者调用服务的流程图示

方法调用链

RPC中间件-HSF_第5张图片

选址与远程调用的流程图

RPC中间件-HSF_第6张图片

 

对于dubbo和hsf两者孰优孰略,我没有进行过系统性对比。阿里的一些项目已经放在github上,未找到hsf。dubbo使用广泛,社区活跃丰富,所以选型时确定它,不需要更多的理由。

 

 

 

 

 

 

 

 

你可能感兴趣的:(RPC)