我们都对高可用有一个基本的认识,其中负载均衡是高可用的核心工作。本文将通过如下几个方面,让你妥妥的吃透“”负载均衡”。
负载均衡是什么 正如上图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是负载均衡,它的本质和分布式系统一样,是分治。 假如大家习惯了开车的时候用一些导航软件,我们会发现,导航软件的推荐路线方案会有一个数量的上限,比如 3 条、5 条。 因此,其实本质上它也起到了一个类似负载均衡的作用,因为假如只能取 Top3 的通畅路线,自然拥堵严重的路线就无法推荐给你了,使得车流的压力被分摊到了相对空闲的路线上。 在软件系统中也是一样的道理,为了避免流量分摊不均,造成局部节点负载过大(如 CPU 吃紧等),所以引入一个独立的统一入口来做类似上面的“导航”的工作。 但是,软件系统中的负载均衡与导航的不同在于:导航是一个柔性策略,最终还是需要使用者做选择,而前者则不同。 怎么均衡的背后是策略在起作用,而策略的背后是由某些算法或者说逻辑来组成的。 比如,导航中的算法属于路径规划范畴,在这个范畴内又细分为静态路径规划和动态路径规划,并且,在不同的分支下还有各种具体计算的算法实现,如 Dijikstra、A* 等。 同样的,在软件系统中的负载均衡,也有很多算法或者说逻辑在支撑着这些策略,巧的是也有静态和动态之分。 常用负载均衡策略图解 下面来罗列一下日常工作中最常见的 5 种策略。 轮询 这是最常用也最简单策略,平均分配,人人都有、一人一次。大致的代码如下:
加权轮询 在轮询的基础上,增加了一个权重的概念。权重是一个泛化后的概念,可以用任意方式来体现,本质上是一个能者多劳思想。 比如,可以根据宿主的性能差异配置不同的权重。大致的代码如下:
|
Powered by Discuz! X3.4
© 2001-2023 Discuz! Team.