总系列目录地址

SofaRpc 是啥

soul 里面的 sofa 是sofastack 社区下面的一个高可扩展,高性能,生产级的 java rpc 框架, 由蚂蚁金服开源, 全名 SOFARPC

SofaRpc 总体架构

sofa

  1. 当一个 SOFARPC 的应用启动的时候,如果发现当前应用需要发布 RPC 服务的话,那么 SOFARPC 会将这些服务注册到服务注册中心上。如图中 Service 指向 Registry。
  2. 当引用这个服务的 SOFARPC 应用启动时,会从服务注册中心订阅到相应服务的元数据信息。服务注册中心收到订阅请求后,会将发布方的元数据列表实时推送给服务引用方。如图中 Registry 指向 Reference。
  3. 当服务引用方拿到地址以后,就可以从中选取地址发起调用了。如图中 Reference 指向 Service。

基本架构就是 sofa 自己实现了一个注册中心, 所有服务 Service 发布到注册中心上面。 第三方调用 Reference 会通过注册中心获取元数据,从中选择一个地址访问, 可以看到,选择算法是放在 client 端实现,减少注册中心压力。
基本设计思路与dubbo一致。

SofaRpc 有什么功能

  • 支持不同的协议,包括 bolt, RESTful, dubbo, H2C, HTTP等

协议的切换使用很方便,以 annotation 为例,只需要修改 bindingType 就可以
@SofaService(bindings = {@SofaServiceBinding(bindingType = “dubbo”)})
@SofaReference(binding = @SofaReferenceBinding(bindingType = “dubbo”), jvmFirst = false)

  • 支持各类注册中心

如: SOFARegistry, Zookeeper, 本地文件, Consul, Nacos

  • 负载均衡

自带多种负载均衡算法:随机算法,本地优先算法,轮询算法,一致性 hash 算法, 按权重负载均衡轮询算法

  • 过滤器

sofa 有一套良好的可扩展性机制,为各个模块提供 SPI 的能力。可以通过多种方式定义自己的 filter

  • 路由寻址
  • 调用重试
  • 链路追踪
  • 预热转发
  • 容灾恢复
  • Node 跨语音调用
  • 优雅关闭

SofaRpc 特色功能

  • 链路追踪

sofarpc 5.4.0+ 集成 sofatracer 功能, 会输出链路中的数据信息。
摘要日志:默认以 json 格式保存摘要,如 日志打印时间,TraceId, SpanId, 目标ID, 本机ID, 调用总耗时等信息。
统计日志:方法信息, 服务接口信息, 调用次数,总耗时等。

  • 链路数据透传

应用向整个调用链路中传数据,整个链路的应用都可以使用该数据, 可以向上也可以向下传递, 类似于缓存功能。

  • Node 跨语言调用

提供 NodeJs 调用工具

SofaRpc 整合

具体查看dromara-sofa

  • soul-bootstrap 添加依赖
  • soul-admin 打开 sofa 插件开关
  • 相关 sofa 应用的服务类使用@SoulSofaClient 注解,注册到 soul 网关
  • 使用 http 方式调用 sofa

soul 网关的整合相当于外部加了一个转换器, sofa 内部也支持 http 协议

SofaRpc 在项目中的应用场景

dubbo 支持的协议:dubbo、rmi、hessian、http、webservice、thrift、memcached,redis, sofa 支持的协议:bolt, RESTful, dubbo, H2C, HTTP等,如果系统繁多,协议多,又不想另外开发,适合选用 soul + dubbo。
如果需要做整体数据监控,各种调用统计,可以直接使用 sofa 的调用链。
预热权重功能,解决刚启动时的高并发访问超时问题。
跨语言调用问题,直接通过 soul 代理出去,任何语言都支持 http 方式。
自带服务治理能力,无需第三方管理,故障会自动剔除,适合快速开发交付。

SofaRpc 第一性原理

sofaRpc 的场景是基于金融级服务的,本身偏向于更少的依赖外部组件,基本所有的相关开发 sofaStack 都另外做了一套开源实现, 同时 sofa 也支持与其他应用组合使用。

总结

sofaRpc 有很多功能,soul-sofa 只是支持了协议转发功能。如果需要一整套金融级方案或者类似的需要,可以找下 SOFAStack 里面其他的项目。
rpc 框架的基本功能都大同小异,协议的支持,服务预热,服务注册等,需要根据实际的需要选择合适的框架,调研过程最好的方式还是直接看官方文档。SofaStack 的官方文档写得比较清晰。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