soul网关系列(四):Sofa-RPC服务运行实例和深入分析

Sofa-RPC 是蚂蚁金服开源的一款基于 Java 实现的 RPC 服务框架,为应用之间提供远程服务调用能力

一、Sofa-RPC介绍

2.1 简介

Sofa-RPC 是蚂蚁金服开源的一款基于 Java 实现的 RPC 服务框架,为应用之间提供远程服务调用能力,具有高可伸缩性,高容错性,目前蚂蚁金服所有的业务的相互间的 RPC 调用都是采用 SOFARPC。SOFARPC 为用户提供了负载均衡,流量转发,链路追踪,链路数据透传,故障剔除等功能。

SOFARPC 还支持不同的协议,目前包括 bolt,RESTful,dubbo,H2C 协议进行通信。其中 bolt 是蚂蚁金融服务集团开放的基于 Netty 开发的网络通信框架。

2.2 基本原理

在这里插入图片描述

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

2.3 与dubbo的区别

Dubbo 是阿里集团开源的一款非常优秀的RPC框架,高性能,具有良好的扩展性。Dubbo在国内开源界起步较早,使用者较多,开源生态更加丰富,目前已进入Apache基金会进行孵化。Dubbo最早在阿里巴巴B2B部门广泛使用。

SOFARPC 最早起源于阿里集团内部的 HSF,但是经过了蚂蚁金服集团内部多年的独立发展,目前脱离为一个独立的产品。SOFARPC 在协议,网络,路由,可扩展性等层面都进行了大量的改造和优化的工作,以满足蚂蚁金服大规模金融级的业务场景。在蚂蚁金服内部,SOFARPC 在蚂蚁中间件(SOFAStack)的生态下,有完善的微服务技术栈支持,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量等等。

感觉二者功能上很类似,差异我的理解如下

  1. dubbo更加轻量级一点,sofa有HSF的基因,据说比较重
  2. dubbo是完全开源,sofa-rpc开源刚开始,生态还没完善。

二、Sofa-RPC服务运行实例

与dubbo基本一致

前置条件

  1. 运行soul-admin
  2. 开启zookeeper

运行步骤

  1. 网关管理打开sofa
  2. soul-bootstrap pom文件添加sofa依赖,启动soul-bootstrap
  3. 参考soul-test-sofa,引入依赖,yml配置
  4. 启动soul-test-sofa
  5. postman测试
    在这里插入图片描述

三、webflux响应式编程语法介绍

3.1 spring mvc 和 webflux

在这里插入图片描述
​ 从上图可以看出

  • WebFlux 是Spring5以后推出的一款全新的响应式Web框架,是完全异步非阻塞。,SpringMVC是同步阻塞的
  • 响应式一般用Netty或者Servlet 3.1的容器(因为支持异步非阻塞),而Servlet技术栈用的是Servlet容器

在微服务架构中,Spring MVC 和 WebFlux 可以混合使用,比如已经提到的,对于那些 IO 密集型服务(如网关),我们就可以使用 WebFlux 来实现。

3.2 简介

  1. 引入依赖
    在这里插入图片描述
  2. WebFlux Reactor 发射器

WebFlux 内部使用的是响应式编程(Reactive Programming),以 Reactor 库为基础, 基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。

Mono 实现了 org.reactivestreams.Publisher 接口,代表0到1个元素的发布者(Publisher) 
Flux 同样实现了 org.reactivestreams.Publisher 接口,代表0到N个元素的发布者(Subscriber)

  • Mono:发射0到1个元素的异步"发射器
@RequestMapping("/hellMono")
public Mono<String> hellMono(){
    return Mono.just("Hello Mono");
}
  • Flux:发射0到N个元素的异步"发射器
@RequestMapping("/hellFlux")
public Flux<String> hellFlux(){
    return Flux.just("Hello Flux1", "Hello Flux2");
}

在这里插入图片描述

四、几个小插曲

  1. zookeeper的报错
    bootstrap 和 soul-test-sofa 测试过程中报zookeeper连接错误,重启后解决,初步原因分析为待机时间过长,连接异常。
    后来装了个zookeeper插件zookeeper 插件
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值