架构干货:分布式系统的负载均衡_第1页
架构干货:分布式系统的负载均衡_第2页
架构干货:分布式系统的负载均衡_第3页
架构干货:分布式系统的负载均衡_第4页
架构干货:分布式系统的负载均衡_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

在网站创立初期,我们一般都使用单台机器供应集中式服务,但随着业务量越来越大,无论性能还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来供应更好的服务。

一、什么是负载均衡?

什么是负载均衡?

记得第一次接触Nginx是在试验室,那时候在服务器部署网站需要用Nginx。Nginx是一个服务组件,用来反向代理、负载平衡和HTTP缓存等。那么这里的负载均衡是什么?

负载均衡(LB,LoadBalance),是一种技术解决方案。用来在多个资源(一般是服务器)中安排负载,达到最优化资源使用,避开过载。

资源,相当于每个服务实例的执行操作单元,负载均衡就是将大量的数据处理操作分摊到多个操作单元进行执行,用来解决互联网分布式系统的大流量、高并发和高可用的问题。那什么是高可用呢?

二、什么是高可用?

首先了解什么是高可用?

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

①Consistency(全都性)

②Availability(可用性)

③Partitiontolerance(分区容错性)

那高可用(HighAvailability)是什么?高可用,简称HA,是系统一种特征或者指标,通常是指,供应肯定性能上的服务运行时间,高于平均正常时间段。反之,消退系统服务不行用的时间。

衡量系统是否满意高可用,就是当一台或者多台服务器宕机的时候,系统整体和服务依旧正常可用。

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

比如下单服务,可以使用带有负载均衡的多个下单服务实例,代替单一的下单服务实例,即使用冗余的方式来提高牢靠性。

总而言之,负载均衡(LoadBalance)是分布式系统架构设计中必需考虑的因素之一。一般通过负载均衡,冗余同一个服务实例的方式,解决分布式系统的大流量、高并发和高可用的问题。负载均衡核心关键:在于是否安排匀称。

三、常见的负载均衡案例

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

①两个相同的服务实例helloservice,一个端口8000,另一个端口8082;

②通过Kong的负载均衡LB功能,让恳求匀称的分发到两个hello服务实例;

③Kong的负载均衡策略算法许多:默认weighted-round-robin算法,还有consumer:consumerid作为hash算法输入值等;

场景2:微服务架构中,A服务调用B服务的集群。通过了Ribbon客户端负载均衡组件:

①负载均衡策略算法并不高级,最简洁的是随机选择和轮循

四、互联网分布式系统解决方案

常见的互联网分布式系统架构分为几层,一般如下:

①客户端层:比如用户扫瞄器、APP端

②反向代理层:技术选型Nignx或者F5等

③Web层:前后端分别场景下,Web端可以用NodeJS、RN、Vue

④业务服务层:用Java、Go,一般互联网公司,技术方案选型就是SC或者SpringBoot+Dubbo服务化

⑤数据存储层:DB选型MySQL,Cache选型Redis,搜寻选型ES等

一个恳求从第1层到第4层,层层访问都需要负载均衡。即每个上游调用下游多个业务方的时候,需要匀称调用。这样整体系统来看,就比较负载均衡

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

客户端层-反向代理层的负载均衡如何实现呢?

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

每次恳求bysocket.域名的时候,通过DNS轮询,返回对应的ip地址,每个ip对应的反向代理层的服务实例,也就是nginx的外网ip。这样可以做到每一个反向代理层实例得到的恳求安排是均衡的。

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

反向代理层-Web层的负载均衡如何实现呢?

是通过反向代理层的负载均衡模块处理。比如nginx有多种均衡方法:

①恳求轮询。恳求按时间挨次,逐一安排到web层服务,然后周而复始。假如web层服务down掉,自动剔除

②ip哈希。根据ip的哈希值,确定路由到对应的web层。只要是用户的ip是匀称的,那么恳求到Web层也是匀称的。

③还有个好处就是同一个ip的恳求会分发到相同的web层服务。这样每个用户固定访问一个web层服务,可以解决session的问题。

第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等

五、小结

对外看来,负载均衡是一个系统或软件的整体。对内看来,层层上下游调用。只要存在调用,就需要考虑负载均衡这个因素。所以负载均衡(LoadBalance)是分布式系统架构设计中必需考虑的因素之一。考虑主要是如何让下游接收到的恳求是匀称分布的:

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论