Spring Cloud Alibaba实现微服务负载均衡

前言

我们在学习微服务时,一般通过轻量级调用,比如通用是Http调用来实现微服务之间的通讯,在最开始可能是通过固定的地址来实现调用,但是地址也许会随着服务器迁移会改变,服务器也会时常宕机,造成服务之前调用的失联,造成整个系统的崩溃。所以我们一般会通过第三方管理整个微服务的信息,这就是服务发现。

Nacos

作为服务注册发现,现在最流行的当属于Alibaba的Nacos了,既能发现又能配置。

英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心

Spring Cloud Alibaba实现微服务负载均衡_第1张图片
在微服务中的地位举足轻重
Spring Cloud Alibaba实现微服务负载均衡_第2张图片

Nacos官网下载:https://github.com/alibaba/nacos
运行界面:默认用户名和密码: nacos
Spring Cloud Alibaba实现微服务负载均衡_第3张图片

负载均衡

我们知道当某个服务挂了或某台服务器挂了,就会造成服务的不可用,甚至影响整个系统,所以做好多个部署十分重要,所以这就引出了负载均衡。而实现负载均衡可以用到Spring cloud自带的ribbon工具。

Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端实现负载均衡算法。

例如我们通过RestTemplate访问服务时,可以在启动类中添加以下注解 @LoadBalanced:

public class ContentCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(ContentCenterApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public static RestTemplate  restTemplate(){
        return new RestTemplate();
    }
}

并且可以通过以下方式访问:

restTemplate.getForObject("http://user-center/user/{id}", UserDTO.class, share.getUserId());

有以下几种负载均衡策略

策略 说明
RoundRobinRule 轮询策略 默认值 启动的服务被轮询访问
RandomRule 随机选择 随机从服务器列表中选择一个访问
BestAvailableRule 最大可用策略 先过滤出故障服务器,再选择一个当前并发请求数最小的服务
WeightedResponseTimeRule 带有加权的轮询策略 对各个服务器响应时间进行加权处理,再采用轮询的方式获取相应的服务器
AvailabilityFilteringRule 可用过滤策略 先过滤出故障的或并发请求大于阈值的服务实例,再以线性轮询的方式从过滤后的实例清单中选出一个
ZoneAvoidanceRule 区域感知策略 先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认0),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例

1.可以在配置文件中配置策略类型

SERVICE-TEST.ribbon.NFLoadBalancerRuleClassName = com.netflix.loadbalancer.RandomRule

2.通过添加配置代码实现
全局配置,放在启动类之外的包中,防止主上下文和子上下文重叠:

@Configuration
public class RibbonConfiguration {

    @Bean
    public IRule ribbonRule() {
    // 设置规则,可以设置自定义规则
        return new NacosWeightedRule();
    }
}

添加配置文件在启动类的包下:

@Configuration
@RibbonClients(defaultConfiguration = RibbonConfiguration.class)
public class UserCenterRibbonConfiguration {

}

你可能感兴趣的:(Spring,Cloud,Alibaba,spring,cloud,微服务,负载均衡)