Soul网关(十二)---- 负载均衡客户端 Ribbon 和 RPC 框架 Sofa

Ribbon 和 sofa-rpc

      • Spring Cloud中的客户端负载均衡——Ribbon
      • SOFARPC
        • 功能特性
        • Bolt 协议基本使用
        • XML
        • 架构图
        • 模块划分
        • sofa-rpc 框架源码待深入研究

Spring Cloud中的客户端负载均衡——Ribbon

Spring Cloud 生态:
  Eureka	服务治理
  Ribbon	负载均衡
  Feign 	API调用
  Hystrix	容错保护
  Zuul		API网关
  Gateway	响应式网关
  Config	配置中心
  Sleuth	请求链路跟踪

这里主要基于 Soul 网关的 starter : SpringCloudPluginConfiguration 来研究一下负载均衡客户端。

目前主流的负载方案分为两种:

​ 1.集中式负载均衡,比如 Nginx

​ 2.客户端负载均衡,客户端根据请求情况做负载,Ribbon 就属于这一种

客户端负载均衡需要自己维护服务实例的信息,然后通过负载均衡算法,从实例中选取一个实例进行访问。这里选取 Ribbon 来研究一下,因为 soul 网关中也有用到 Ribbon。

soul网关的 starter : SpringCloudPluginConfiguration 初始化 Spring Cloud Plugin 时会指定负载均衡客户端 LoadBalancerClient

@ConditionalOnClass({LoadBalancerClient.class, RibbonAutoConfiguration.class, DispatcherHandler.class})
@AutoConfigureAfter(RibbonAutoConfiguration.class)
@ConditionalOnBean(LoadBalancerClient.class)
@Configuration
public class SpringCloudPluginConfiguration {

    /**
     * 初始化 springCloud plugin.
     *
     * @param loadBalancerClient the load balancer client
     * @return {@linkplain SpringCloudPlugin}
     */
    @Bean
    public SoulPlugin springCloudPlugin(final ObjectProvider<LoadBalancerClient> loadBalancerClient) {
        return new SpringCloudPlugin(loadBalancerClient.getIfAvailable());
    }
}

Ribbon的主要组件有:

组件 描述
Rule 内置了许多负载均衡算法策略
ServerList 主要负责服务实例的获取
ServerListFilter 用于过滤掉某些服务实例
ServerListUpdater 更新本地缓存中的服务实例信息
IPing 对已有服务进行探活
LoadBalancer 提供了选择服务实例的接口

SOFARPC

RPC 框架 Sofa 是一个高可扩展性、高性能、生产级的 Java RPC 框架,支持多种协议,包括 Bolt、Rest、Dubbo等。

功能特性

  • 透明化、高性能的远程服务调用
  • 支持多种服务路由及负载均衡策略
  • 支持多种注册中心的集成
  • 支持多种协议,包括 Bolt、Rest、Dubbo 等
  • 支持同步、单向、回调、泛化等多种调用方式
  • 支持集群容错、服务预热、自动故障隔离
  • 强大的扩展功能,可以按需扩展各个功能组件

Bolt 协议基本使用

在 SOFARPC 中,使用不同的通信协议只要设置使用不同的 Binding 即可。添加 Bolt Binding 的方式有多种,如 XML、@SofaServiceBinding注解等。XML方式如下:

XML

使用 XML 发布一个 Bolt 协议只需要在 标签下增加 标签即可:

<sofa:service ref="sofaTestService" interface="org.dromara.soul.examples.dubbo.api.service.DubboTestService">
    <sofa:binding.bolt/>
sofa:service>

架构图

SOFARPC 从下到上分为两层:

  1. 核心层:包含了我们的 RPC 的核心组件(例如我们的各种接口、API、公共包)以及一些通用的实现(例如随机等负载均衡算法)。

  2. 功能实现层:所有的功能实现层的用户都是平等的,都是基于扩展机制实现的。

    Soul网关(十二)---- 负载均衡客户端 Ribbon 和 RPC 框架 Sofa_第1张图片

模块划分

各个模块的实现类都只在自己模块中出现,一般不交叉依赖。需要交叉依赖的全部已经抽象到core或者common模块中

Soul网关(十二)---- 负载均衡客户端 Ribbon 和 RPC 框架 Sofa_第2张图片

sofa-rpc 框架源码待深入研究

sofa-rpc

你可能感兴趣的:(Soul,网关源码)