soul网关系列(四):Sofa

您所在的位置:网站首页 sofa框架优缺点 soul网关系列(四):Sofa

soul网关系列(四):Sofa

2023-08-13 09:56| 来源: 网络整理| 查看: 265

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

目录 一、Sofa-RPC介绍2.1 简介2.2 基本原理2.3 与dubbo的区别 二、Sofa-RPC服务运行实例三、webflux响应式编程语法介绍3.1 spring mvc 和 webflux3.2 简介 四、几个小插曲

一、Sofa-RPC介绍 2.1 简介

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

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

2.2 基本原理

在这里插入图片描述

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

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

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

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

dubbo更加轻量级一点,sofa有HSF的基因,据说比较重dubbo是完全开源,sofa-rpc开源刚开始,生态还没完善。 二、Sofa-RPC服务运行实例

与dubbo基本一致

前置条件

运行soul-admin开启zookeeper

运行步骤

网关管理打开sofasoul-bootstrap pom文件添加sofa依赖,启动soul-bootstrap参考soul-test-sofa,引入依赖,yml配置启动soul-test-sofapostman测试 在这里插入图片描述 三、webflux响应式编程语法介绍 3.1 spring mvc 和 webflux

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

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

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

3.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 hellMono(){ return Mono.just("Hello Mono"); } Flux:发射0到N个元素的异步"发射器 @RequestMapping("/hellFlux") public Flux hellFlux(){ return Flux.just("Hello Flux1", "Hello Flux2"); }

在这里插入图片描述

四、几个小插曲 zookeeper的报错 bootstrap 和 soul-test-sofa 测试过程中报zookeeper连接错误,重启后解决,初步原因分析为待机时间过长,连接异常。 后来装了个zookeeper插件zookeeper 插件


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3