使用springCloud构建微服务实现——客户端测负载均衡(自定义负载均衡策略)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 使用springCloud构建微服务实现——客户端测负载均衡(自定义负载均衡策略)

一、前期准备

先创建一个注册中心,一个消费者服务,一个生产者服务,由于之前写过,这里不多写了,请参考前面的博文。

使用springCloud构建微服务实战:https://blog.csdn.net/jiankang66/article/details/90084845

二、本篇主题

在生产环境中,各个微服务都会部署多个实例,服务消费者需要将请求分摊到多个服务提供者上,在微服务中,当Ribbon与Eureka配合使用时,Ribbon可基于某种算法,自动地帮助消费者去请求,因为feginClient已经默认使用了Ribbon,只需要引入fegin的依赖就可以了。


1、在上篇的基础上,我们新建一个与上一个provider生产者一样的服务,只是端口号不一样,应用名与上一个一致。这时候,我们有了以下的服务:


(1)一个注册中心


(2)两个生产者


(3)一个消费者


2、在两个生产者中写同样的Controller,但是打印的日志不一样。


(1)provider1中的Controller方法为:

@RestController
public class TestController {
    //打印日志的属性
    private static final Logger LOGGER= LoggerFactory.getLogger(TestController.class);
    @RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam ("count") int count){
        LOGGER.debug("provider1第{}次访问",count);
        return "1111111111111111111";
    }
}

(2)provider2中Controller的方法与provider1一样,这是打印的日志不一样。

@RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count){
        LOGGER.info("provider2第{}次访问",count);
        return "222";
    }

3、对消费者进行操作

(1)在Controller中添加一个测试的方法,该方法循环调用十次生产者的方法。

 @RequestMapping("/mcount")
    public String count(){
        for(int i=1;i<11;i++){
           schedualServiceHi.count(i);
        }
        return "负载均衡完成!";
    }

(2)在SchedualServiceHi接口中添加调用生产者的方法。

@FeignClient(name= "myprovider",fallback = TestFeignImpl.class)
public interface SchedualServiceHi {
    @RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count);
}

三、效果展示

1、将所有项目运行,打开浏览器请求消费者中mcount的方法。

查看两个provider的打印日志,如下:

(1)provider1的打印日志:

image.png

(2)provider2的打印日志:

image.png

从中可以看出这十次是轮询访问所有生产者的,实现了负载均衡。

四、对负载均衡策略实现自定义

1、引入springCloud的ribbon依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2、在配置类中设置策略方法

Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,他的每一个子类都是一种负载均衡算法。例如:

(1)RoundRobinRule 轮询

(2)RandomRule 随机

上一步结果是默认的策略轮询。

3、修改策略时,配置类代码如下:设置为随机策略.

@Configuration
public class ConfigBeans {
    @Bean
    public IRule myRule(){
        return new RandomRule();
    }
}

4、结果展示

(1)provider1的日志:

image.png

(2)provider2的日志:

image.png

可以很容易看出,结果是随机访问生产者的。

五、总结

