前言:

提到分布式、微服务,大部分人首先想到的可能是SpringCloud、Duubo等主流框架,但事实上在SpringCloud还未出现之际,蚂蚁金服内部就已经有了一套比较完整的金融级分布式架构Sofa,并且到目前为止,经历了大大小小比较完善的闭环金融场景,如双十一、双十二等。说来也惭愧,之前并未关注到Sofa早已开源,所以一直不敢发布有关Sofa的相关文章,如果对Sofa知之甚少的小伙伴,接下来就和我一起进入一个新世界:Sofa分布式微服务架构。

1.Sofa结构图:

2.Sofa简单介绍:

Scalable Open Financial Architecture,即面向服务的架构。

主要组件:微服务研发框架 RPC 框架 服务注册中心 分布式定时任务 限流/熔断框架 动态配置推送 分布式链路追踪Metrics监控度量 分布式高可用消息队列 分布式事务框架、分布式数据库代理层等组件,由于Sofa结构过于复杂,这里主要以结构图中红色框为主要内容,其他内容后续文章会有具体介绍(大家多多关注哦)。

3.使用Sofa的意义是什么

这里以Sofa和SpringCloud做一个简单比较为例。

1)Sofa

Sofa将应用系统拆分为多个模块(bundle),各个模块之间各司其职,负责独立的业务,模块之间通过JVM/RPC接口调用。

2)SpringCloud

SpringCloud将应用系统拆分为多个微服务,模块之间通过RPC/HTTP方式进行调用。

3) Sofa优势

SOFA是蚂蚁金服自己研发的一套方案,天然集成了RPC、服务路由等功能,能够与蚂蚁内部其它中间件(如zdal、drm、msgbroker等)无缝结合,这一整套技术方案撑起了蚂蚁金服的核心业务, 它更加适合金融云环境,一旦出现问题能够快速定位并解决。

4.Sofa工程结构

test测试层:集成测试框架Junit/TestTNG/Acts,实现测试用例。

web-home:实现controller控制层。

biz业务层:biz-shared实现本地具体业务,biz-shared-impl实现 对外发布服务的具体实现,默认依赖于biz-shared和common-service-facade。

核心领域层:core-model封装核心领域模型对象,如将数据库属性转化为枚举,Json字符串转化为JSONObject或者对象等。core-service封装核心领域服务,主要是对数据库访问层的封装,以及可复用业务的封装。

基础层:数据库访问层封装。

总结:Sofa不同模块之间的spring context上下文是相互隔离的,两个模块之间的bean不能通过spring的依赖注入来直接调用。

5.Sofa服务的发布与引用(RPC)

1)JVM服务发布和引用:同一个Sofa应用中不同模块之间的调用,即单机内部调用。

创建接口和实现

以xml方式服务发布

在Spring xml配置文件中,将实现类声明为一个bean

<bean id="jvmService"class="cn.test.impl.JvmServiceImpl"/>

将bean注册为sofa服务,本工程中的其他模块就可以引用了。

<sofa:service ref="jvmService"interface="cn.test.JvmService"/>

以xml方式服务引用

同一个模块中直接用Spring注解@Autowired自动注入就可以使用

@Autowired private JvmService jvmService;

不同模块中直接用Sofa注解@SofaReference自动注入就可以使用

@SofaReference private JvmService jvmService;

以注解方式服务发布

@SofaServicepublicclassJvmServiceImplimplementsJvmService{ @Override publicStringget(){ return"JVM"; }}

以注解方式服务引用

@SofaReferenceprivate JvmService jvmService;

2)RPC服务发布和引用:多个Sofa应用之间不同模块的的调用,即跨机调用。目前只支持XML配置方式。

服务发布

<sofa:serviceref="rpcService "interface="cn.test.RpcService">

<sofa:binding.tr/>

</sofa:service>

服务引用

<sofa:referenceid="rpcService"interface="cn.test.RpcService">

<sofa:binding.tr testUrl= "服务注册器IP"/>

</sofa:reference>

代码中直接用Sofa注解@SofaReference自动注入就可以使用

6.Sofa服务的发布与引用(RPC)原理解析

1)在xml中引入sofa命名空间

// sofa命名空间xmlns:sofa="http://schema.alipay.com/sofa/schema/service"// 该命名空间的唯一标示xsi:schemaLocation="http://schema.alipay.com/sofa/schema/service http://schema.alipay.com/sofa/sofa-service-4-0-0.xsd"

2.通知Spring加载sofa标签

3.解析sofa:service和sofa:reference标签

4.服务发布,本质是注册服务,将服务对象通过register方法注册到sofa上下文sofaRuntimeContext中。

4.服务引用,本质是找到服务。Reference的意义在于将目标服务的代理对象从SofaRuntimeContext中取出,加载为Spring的bean。

1)JVM调用:通过JvmBindingAdapter获取代理对象,生成代理对象的执行器JvmServiceInvoker,执行代理对象的方法。

2)RPC调用:通过RpcBindingAdapter获取代理对象,返回执行器SofaServiceProxy,执行代理对象的方法。

总结:调用时,所有模块都可以在全局的registry中获取想要的服务。对于JVM服务,同一应用下其他模块调用该服务只需查询本地注册中心即可。对于RPC服务,RpcBindingAdapter的方法outBinding会将服务推送到远程注册中心中供外部调用。

我是一支喜欢梨花的海棠,也是一束喜欢梨花的海棠, 我们下次见。

下期预告:蚂蚁金服开源服务注册中心 SOFARegistry。

