蚂蚁金服开源sofa-rpc框架源码走读记录——Provider

蚂蚁金服开源sofa-rpc框架源码走读记录——Provider

版权声明:本文为博主原创文章,未经博主允许不得转载。

手动码字不易,请大家尊重劳动成果,谢谢

作者:http://blog.csdn.net/wang_wbq

最近两周在学习Hadoop源码时研究到了rpc框架,然后在网上发现了蚂蚁金服近期开源的sofa-rpc框架。这两天正好有点空闲,就走读了一遍源码进行学习,并写篇博客来记录下。

本文不介绍模块的使用方法,在官方github上已经有了相关示例,不过貌似不那么全。还是需要阅读源码来了更深入了解使用方法。

上篇博客介绍了Consumer部分的初始化过程,这篇博客将介绍Provider部分的初始化过程。
相比于Consumer部分,Provider的结构就简单多了,这里说的简单仅仅指rpc适配的部分,构建一个高性能高并发的服务端还是有很对细节需要去考虑的。感觉有部分功能还埋藏在sofa-bolt框架里,之后还要深入bolt源码来探索一番。

Provider模块的主要类结构和初始化过程

类结构

这个图是我在走读Provider启动过程时画的图,大致表现了Provider端的主要的一些类的加载启动过程。

sofa-rpc在代码中使用了类似Java中ServiceLoader的机制来进行扩展类加载,并预留了很多的扩展点来方便用户对框架进行扩展。图中黄色的方框就是其中的一些扩展类加载器,可以说是差不多所有模块都可以替换了。

sofa-rpc使用了类似Builder模式的方法,用户只用创建并填充指定的一些Config类,如ProviderConfigRegistryConfig等类,然后最后调用其指定方法即可实现其提供的功能,感觉这种方式确实很实用。

蚂蚁金服开源sofa-rpc框架源码走读记录——Provider_第1张图片

Provider模块的启动

既然是rpc框架,自然最终是要启动一个连接来向外提供一个服务的:

providerConfig.export();

在初始化过程中大致进行了以下动作,默认流程:
1、使用扩展工厂加载BoltProviderBootStrap类(图中①)并调用其export方法(ProviderConfig.class)
2、做一些基本的检查(DefaultProviderBootstrap.class)
3、创建代理调用对象ProviderProxyInvoker (图中②),并在构造函数里使用扩展工厂加载FilterChain *(图中③)(DefaultProviderBootstrap.class)
4、初始化注册中心(图中④)
5、使用扩展工厂加载Server (图中⑤)
6、将3中创建的代理调用对象注册到Server里(图中⑥)
7、启动Server
8、向注册中心注册服务提供(图中⑦)

Consumer模块的消息发送流程

一个消息的调用会经过几个主要的模块
1、bolt模块接收到消息会调用BoltServerProcessor类进行处理
2、BoltServerProcessor调用BoltServer的findInvoker来获取实际的服务类调用者
3、BoltServer返回对应的ProviderProxyInvoker
4、BoltServerProcessor获取了Invoker,调用其invoke方法获取结果
5、ProviderProxyInvoker将调用委托给FilterChain
6、FilterChain最后一个Filter为ProviderInvoker,它会通过反射来将接口方法调用在providerConfig.getRef()所存储的类上

由于服务提供者需要面临高并发的场景,因此在服务端没有看到很多的逻辑,因为服务端重要的还是为尽快为客户端提供服务返回。

到这里sofa-rpc的简单介绍已经做完了,这两篇文章没有深入分析细节,只是将整体结构进行介绍,希望能给读者一些引导,随着知识面的增大,每个人对细节的关注点都不一样。

你可能感兴趣的:(网络编程)