一、 什么是负载均衡?什么是负载均衡?
记得第一次接触 Nginx 是在实验室 , 那时候在服务器部署网站需要用 Nginx。Nginx 是一个服务组件 , 用来反向代理、负载平衡和 HTTP 缓存等 。那么这里的 负载均衡 是什么?
负载均衡(LB , Load Balance) , 是一种技术解决方案 。用来在多个资源(一般是服务器)中分配负载 , 达到最优化资源使用 , 避免过载 。
文章插图
资源 , 相当于每个服务实例的执行操作单元 , 负载均衡就是将大量的数据处理操作分摊到多个操作单元进行执行 , 用来解决互联网分布式系统的大流量、高并发和高可用的问题 。那什么是高可用呢?
二、什么是高可用?首先了解什么是高可用?
这是 CAP 定理是分布式系统的基础 , 也是分布式系统的 3 个指标:
- Consistency(一致性)
- Availability(可用性)
- Partition tolerance(分区容错性)
衡量系统是否满足高可用 , 就是当一台或者多台服务器宕机的时候 , 系统整体和服务依然正常可用 。
举个例子 , 一些知名的网站保证 4 个 9 以上的可用性 , 也就是可用性超过 99.99% 。那 0.01% 就是所谓故障时间的百分比 。比如电商网站有赞 , 服务不可用会造成商家损失金钱和用户 。那么在提高可用性基础上同时 , 对系统宕机和服务不可用会有补偿 。
文章插图
比如下单服务 , 可以使用带有负载均衡的多个下单服务实例 , 代替单一的下单服务实例 , 即使用冗余的方式来提高可靠性 。
总而言之 , 负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一 。一般通过负载均衡 , 冗余同一个服务实例的方式 , 解决分布式系统的大流量、高并发和高可用的问题 。负载均衡核心关键:在于是否分配均匀 。
三、常见的负载均衡案例
文章插图
场景1:微服务架构中 , 网关路由到具体的服务实例 hello:
- 两个相同的服务实例 hello service , 一个端口 8000 , 另一个端口 8082
- 通过 Kong 的负载均衡 LB 功能 , 让请求均匀的分发到两个 hello 服务实例
- Kong 的负载均衡策略算法很多:默认 weighted-round-robin 算法 , 还有 consumer: consumer id 作为 hash 算法输入值等
文章插图
场景2:微服务架构中 , A 服务调用 B 服务的集群 。通过了 Ribbon 客户端负载均衡组件:
- 负载均衡策略算法并不高级 , 最简单的是随机选择和轮循
文章插图
常见的互联网分布式系统架构分为几层 , 一般如下:
- 客户端层:比如用户浏览器、App 端
- 反向代理层:技术选型 Nignx 或者 F5 等
- Web 层:前后端分离场景下 , Web 端可以用 NodeJS 、 RN 、Vue
- 业务服务层:用 JAVA 、Go , 一般互联网公司 , 技术方案选型就是 SC 或者 Spring Boot + Dubbo 服务化
- 数据存储层:DB 选型 MySQL , Cache 选型 redis , 搜索选型 ES 等
第 1 层:客户端层 -> 反向代理层 的负载均衡
客户端层 -> 反向代理层的负载均衡如何实现呢?
答案是:DNS 的轮询 。DNS 可以通过 A (Address , 返回域名指向的 IP 地址)设置多个 IP 地址 。比如这里访问 bysocket.com 的 DNS 配置了 ip1 和 ip2。为了反向代理层的高可用 , 至少会有两条 A 记录 。这样冗余的两个 ip 对应的 nginx 服务实例 , 防止单点故障 。
推荐阅读
- 浅析JavaScript异步到底是怎么实现的?
- 谁在影响续航?你真的了解笔记本电池和电源适配器吗?
- 被水淹过的车还能正常使用吗 当天下暴雨,车被水淹时该怎么办?
- 最像土狗的宠物狗 一条不敢见世面的土狗
- 金毛犬小时候 金毛小的时候
- UUID 及其在 MySQL 中的使用
- 手机90hz和120刷新率有什么区别 屏幕刷新120hz的手机有哪些
- 2020年最佳的Python代码编辑器
- 喝单枞茶的好处和坏处,凤凰单枞品鉴先容
- 金针白莲的鉴定方法,2012年金针白莲