多机部署/负载均衡-LoadBalance

1. 负载均衡介绍

1.1 问题描述

java 复制代码
// 根据应用名称获取服务列表
List<ServiceInstance> instances=discoveryClient.getInstances("product-service");
// 服务可以有多个,获取第一个
EurekaServiceInstance instance=(EurekaServiceInstance) instances.get(0);
  1. 根据应用名称获取服务实例列表

  2. 从列表中选取一个服务实例

思考:如果一个服务对于多个实例,流量是否可以合理的分配到多个实例

访问时,通过日志可看出多次访问的都是同一台机器

解决方案:

@PostConstruct 是 Java 自带的注解,在 Spring 框架中,它的核心作用可以用一句话概括:在依赖注入完成之后、Bean 正式投入使用之前,执行一次初始化逻辑

请求被均衡分配到不同的实例上,这就是负载均衡

1.2 负载均衡的一些实现

负载均衡地高并发、高可用系统不可缺少的关键组件

当服务流量增大时,通常会采用机器的方式进行扩容,负载均衡就是用来在多个机器或者其他资源中,按照一定的规则合理分配负载

在真实的业务中,不一定轮询,可能会根据机器的配置进行负载均衡

服务端负载均衡

在服务端进行负载均衡算法分配

比较有名的服务端负载均衡器是Nginx,请求先到达Nginx负载均衡器,然后通过负载均衡算法,在多个服务器之间选择一个进行访问

客户端负载均衡

在客户端进行负载均衡的算法分配

把负载均衡的功能以库的方式集群到客户端,而不再是由一台指定的负载均衡设备提供

比如Spring Cloud 的Ribbon,请求发送到客户端,客户端从注册中心获取服务列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问

Ribbon是SpringCloud早期的默认实现,由于不维护了,所以新版本采用的是Spring Cloud LoadBalance

2. Spring Cloud LoadBalance

2.1 入门使用

添加注解

2.2 负载均衡策略

Spring Cloud LoadBalance 仅支持两种负载均衡策略:轮询策略和随机策略

默认是轮询策略

随机访问实现

2.3 LoadBalance原理

LoadBalance 的实现主要是 LoadBalanceInterceptor 这个类会对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id

3. 服务部署

相关推荐
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站1 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏1 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅1 天前
linux(8) 软硬链接
linux·运维·服务器
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
布裘1 天前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境
懂软件的胡子个哥1 天前
微信机器人为什么需要“回复候选”而不是所有 AI 内容直接发送
运维·微信·自动化·wechatapi·个人微信号二次开发
云贝贝贝1 天前
腾讯云 TDSQL(MySQL 版)性能优化与慢查询排障实战 6 招
运维·腾讯云
Lsetea1 天前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链