PS: 文章是笔者分享的学习笔记,若你觉得可以、还行、 过得  去、甚至不太差的话,可以“推荐”或者“关注”一下的哦。就此谢过!

浅谈阿里巴巴蚂蚁金服SOFA微服务开源框架相关推荐

  1. 蚂蚁金服SOFA开源负责人鲁直:不只是中间件,未来会开源更多

    近日,技术媒体Linux中国的创始人王兴宇对蚂蚁金服SOFA开源负责人鲁直,就SOFA 5.ServiceMesh.Serverless.Seata等技术内容进行了探讨,以下为专访文章. 虽然我和鲁直 ...

  2. 2018面试总结(阿里巴巴蚂蚁金服、饿了么、人人车等)

    前言 今年跳槽换工作,一共面试了8家公司,拿到了6个offer,其中包括阿里巴巴蚂蚁金服(外派杭州).饿了么.人人车等公司,总体来说还算是顺利,因为也没面的特别多,想把今年的面试情况总结一下,给自己做 ...

  3. 2019面试总结(阿里巴巴蚂蚁金服、饿了么、人人车等)

    前言 今年跳槽换工作,一共面试了8家公司,拿到了6个offer,其中包括阿里巴巴蚂蚁金服(外派杭州).饿了么.人人车等公司,总体来说还算是顺利,因为也没面的特别多,想把今年的面试情况总结一下,给自己做 ...

  4. 蚂蚁金服SOFA开源负责人鲁直:不只是中间件 ,未来会开源更多

    二月初春,在西子湖畔的细雨中,我拜访了蚂蚁金服中间件团队,和 SOFA 技术负责人鲁直做了一次深入交谈,更妙的是,鲁直也是负责 SOFA 开源事务推进的人,而这样一个切实践行开放核心模式的开源项目,也 ...

  5. 微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端

    作者:Cony 导语:微服务开源框架TARS的RPC调用包含客户端与服务端,<微服务开源框架TARS的RPC源码解析>系列文章将从初识客户端.客户端的同步及异步调用.初识服务端.服务端的工 ...

  6. Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。

    Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 前方: 开源地址:GitHub - cyq1162/Taurus.MVC: Taurus.mvc i ...

  7. 蚂蚁金服入职考试_阿里巴巴蚂蚁金服面试通过,多久给offer?

    校招,面试一天内面完的两轮,当天晚上电话通知面试通过,凌晨发的利用意向书邮件,第二天就去谈薪了. ---------------------- 介于有同学在提问,我就具体说下我的面试流程吧. 一面(群 ...

  8. 2019秋招后台开发面试记录(阿里巴巴蚂蚁金服、百度、360、美团点评)

    蚂蚁金服二面 1.自我介绍 2.项目 3.10亿数字找最大100个数,不考虑内存问题,问的很细 4.索引 B+树和二叉树 5.腾讯可以留吗?给你offer了吗?你是不是要优先选择腾讯 5.其他的个人问 ...

  9. 蚂蚁金服、微众银行、度小满都来了,智能金融将何去何从?(文末福利)

    (大会官网 https://t.csdnimg.cn/U1wA) 金融业是一个数据堆砌起来的行业,有客户信息.风险控制数据.交易数据等等,如果这些数据没有被有效的管理和分析,会增加企业的经营风险和降低 ...

最新文章

  1. :src 三目运算
  2. Fluid: 让大数据和 AI 拥抱云原生的一块重要拼图
  3. json文件中的双引号隐藏
  4. vue接收json数据_Vue之使用ajax获取json数据,并用v-for循环显示在表格中
  5. pip install mysqlclient 报错:error: Microsoft Visual C++ 14.0 is required.
  6. cmd命令配置MySQL
  7. 【图像聚类】基于matlab GUI K-means算法图像聚类【含Matlab源码 1787期】
  8. idea修改批量替换快捷键,idea快捷键替换处理对象 idea替换快捷键,批量处理对象的操作...
  9. Java实现 LeetCode 108 将有序数组转换为二叉搜索树
  10. 没有大招的火山引擎,拿下70%大模型玩家
  11. 开发板qt移植和交叉开发环境搭建学习笔记
  12. 嵌入式linux环境取得U盘容量等信息的方法
  13. 【php】php开发环境的搭建
  14. [HAL]STM32 SPI+DMA驱动WS2812
  15. 百望九赋服务器返回为空,百望九赋税控盘开局电子发票怎么弹出窗口备份设置目录不正确...
  16. MySQL数据库引擎、数据事务与隔离级别
  17. Python-小数取整与小数四舍五入
  18. 考研数学:罗尔定理的推论
  19. ccs是轮_CCS系统简介
  20. 结构型模式中最能体现扩展性模式的是?

热门文章

  1. 传说她是南京理工大学校花
  2. Sicily 1009. Mersenne Composite N
  3. 晚上睡眠质量不好怎么办?试试这些助眠方法,让你一招入睡
  4. 我爱海春(帮别人名字作诗)
  5. 【内推网】错失1800万融资之后,他用900元挽救了公司
  6. 泽地萃:共同信念;地风升:厚积薄发
  7. 京东金融客户端用户触达方式的探索与实践
  8. 【论文解读--触地检测+FSM状态切换】(猎豹 3)Contact Model Fusion for Event-Based Locomotion in Unstructured Terrains
  9. 求两个自然数的最大公约数
  10. PXIe/PXI背板 全混合8槽 4 Link架构 系统带宽14GB/s 单槽4GB/s 兼容主流PXIe厂商PXIe控制器