分布式系统的负载均衡 | 架构干货

  • 时间:
  • 浏览:3
  • 来源:大发快三_快三网站_大发快三网站

有哪些是负载均衡?

记得第一次接触 Nginx 是在实验室,那之前 在服务器部署网站前要用 Nginx 。Nginx 是有另还还有一个 服务组件,用来反向代理、负载平衡和 HTTP 缓存等。没法这里的 负载均衡 是有哪些?

负载均衡(LB,Load Balance),是五种技术外理方案。用来在多个资源(一般是服务器)中分配负载,达到最优化资源使用,外理过载。

资源,合适每个服务实例的执行操作单元,负载均衡已经 将极少量的数据外理操作分摊到多个操作单元进行执行,用来外理互联网分布式系统的大流量、高并发和高可用的大问题。那有哪些是高可用呢?

首先了解有哪些是高可用?

这是 CAP 定理是分布式系统的基础,也是分布式系统的 3 个指标:

  1. Consistency(一致性)
  2. Availability(可用性)
  3. Partition tolerance(分区容错性)

那高可用(High Availability)是有哪些?高可用,简称 HA,是系统五种底部形态可能性指标,通常是指,提供一定性能上的服务运行时间,高于平均正常时间段。反之,消除系统服务不可用的时间。

衡量系统有无满足高可用,已经 当一台可能性多台服务器宕机的之前 ,系统整体和服务依然正常可用。

举个例子,许多知名的网站保证 4 个 9 以上的可用性,也已经 可用性超过 99.99%。那 0.01% 已经 所谓故障时间的百分比。比如电商网站有赞,服务不可用会造成商家损失金钱和用户。没法在提高可用性基础上同時 ,对系统宕机和服务不可用会有补偿。

比如下单服务,还前要使用中含负载均衡的多个下单服务实例,代替单一的下单服务实例,即使用冗余的土妙招 来提高可靠性。

总而言之,负载均衡(Load Balance)是分布式系统采集中前要考虑的因素之一。一般通过负载均衡,冗余同有另还还有一个 服务实例的土妙招 ,外理分布式系统的大流量、高并发和高可用的大问题。负载均衡核心关键:在于有无分配均匀。

场景1:微服务架构中,网关路由到具体的服务实例 hello:

  • 有另还还有一个 相同的服务实例 hello service ,有另还还有一个 端口 500 ,之前 端口 5082
  • 通过 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 层到第 4 层,层层访问都前要负载均衡。即每个上游调用下游多个业务方的之前 ,前要均匀调用。之前 整体系统来看,就比较负载均衡

第 1 层:客户端层 -> 反向代理层 的负载均衡

客户端层 -> 反向代理层的负载均衡怎样实现呢?

答案是:DNS 的轮询。 DNS 还前要通过 A (Address,返回域名指向的 IP 地址)设置多个 IP 地址。比如这里访问 bysocket.com 的 DNS 配置了 ip1 和 ip2 。为了反向代理层的高可用,合适会有两条 A 记录。之前 冗余的有另还还有一个 ip 对应的 nginx 服务实例,外理单点故障。

每次请求 bysocket.com 域名的之前 ,通过 DNS 轮询,返回对应的 ip 地址,每个 ip 对应的反向代理层的服务实例,也已经 nginx 的外网ip。之前 还前要做到每有另还还有一个 反向代理层实例得到的请求分配是均衡的。

第 2 层:反向代理层 -> Web 层 的负载均衡

反向代理层 -> Web 层 的负载均衡怎样实现呢?

是通过反向代理层的负载均衡模块外理。比如 nginx 有多种均衡土妙招 :

  1. 请求轮询。请求按时间顺序,逐一分配到 web 层服务,已经 周而复始。可能性 web 层服务 down 掉,自动剔除
