spring cloud 服务之间的负载均衡

在使用spring cloud的时候, 我们使用Feign来进行服务之间的相互访问; 那如果我们该服务的访问流量很大的时候我们肯定不能单独使用项目来跑服务, 这时候分布式系统就要搭配集群使用了~;
前面回顾:
spring cloud之Eureka--服务治理
spring cloud使用过Eureka怎么进行服务间相互访问--Feign
spring cloud调用方法异常怎么办--Hystrix使用讲解

下面是我自己在github上的spring cloud的demo
spring_cloud_demo

1.spring cloud里面如何服务之间负载均衡

1.1什么是负载均衡

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如WEB服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单的来说, 就是多台服务器来执行同一个任务, 根据某种算法来实现均衡的访问服务器;

1.2spring cloud中的负载均衡

实现负载均衡必须需要两个及以上服务器(跑同一个功能)才能实现;
cloud中, 已经给我们准备好了负载均衡的组件: Ribbon

2.spring cloud 使用Ribbon

2.1添加依赖


        
            org.springframework.boot
            spring-cloud-starter-ribbon
        

2.2启动负载均衡 Ribbon

在spring boot的启动类中添加注解@LoadBalanced

package cn.cooplan.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@EnableHystrix //开启熔断器
@EnableFeignClients
@EnableEurekaClient //开启Eureka客户端服务
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
    @Bean
    @LoadBalanced //开启负载均衡
    RestTemplate restTemplate (){
        return new RestTemplate();
    }
}

备注:restTemplate方法返回的对象是Feign的依赖对象, @LoadBalanced注解开启, 默认负载均衡实现是使用轮询的方法;
简简单单的一个注解我们就实现了负载均衡, 这里大家可以自己去测试一翻, 注意的是, 被调用的服务最少有两台服务在跑, 例如, 服务A要调取服务B , B 就要开启 B1, B2;

3.总结

我们要实现负载均衡, 比如要有两个以上的服务在跑同一个功能, 这个时候我们才有实现负载均衡的意义;在使用Eureka服务治理的时候, 例如启动两个GOODS服务, 都是来完成goods的功能, 这个时候我们在使用Feign进行服务间通信的时候, 我们会获得两个GOODS服务的对象, Ribbon根据制定的规则, 来对GOODS的服务进行访问, 有轮询, 加权轮询, 随机等形式来实现负载均衡;

你可能感兴趣的:(spring cloud 服务之间的负载均衡)