目录
1、简介
1.1、功能:
1.2、LB(Load Balance)负载均衡:
1.3、集中式与进程式
2、Ribbon负载均衡演示
2.1、架构说明
2.1.1、Ribbon工作步骤
2.1.2、Ribbon架构
2.2、POM文件导入依赖
2.2.1、netflix-eureka-clientserver 自动引入 Ribbon 依赖
2.2.2、手动导入ribbon依赖
2.3、RestTemplate
2.3.1、GET请求方法
2.3.2、POST请求方法
2.4、Ribbon核心组件IRule
2.4.1、IRule默认自带的负载均衡规则
2.4.2、配置IRule负载均衡规则
1、简介
负载均衡+RestTemplate调用
1.1、功能:
Ribbon主要功能是提供客户端的软件负载均衡算法和服务调用。
即,在配置文件中列出Load Balancer 的所有机器,Ribbon会自动的基于某种规则(如简单轮询,随机连接等)去连接这些机器
1.2、LB(Load Balance)负载均衡:
将用户的请求平摊分配至多个服务上,从而达到系统的HA(高可用)。
1.3、集中式与进程式
集中式:在服务消费方和提供方间使用独立的LB设施(如Nginx),负责把访问请求转发至提供方
进程式:将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后从中选择
Nginx:服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求。即负载均衡是由服务端实现 (集中式LB)
Ribbon:本地负载均衡,在调用微服务接口时,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。(进程内LB)
2、Ribbon负载均衡演示
2.1、架构说明
2.1.1、Ribbon工作步骤
2.1.1、Ribbon工作步骤
1)先选择 Eureka Server,其优先选择在同一个区域内负载较少的server。
2)在根据用户指定的策略,从server取到的服务注册列表中选择一个地址。
Ribbon提供了多种策略,如轮询、随机和根据响应时间加权
2.1.2、Ribbon架构
2.2、POM文件导入依赖
2.2.1、netflix-eureka-clientserver 自动引入 Ribbon 依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
client:
server:
2.2.2、手动导入ribbon依赖
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
2.3、RestTemplate
2.3.1、GET请求方法
2.3.1、GET请求方法
1)getForObject:返回对象为响应体中数据转化成的对象,可以理解为Json
2)getForEntity:返回对象为ResponseEntity对象,包含了响应中的一些重要信息,如响应头、状态码、响应体等
2.3.2、POST请求方法
@GetMapping("/consumer/payment/create")
public CommonResult create(Payment payment) {
// return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
return restTemplate.postForEntity(PAYMENT_URL + "/payment/create", payment, CommonResult.class).getBody();
}
2.4、Ribbon核心组件IRule
2.4.1、IRule默认自带的负载均衡规则
2.4.1、IRule默认自带的负载均衡规则
1)轮询:com.netflix.loadbalancer.RoundRobinRule
2)随机:com.netflix.loadbalancer.RandomRule
3)先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试:com.netflix.loadbalancer.RetryRule
4)响应速度越快的实例选择权重越大,越容易被选择:WeightedResponseTimeRule
5)会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务:BestAvailableRule
6)先过滤掉故障实例,再选择并发较小的实例:AvailabilityFilteringRule
7)默认规则,复合判断server所在区域的性能和server的可用性选择服务器:ZoneAvoidanceRule
2.4.2、配置IRule负载均衡规则
注意项:
自定义配置类,不能放在 @ComponentScan 所扫描的当前包下以及子包下,否则自定义的配置类会被所有的 Ribbon 客户端所共享,达不到特殊化定制的目的
1)新建package (将配置类放在不扫描的包下)
2)新建包下,创建 MySelfRule 规则类
@Configuration
public class MySelfRule {
@Bean
public IRule myRule() {
return new RandomRule(); //定义为随机方法
}
}
3)主启动类添加@RibbonClient
@EnableEurekaClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@RibbonClient(name = "cloud-order-service", configuration = MySelfRule.class)
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}