通过以上操作,我们实现了微服务负载均衡的功能,

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3天前
|
运维 监控 Docker
构建高效微服务架构:从理论到实践构建高效自动化运维体系:Ansible与Docker的完美融合
【5月更文挑战第31天】 在当今软件开发的世界中,微服务架构已经成为了实现可伸缩、灵活且容错的系统的关键策略。本文将深入探讨如何从零开始构建一个高效的微服务系统,涵盖从概念理解、设计原则到具体实施步骤。我们将重点讨论微服务设计的最佳实践、常用的技术栈选择、以及如何克服常见的挑战,包括服务划分、数据一致性、服务发现和网络通信等。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们构建出既健壮又易于维护的微服务系统。
|
3天前
|
Cloud Native 数据库 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第31天】 在数字化转型的浪潮中,微服务架构已成为企业技术战略的核心组成部分。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术选型、以及实践中的挑战与解决方案。通过对微服务架构的细致剖析,我们将提供一套实用的指南,帮助后端开发者优化系统结构,提升服务的可靠性、伸缩性和敏捷性。
|
3天前
|
Kubernetes 负载均衡 开发者
构建高效后端服务:从微服务到容器化部署
【5月更文挑战第31天】本文深入探讨了现代后端开发中的关键概念,包括微服务的架构设计、容器化技术的运用以及它们如何共同提升应用的可扩展性、可靠性和性能。通过具体案例分析,我们将揭示这些技术是如何在实际开发中被实施的,并讨论它们对后端开发流程的影响。
|
3天前
|
消息中间件 数据库 网络架构
构建高效后端:微服务架构的优化策略
【5月更文挑战第31天】在这篇文章中,我们将深入探讨如何通过采用微服务架构来提升后端开发的效率和性能。我们将分析微服务架构的关键优势,并讨论如何克服实施过程中的挑战。通过具体的案例研究,我们将展示如何优化微服务架构以实现最佳的性能和可维护性。无论你是后端开发的新手还是经验丰富的专业人士,这篇文章都将为你提供有价值的见解和实用的技巧。
|
3天前
|
消息中间件 运维 监控
构建高效微服务架构:后端开发的新范式
【5月更文挑战第31天】在现代软件开发中,随着业务需求的多样化和系统复杂性的增加,传统的单体应用架构逐渐显得笨重且难以适应快速变化。微服务架构作为一种新兴的后端开发模式,以其灵活性、可扩展性和独立部署的特点,成为解决这一问题的关键。本文将探讨微服务架构的核心概念、设计原则以及如何在实际项目中实现一个高效的微服务系统。
|
3天前
|
敏捷开发 负载均衡 监控
探索微服务架构下的API网关设计与实践
【5月更文挑战第31天】本文将深入剖析微服务架构中的关键组件——API网关,探讨其设计理念、核心功能以及在实际项目中的应用。我们将从API网关的基本概念出发,逐步展开对其路由、负载均衡、认证授权、监控日志等方面的详细讨论,并结合实际案例,分析如何高效地实现和管理一个稳定的API网关。
|
3天前
|
缓存 监控 安全
微服务架构下的API网关设计与实践
【5月更文挑战第31天】本文深入探讨了在微服务架构中,API网关的核心作用与设计策略。通过分析网关的职责、选型标准及实现细节,文章为读者提供了一套完整的API网关解决方案。同时,结合具体案例,展示了如何在实际应用中有效部署和优化API网关,确保系统的高可用性和可扩展性。
|
3天前
|
监控 持续交付 API
探索微服务架构的高效之路
【5月更文挑战第31天】在数字化浪潮下,企业后端架构正面临前所未有的挑战与机遇。本文将深入探讨微服务架构的核心优势,揭示其如何提升开发效率、促进敏捷迭代,并确保系统的高可用性与扩展性。我们将从理论到实践,一步步剖析微服务设计的关键要素,并通过实际案例分析,展示如何在复杂业务场景中灵活运用微服务原则,以应对快速变化的市场需求。
|
3天前
|
API 开发者 微服务
探索后端开发中的微服务架构
【5月更文挑战第31天】在数字化浪潮中,微服务架构如星辰般熠熠生辉,为后端开发领域带来革命性的创新。本文将深入探讨微服务架构的精髓,从其定义、核心优势到实际应用,展现这一技术如何在复杂业务场景下提供灵活、高效的解决方案。我们将一同见证微服务如何助力企业快速响应市场变化,实现技术的可持续发展。
|
3天前
|
敏捷开发 API 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第31天】 在现代软件开发的浪潮中,微服务架构已经成为企业追求敏捷开发、持续交付和系统弹性的关键解决方案。本文将深入探讨微服务架构的概念、优势以及如何构建一个高效的微服务系统。通过实际案例分析,我们将展示如何利用容器化、服务网格、API网关等技术手段,实现服务的解耦、分布式管理和网络通信优化。