大家好,今天给各位分享互联网巨头的高可用设计:揭秘负载均衡方案的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
一、 什么是负载均衡?什么是负载均衡?记得第一次接触Nginx是在实验室。当时需要在服务器上部署网站需要Nginx。 Nginx是一个服务组件,用于反向代理、负载均衡、HTTP缓存等。那么这里的负载均衡是什么呢?
[[314334]]
负载均衡(LB,Load Balance)是一种技术解决方案。用于在多个资源(通常是服务器)之间分配负载,以优化资源使用并避免过载。
资源相当于每个服务实例的执行操作单元。负载均衡就是将大量的数据处理操作分配给多个操作单元执行,以解决互联网分布式系统的大流量、高并发和高可用性。问题。那么什么是高可用呢?
二、什么是高可用?首先了解什么是高可用?这就是CAP定理,它是分布式系统的基础,也是分布式系统的三个指标:
一致性(consistency) 可用性(availability) 分区容错性(partition failure opportunity) 什么是高可用性(High Availability)?高可用性,简称HA,是系统的一个特性或指标,通常是指提供一定性能运行时间的服务,高于正常时期的平均水平。反之,消除系统服务不可用的时间。
衡量一个系统是否满足高可用性,是指当一台或多台服务器宕机时,整个系统和服务仍然可用。
例如,一些知名网站保证可用性在4个9以上,即可用性超过99.99%。这0.01% 就是所谓的停机百分比。例如,一个电商网站如果有点赞,服务不可用就会导致商家损失金钱和用户。那么在提高可用性的基础上,还会有系统宕机、服务不可用的补偿。
例如,对于排序服务,可以使用多个负载均衡的排序服务实例来代替单个排序服务实例,即利用冗余来提高可靠性。
总而言之,负载均衡是分布式系统架构设计必须考虑的因素之一。通常,分布式系统的大流量、高并发和高可用性问题是通过负载均衡和同一服务实例的冗余来解决的。负载均衡的关键是分布是否均匀。
三、常见的负载均衡案例场景一:微服务架构中,网关路由到具体的服务实例hello:
两个相同的服务实例hello服务,一个端口8000,另一个端口8082,利用Kong的负载均衡LB功能将请求均匀分发到两个hello服务实例上。 Kong有多种负载均衡策略算法:默认的weighted-round-robin算法,以及consumer:消费者id作为哈希算法输入值等
场景二:微服务架构中,服务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层服务出现故障,它将被自动删除。
上游网络服务器{服务器ip3;服务器ip4;}
ip 哈希值。根据IP的哈希值,确定到对应Web层的路由。只要用户的IP是统一的,那么对Web层的请求也会是统一的。
2.还有个好处就是同一个 ip 的请求会分发到相同的 web 层服务。这样每个用户固定访问一个Web层服务,就可以解决会话问题。
上游网络服务器{ip_hash;服务器ip3;服务器ip4;}
权重权重、公平、url_hash 等
第 3 层:Web 层 -业务服务层 的负载均衡Web层-业务服务层如何实现负载均衡?
例如,Dubbo是一个服务治理解决方案,包括服务注册、服务降级、访问控制、动态配置路由规则、权重调整、负载均衡等。特点之一是智能负载均衡:内置多种负载均衡策略,智能感知下游节点的健康状态,显着降低呼叫延迟,提高系统吞吐量。
为了避免单点故障并支持服务的水平扩展,一个服务通常会部署多个实例,即Dubbo集群部署。多个服务实例会变成一个服务提供者,然后根据配置的随机负载均衡策略,随机选择20个提供者之一进行调用。假设第七个提供者是随机到达的。 LoadBalance 组件使用平衡策略从提供者地址列表中选择要调用的提供者。如果呼叫失败,它会选择另一个提供商进行呼叫。
Dubbo内置了4种负载均衡策略:
RandomLoadBalance: 随机负载平衡。随机选择一个。这是Dubbo默认的负载均衡策略。 RoundRobinLoadBalance: 轮询负载平衡。轮询选择一个。 LeastActiveLoadBalance: 最小活跃调用数,相同活跃调用数是随机的。活跃计数是指调用之前和之后计数的差值。让慢的Provider收到更少的请求,因为慢的Provider调用前后的count会相差比较大。 ConcientHashLoadBalance: 一致的哈希负载平衡。具有相同参数的请求总是落在同一台机器上。同样,由于业务需要,你也可以实现自己的负载均衡策略
第四层:业务服务层-数据存储层负载均衡
数据存储层的负载均衡一般是通过DBProxy来实现的。例如MySQL分库、分表。
当单个数据库或表的访问量太大、数据量太大时,需要垂直拆分和水平拆分。例如水平分割规则:
范围、时间哈希模、基于商店ID的订单等。但是这样的负载,会出现以下问题,需要解决:
目前分布式事务跨库Join等分库分表的产品解决方案有很多:当当sharding-jdbc、阿里巴巴的Cobar等。
五、小结从外部看,负载均衡是一个系统或软件的整体。在内部,有多层的上游和下游调用。只要有调用,就需要考虑负载均衡。因此,负载均衡是分布式系统架构设计必须考虑的因素之一。主要考虑如何让下游收到的请求均匀分布:
第一层:客户端层-反向代理层负载均衡。通过DNS 轮询进行负载平衡第2 层:反向代理层- Web 层。通过Nginx的负载均衡模块第3层:Web层-业务服务层负载均衡。通过服务治理框架的负载均衡模块第4层:业务服务层-数据存储层的负载均衡。通过数据的水平分布,数据是均匀的,理论上请求也会是均匀的。例如按买家ID分片类似
关于互联网巨头的高可用设计:揭秘负载均衡方案和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7489.html
用户评论
一直觉得大厂技术的水平很高,真的想知道他们是怎么保证系统的稳定性和可访问性的!
有13位网友表示赞同!
最近在学习技术架构方面的知识,这个话题很有吸引力啊!
有8位网友表示赞同!
看标题就感觉很专业了,希望能通俗易懂地介绍一下。
有14位网友表示赞同!
做web开发的都知道负载均衡的重要性。大厂怎么做还是很好奇的。
有20位网友表示赞同!
希望这篇能够深入讲解一些具体的案例和技术细节。
有9位网友表示赞同!
想了解一下大厂是如何设计高可用的系统架构的?
有8位网友表示赞同!
学习这类先进的技术经验,对我的工作也有很大帮助。
有5位网友表示赞同!
感觉这篇文章应该会让我对互联网技术有一个更全面的理解。
有6位网友表示赞同!
最近在研究网络安全,负载均衡也是其中很重要的一部分吧?
有7位网友表示赞同!
希望能够从文章中了解到一些实践经验,可以借鉴参考。
有17位网友表示赞同!
做软件开发的肯定对这些基础知识很感兴趣!
有19位网友表示赞同!
看标题感觉很有深度,期待深入解读!
有8位网友表示赞同!
这个话题还挺热门的啊, 想看看大厂是怎么看待这个问题的。
有16位网友表示赞同!
对大厂的技术手段一直敬佩 banget,希望能看到更有案例分析的介绍。
有17位网友表示赞同!
学习一下大厂经验,可以提升自己的技术水平!
有17位网友表示赞同!
希望文章能够结合一些图片或图表,更直观地展示这些技术的运用。
有19位网友表示赞同!
负载均衡和高可用是两个很关键的概念,看这篇文来加深我的理解!
有8位网友表示赞同!
学习技术是一件很有乐趣的事情,期待看到精彩的内容!
有9位网友表示赞同!
希望文章能够讲解清楚一些比较难懂的技术术语。
有7位网友表示赞同!
对技术一直保持着好奇心,希望能从文章中找到答案。
有8位网友表示赞同!