微服务架构学习-进阶篇--01,负载均衡ribbon

第一节:ribbon在微服务架构中扮演什么角色?

1,什么是ribbon?
(1)Ribbon是一个基于Http和tcp的客户端负载均衡工具,它是基于Netflix Ribbon实现的。
(2)他不像spring cloud服务注册中心,配置中心,API网关那样独立部署,但是它几乎存在于每个spring cloud微服务中。包括feign提供的声明式服务调用也是基于该ribbon实现的。
(3)ribbon默认提供很多负载均衡算法,例如轮询,随机等待。甚至包含自定义的负载均衡算法。

2,ribbon解决了什么问题?
解决并提供了微服务的负载均衡的问题。

3,负载均衡解决方案的分类
目前业界主流的负载均衡方案可分成两类?
第一类:集中式负载均衡,即在服务的消费方和提供方之间使用独立的负载均衡设施(可以是硬件,如F5,也可以是软件,如nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
第二类:进程内负载均衡,将负载均衡逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
ribbon就属于后者,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

4,ribbon架构原理图解
在这里插入图片描述
从上图可以知道,ribbon是集成在consumer中的。各个provider首先在eureka中注册,consumer也在eureka中注册,当consumer要调用provider的时候,先在eureka中获取可用的provider注册信息,获取到之后,根据ribbon提供的负载均衡算法选择出合适的一个provider,然后再发起请求。

第二节:ribbon的简单入门例子讲解

要写一个ribbon的例子,实现负载均衡的功能,我们至少需要两个应用名相同的provider。
(1)新建一个provider。
借用基础篇中的那个provider,我们再新建一个provider,命名为eureka-provider-duo-server。拷贝原provider的所有文件,然后将配置文件中的端口改为8085。
(2)启动eureka的注册中心。
(3)启动这两个provider。
(4)启动consumer。
(5)由于spring cloud的eureka依赖已经包含了ribbon的依赖,所以我们不需要再引入ribbon的依赖了。
浏览器访问http://localhost:8084/list,连续不断地多刷新几次,可以在后台日志看到如下打印:
在这里插入图片描述
源码见这里

第三节:七种常用负载均衡策略的对比与区别

在这里插入图片描述
1,方法一:修该代码,达到选择负载均衡的目的。
(1)在eureka模块下,新建maven项目,命名为eureka-consumer-Lb,将eureka-consumer的controller,domain,service,启动类,配置文件全都拷贝一份到新建项目中。
(2)修改pom文件,添加web依赖和打包插件,具体参考eureka-consumer。
(3)修改配置文件,将应用名设置为eureka-consumer-Lb,端口设置为8086。
(4)修改启动类,添加配置负载均衡的代码,如下:

package com.twf.eureka.consumer.Lb;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;

@EnableEurekaClient
@SpringBootApplication
public class ConsumerLbApplication {

	@Bean
	public IRule ribbonRule() {  // 配置负载均衡策略
		return new RandomRule(); // 这里配置的是随机策略
	}
	
	public static void main(String[] args) {
		SpringApplication.run(ConsumerLbApplication.class, args);
	}
}

(5)启动eureka注册中心,启动两个provider,启动eureka-consumer-Lb。
(6)访问http://localhost:8086/list,快速连续点击刷新图标,在后台控制台打印日志如下:
在这里插入图片描述
2,方法二:修改配置文件,达到选择负载均衡的目的。
(1)注释掉启动类中的配置策略的代码。
(2)在配置文件中加上如下配置:
在这里插入图片描述
3,重启eureka-consumer-Lb,访问http://localhost:8086/list,效果如上。
4,源码点这里

第四节:采用点对点直连的方式,让ribbon的开发调试更方便快捷

1,在ribbon开发调式的时候,为什么需要采用点对点的直连方式?
首先明确,直连就是指消费方consumer直接调用服务provider。
一般在项目的开发过程中,会有多个开发人员同时启动项目,比如有张三,李四,王五,同时提供了这个服务,那么根据ribbon的负载均衡算法,比如轮询,本来消费方是要和张三联调,结果请求第二次发给了李四,第三次发给了王五,这样就会影响李四王五的工作,而且也不利于消费方和张三的联调。所以这时就需要点对点直连,让消费方只和张三联调,不影响其他人。

2,实现点对点直连
(1)在eureka模块下,新建maven项目,命名为eureka-consumer-remove-eureka。
(2)拷贝eureka-consumer的controller,domain,service,启动类,配置文件到这个项目中。
(3)修改pom文件,一是加入web依赖和ribbon依赖,二是加入maven打包插件配置,三是将该项目的继承关系由继承eureka改为继承spring-cloud-in-action(即继承总模块)。
配置文件如下:
在这里插入图片描述

(4)修改配置文件。
删除eureka的配置,修改应用名和端口,然后加上ribbon的配置,如下:

spring.application.name=eureka-consumer-remove-eureka
server.port=8087

#禁用eureka
ribbon.eureka.enabled=false
#指定具体的服务实例清单
eureka-provider.ribbon.listOfServers=localhost:8083

(5)启动注册中心,两个provider,和这个项目。
(6)浏览器访问http://localhost:8087/list,多次点击刷新图标,后台打印如下:
在这里插入图片描述
(7)如果想和多个人联调,那么在配置文件的服务列表中加入即可,配置如下:

spring.application.name=eureka-consumer-remove-eureka
server.port=8087

#禁用eureka
ribbon.eureka.enabled=false
#指定具体的服务实例清单
eureka-provider.ribbon.listOfServers=localhost:8083,localhost:8085

再启动,再访问,后台打印如下:
在这里插入图片描述
源码见这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值