开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:负载均衡介绍】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11864
负载均衡介绍
内容介绍:
一、负载均衡实例介绍
二、负载均衡的种类
一、负载均衡实例介绍
1、实例冲突
nacos 实战,上节我们已经完成了从订单微服务通过
nacos-server 获取到商品微服务的实例,然后去调用的操作。
但是到目前为止,代码是有问题的,问题就发生在List<ServiceInstance>instance=discoveryClient.getInstance(serviceld: ”service-product”);
ServiceInstance instance=instance.get(0);
2、图文分析
现在我们通过 nacos 提供的 discoveryClient 的工具,通过一个服务名,可以获取到指定服务名的所有实例,然后我们直接获取到了实例列表里的第一个进行调用,如果此实例列表里只有一个实例,那么这么做是没有问题的,但如果这个实例列表里有多个实例,那么就会产生问题,执行时就会始终调用第一个实例。我们通过一张图来具体阐述:
首先,上方的即为 nacos-server ,左下角的是订单微服务,也就是服务消费者,右下角的稍微有些变化,商品微服务由一个变为两个。
例如第一个接口在8081端口上,另外一个商品微服务的代码和他是一样的,也就是说我们对于商品微服务做了一个集群,他在8082端口上,两个商品微服务会同时注册到 nacos-server 上,然后订单微服务通过 nacos-server 去获取商品微服务的时候,列表里的服务内容就不再是只有一个了,他会拿到一个服务列表,里面会有两个实例,一个8081,一个8082,此时你使用第一个,那就意味着第二个毫无作用,此时就产生问题了。
要想使两个商品微服务都能使用到,这就体现了负载均衡的思想。
二、负载均衡的种类
1、简单概括
何为负载均衡
通俗的讲,负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。
例如:一个调用请求,订单微服务会频繁的调用商品微服务,此时就可以看作是一份负载,然后他会均衡地分摊到8081和8082上,第一次调用8081,第二次调用8082,第三次又是8081,第四次又是8082,这就是一种负载均衡的思想。
2、具体分类
根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端端负载均衡。
服务端负载均衡指的是发生在服务提供者一方,比如常见的 nginx 负载均衡。具体是指一个请求到达服务端,再来决定使用哪个服务。
而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求。具体是指消费者在请求发出去之前就已经决定好了要调用哪个微服务。
我们在微服务调用关系中一般会选择客户端负载均衡,也就是在服务调用的一方来决定由哪个提供者执行。
例如:第一次我们在 instances.get(0) 决定了使用第一个,但我们也可以使用第二个微服务 instances.get(1) 这就是客户端负载均衡。