upstream web-server {
    server ip3;
    server ip4;
}
  1. ip 哈希。按照 ip 的哈希值,确定路由到对应的 web 层。只已经 用户的 ip 是均匀的,没法请求到 Web 层也是均匀的。

    还有个好处已经 同有另还还有一个 ip 的请求会采集到相同的 web 层服务。之前 每个用户固定访问有另还还有一个 web 层服务,还前要外理 session 的大问题。
upstream web-server {
    ip_hash;
    server ip3;
    server ip4;
}
  1. weight 权重 、 fair、url_hash 等

第 3 层:Web 层 -> 业务服务层 的负载均衡

Web 层 -> 业务服务层 的负载均衡怎样实现呢?

比如 Dubbo 是有另还还有一个 服务治理方案,包括服务注册、服务降级、访问控制、动态配置路由规则、权重调节、负载均衡。其中含另还还有一个 底部形态已经 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康情况汇报,显著减少调用延迟,提高系统吞吐量。

为了外理外理单点故障和支持服务的横向扩容,有另还还有一个 服务通常会部署多个实例,即 Dubbo 集群部署。会将多个服务实例成为有另还还有一个 服务提供方,已经 根据配置的随机负载均衡策略,在20个 Provider 中随机确定了有另还还有一个 来调用,假设随机到了第7个 Provider。LoadBalance 组件从提供者地址列表中,使用均衡策略,确定选有另还还有一个 提供者进行调用,可能性调用失败,再选另一台调用。

Dubbo内置了4种负载均衡策略:

  • RandomLoadBalance:随机负载均衡。随机的确定有另还还有一个 。是Dubbo的默认负载均衡策略。
  • RoundRobinLoadBalance:轮询负载均衡。轮询确定有另还还有一个 。
  • LeastActiveLoadBalance:合适活跃调用数,相同活跃数的随机。活跃数指调用前后计数差。使慢的 Provider 收到更少请求,可能性越慢的 Provider 的调用前后计数差会越大。
  • ConsistentHashLoadBalance:一致性哈希负载均衡。相同参数的请求一直落在同一台机器上。

同样,可能性业务的前要,也还前要实现我本人的负载均衡策略

第 4 层:业务服务层 -> 数据存储层 的负载均衡

数据存储层的负载均衡,一般通过 DBProxy 实现。比如 MySQL 分库分表。

当单库可能性单表访问不要 ,数据量不要 的情况汇报下,前要进行垂直拆分和水平拆分有另还还有一个 维度。比如水平切分规则:

  • Range 、 时间
  • hash 取模,订单根据店铺ID 等

但伴随着这块的负载会一直跳出下面的大问题,前要外理:

  • 分布式事务
  • 跨库 join 等

现状分库分表的产品方案什么都有:当当 sharding-jdbc、阿里的 Cobar 等

对外看来,负载均衡是有另还还有一个 系统或软件的整体。对内看来,层层上下游调用。已经 我指在调用,就前要考虑负载均衡这一因素。什么都有负载均衡(Load Balance)是分布式系统采集中前要考虑的因素之一。考虑主已经 怎样让下游接收到的请求是均匀分布的:

  • 第 1 层:客户端层 -> 反向代理层 的负载均衡。通过 DNS 轮询
  • 第 2 层:反向代理层 -> Web 层 的负载均衡。通过 Nginx 的负载均衡模块
  • 第 3 层:Web 层 -> 业务服务层 的负载均衡。通过服务治理框架的负载均衡模块
  • 第 4 层:业务服务层 -> 数据存储层 的负载均衡。通过数据的水平分布,数据均匀了,理论上请求也会均匀。比如通过买家ID分片之类

原创不易,争取多画图,图解胜千言(泥瓦匠@bysocket.com)

参考资料:

  • 《关于负载均衡的一切》https://mp.weixin.qq.com/s/xvozZjmn-CvmQMAEAyDc3w
  • 《Dubbo 的负载均衡》http://dubbo.apache.org/zh-cn/blog/dubbo-loadbalance.html
  • https://zh.wikipedia.org/wiki/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1