HSF源码阅读笔记

HSF(highspeed service framework ) 是淘宝内部使用的一个rpc(remote procedure call) 框架,最近在看Apache Mina的应用层协议的编解码器时,想到了看HSF的源码。

1、HSF单元测试环境的启动: 

HSF组开发同事提供了一个HSFEasyStarter,支持HSF环境的快速启动。它的原理是: 从淘宝内网下载一个taobao-hsf.sar目录,这个目录下面有META-INF,lib,plugins三个目录. 其中lib目录下存放了hsf容器的jar (hsf.container-1.4.8.7.jar)和随着eclipse一起发布的osgi标准的实现(org.eclipse.osgi-framework-3.4.2.R34x_v20080826.jar)

hsf.container-1.4.8.7.jar
hsf.thirdcontainer.jboss-1.4.8.7.jar
hsf.thirdcontainer.tomcat-1.4.8.7.jar
org.eclipse.osgi-framework-3.4.2.R34x_v20080826.jar

HSF容器启动的时候,会基于equinox的Declare Service的方式进行Service的定义,另外,plugins目录下的plugin(理解为一个bundle)里面打包了一个properties文件, 里面指明了bundle中需要导出给外部应用使用的HSF的一些Class,并且HSFEasyStarter在启动时使用的一个HSFMiniContainer对双亲委派的Classloader机制进行了改写,在App classloader和ext classloader之间插入了一个urlclassloader,这个Urlclassloader就从前面说的bundle导出的类去findClass,代码片段如下: 

//---------------------创建一个Urlclassloader,指定其父classloader为ext classloader,因为ClassLoader.getSystemClassLoader()取到的是app

//classloader

ClassLoader hsfClassLoader = new URLClassLoader(new URL[]{}, ClassLoader.getSystemClassLoader().getParent()){
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
Class<?> clazz = exportedClassMap.get(name);
if(clazz != null){
return clazz;
}
throw new ClassNotFoundException(name);
}
};

 

//-------下面的代码指定app classloader的父classloader为前面介绍的urlclassloader; 

ClassLoader sysLoader = ClassLoader.getSystemClassLoader();
Class<URLClassLoader> sysClass = URLClassLoader.class;
Field parentField = sysClass.getSuperclass().getSuperclass().getDeclaredField("parent");
parentField.setAccessible(true);
parentField.set(sysLoader, hsfClassLoader);

 整个过程可以描述如下: 

 


昨天讲到了HSF容器的启动 。 HSF容器启动以后,通过osgi的bundleContext拿到了一组需要暴露给hsf容器外部使用的类,以及基于这些类的urlclassLoader. 这里面有两个关键的类:HSFSpringConsumerBean 和HSFSpringProviderBean ,

HSFSpringProviderBean负责启动RPC服务器 ,并把HSF服务信息发布到配置中心(淘宝的config server) . 

HSFConsumerBean负责从配置中心获取HSF接口的服务器列表,生成接口的代理类,由这个代理类承担RPC请求。

整个系统结构图如下 :

 

 

整个过程描述如下: 

1、HSFSpringProviderBean启动HSF服务器, 采用了Apache Mina做网络通信框架(之前的blog中有描述),淘宝的tbremoting基于apache mina,提供更接近业务层的网络通信服务。

2、发HSF服务的元信息,包括服务器的ip,端口,是否是异步调用等信息发布到淘宝的配置中心(configserver) ;

3、HSFSpringConsumerBean生成一个HSF接口的代理类, 然后从configserver获取HSF的服务地址列表,从diamond server(淘宝的另一个配置中心,支持配置信息的实时推送) 获取流控和服务器路由信息。

4、在HSF接口调用时通过第3步生成的接口的代理类进行一个RPC调用(序列化方式可以采用java和hessian) ,调用服务器的选择算法目前采用的是随机分配的方式。

后面结合源码详细的展开描述:1、configserver配置信息的发布和订阅。  2、基于tbremoting进行的rpc的详细分析。


转载:http://www.cnblogs.com/dongqingswt/archive/2013/01/22/2872068.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值