收款定制开发【微服务~原始真解】Spring Cloud —— 实现负载均衡

🔎这里是【秒懂·云原生】,收款定制开发关注我学习云原生不迷路
👍收款定制开发如果对你有帮助,收款定制开发给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【秒懂·云原生】 收款定制开发目前主要更新,收款定制开发一起学习一起进步。

👀本期介绍

主要介绍Spring Cloud —— Ribbon 实现

文章目录

Ribbon 收款定制开发实现负载均衡

Ribbon 收款定制开发是一个客户端的负载均衡器,它可以与 Eureka 配合使用轻松地实现客户端的负载均衡。Ribbon 会先从 Eureka Server(服务注册中心)去获取服务端列表,然后通过负载均衡策略将请求分摊给多个服务端,从而达到负载均衡的目的。

Spring Cloud Ribbon 提供了一个 IRule 接口,该接口主要用来定义负载均衡策略,它有 7 个默认实现类,每一个实现类都是一种负载均衡策略。

序号 实现类 负载均衡策略
1 RoundRobinRule 按照线性轮询策略,即按照一定的顺序依次选取服务实例
2 RandomRule 随机选取一个服务实例
3 RetryRule 按照 RoundRobinRule(轮询)的策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试(重试时获取服务的策略还是 RoundRobinRule 中定义的策略),如果超过指定时间依然没获取到服务实例则返回 null 。
4 WeightedResponseTimeRule WeightedResponseTimeRule 是 RoundRobinRule 的一个子类,它对 RoundRobinRule 的功能进行了扩展。

根据平均响应时间,来计算所有服务实例的权重,响应时间越短的服务实例权重越高,被选中的概率越大。刚启动时,如果统计信息不足,则使用线性轮询策略,等信息足够时,再切换到 WeightedResponseTimeRule。
5 BestAvailableRule 继承自 ClientConfigEnabledRoundRobinRule。先过滤点故障或失效的服务实例,然后再选择并发量最小的服务实例。
6 AvailabilityFilteringRule 先过滤掉故障或失效的服务实例,然后再选择并发量较小的服务实例。
7 ZoneAvoidanceRule 默认的负载均衡策略,综合判断服务所在区域(zone)的性能和服务(server)的可用性,来选择服务实例。在没有区域的环境下,该策略与轮询(RandomRule)策略类似。
下面我们就来通过一个实例来验证下,Ribbon 默认是使用什么策略选取服务实例的。

一、 在 MySQL 数据库中执行以下 SQL 语句,准备测试数据。

DROP DATABASE IF EXISTS spring_cloud_db2;CREATE DATABASE spring_cloud_db2 CHARACTER SET UTF8;USE spring_cloud_db2;DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (  `dept_no` int NOT NULL AUTO_INCREMENT,  `dept_name` varchar(255) DEFAULT NULL,  `db_source` varchar(255) DEFAULT NULL,  PRIMARY KEY (`dept_no`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT INTO `dept` VALUES ('1', '开发部', DATABASE());INSERT INTO `dept` VALUES ('2', '人事部', DATABASE());INSERT INTO `dept` VALUES ('3', '财务部', DATABASE());INSERT INTO `dept` VALUES ('4', '市场部', DATABASE());INSERT INTO `dept` VALUES ('5', '运维部', DATABASE());#############################################################################################DROP DATABASE IF EXISTS spring_cloud_db3;CREATE DATABASE spring_cloud_db3 CHARACTER SET UTF8;USE spring_cloud_db3;DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` (  `dept_no` int NOT NULL AUTO_INCREMENT,  `dept_name` varchar(255) DEFAULT NULL,  `db_source` varchar(255) DEFAULT NULL,  PRIMARY KEY (`dept_no`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT INTO `dept` VALUES ('1', '开发部', DATABASE());INSERT INTO `dept` VALUES ('2', '人事部', DATABASE());INSERT INTO `dept` VALUES ('3', '财务部', DATABASE());INSERT INTO `dept` VALUES ('4', '市场部', DATABASE());INSERT INTO `dept` VALUES ('5', '运维部', DATABASE());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

二、参考 micro-service-cloud-provider-dept-8001,再创建两个微服务 Moudle :micro-service-cloud-provider-dept-8002 和 micro-service-cloud-provider-dept-8003。

三、在 micro-service-cloud-provider-dept-8002 中 application.yml 中,修改端口号以及数据库连接信息,修改的配置如下。

server:  port: 8002  #端口号修改为 8002spring:  application:    name: microServiceCloudProviderDept  #微服务名称,不做修改,与 micro-service-cloud-provider-dept-8001 的配置保持一致  datasource:    username: root        #数据库登陆用户名    password: root        #数据库登陆密码    url: jdbc:mysql://127.0.0.1:3306/spring_cloud_db2       #数据库url    driver-class-name: com.mysql.jdbc.Driver                  #数据库驱动
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

四、在 micro-service-cloud-provider-dept-8003 中 application.yml 中,修改端口号以及数据库连接信息,修改的配置如下。

server:  port: 8003  #端口号修改为 8003spring:  application:    name: microServiceCloudProviderDept  #微服务名称,不做修改,与 micro-service-cloud-provider-dept-8001 的配置保持一致  datasource:    username: root        #数据库登陆用户名    password: root        #数据库登陆密码    url: jdbc:mysql://127.0.0.1:3306/spring_cloud_db3      #数据库url    driver-class-name: com.mysql.jdbc.Driver                  #数据库驱动
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

五、依次启动 micro-service-cloud-eureka-7001/7002/7003(服务注册中心集群)、micro-service-cloud-provider-dept-8001/8002/8003(服务提供者集群)以及 micro-service-cloud-consumer-dept-80(服务消费者)。

六、使用浏览器连续访问“http://eureka7001.com/consumer/dept/get/1”,结果如下图。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发