简介
SOFA 作为蚂蚁金服自主研发的分布式的系统中间件,包含金融级云原生的架构所需要的各种组件,其中包括微服务的研发框架、RPC调用框架、服务的注册中心、分布式定时任务、限流/熔断机制、动态配置的推送功能、分布式的链路追踪、Metrics监控、分布式高可用队列、分布式事务框架、分布式数据库代理等组件。是在金融领域完整的分布式解决方案。
SOFA作为蚂蚁金服的开源的高性能RPC框架。
SOFA所做的工作就是简化应用之间的RPC调用,为应用提供高效的点对点的远程调用服务解决方案。也提供了很多的用户扩展功能,SOFA提供了丰富的模型和抽象可扩展接口,包括过滤器、路由、负载均衡等等。
特性
- 1、透明高性能远程调用
- 2、多服务路由负载均衡策略
- 3.、多种注册中心集成
- 4、多协议支持
- 5、支持多种调用方式
- 6、支持熔断机制
- 7、有强大的扩展功能
架构
SOFA RPC从上到下可以分为两层。包含了核心组件(接口、API、公共包)以及通用实现。功能实现层就是基于用户功能的一些小扩展。
框架原理分析
- 1、首先客户端发起请求调用Stub
- 2、生成Stub,拦截调用的信息
- 3、通过路由寻址操作找到从路由表中和注册中心中找到对应的调用的服务的地址
- 4、通过Java序列化的方式将数据转换为二进制进行传递
- 5、服务器接收到请求之后进行解码操作
- 6、解码完成之后对于对象进行反序列化的操作
- 7、通过反射调用对应的发布的服务Bean
- 8、进行进一步的业务处理逻辑
SOFA目录结构
SOFARPC源码主要模块包括all(发布打包模块),
- bom(依赖管控模块,用于依赖版本管控),
- example(示例模块),
- test(测试模块,包含集成测试),
- core(api:API模块,涵盖各种基本流程接口、消息、上下文、扩展接口等;
- common:common 公共模块,涵盖工具类utils、数据结构;
- exception:异常模块,涵盖各种异常接口接口等)。其中
- core模块包括bootstrap(启动实现模块,用于启动类,发布或者引用服务逻辑、以及registry的操作),
- proxy(代理实现模块,用于接口实现代理生成),
- client(客户端实现模块,用于发送请求、接收响应、连接维护、路由、负载均衡、同步异步等),
- server(服务端实现模块,用于启动监听、接收请求,发送响应、业务线程分发等),
- filter(拦截器实现模块,用于服务端和客户端的各种拦截器实现),
- codec(编解码实现模块,例如压缩,序列化等),
- protocol(协议实现模块,用于协议的包装处理、协商)
- transport(网络传输实现模块,用于TCP连接的建立,数据分包粘包处理,请求响应对象分发等),
- registry(注册中心实现模块 实现注册中心,例如zk等)
以上介绍的是比较常用的模块
实现原理
对于RPC远程调用服务模型来说是通常是需要定义服务的双方,而服务的双方就是服务消费方和服务提供方,对应于RPC来说就是调用端和被调用端。可以理解为客户端和服务端。也可以称服务提供方为服务(Server)而消费方称为引用(reference)
- 1、当SOFA应用启动的时候如果发现需要设置RPC服务的话就会在注册中心上维护一个服务列表
- 2、当需要使用这个服务的时候会从配置中心获取到服务的地址和其他信息
- 3、配置中心收到请求之后就会给对应的服务找到对应的订阅方
- 4、当服务消费方拿到地址之后就会直接发起服务调用操作。
客户端调用流程
服务端调用流程
从上面时序图可以看到,一个最简单的入门HelloWorld的调用过程中,客户端也就说服务消费方的调用流程要比服务提供方的调用流程复杂的多。要处理的东西也比较多
总结
通过上面的内容总结了一下对于SOFA这个开源框架的简单的入门介绍,相比较于其他的入门介绍又做了比较细致的分析。结尾还提供了两个时序图的比较。通过对于上面内容的分析,自己也对SOFA有了一个全新的认识,当然SOFA框架还在不停的更新中,希望自己可从中学到更多的知识。