您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    一文秒懂散布式架构下的“负载平衡”(2)
    时间:2018-06-10 08:04 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    一文秒懂散布式架构下的“负载平衡”

    一个 master 进程,生成一个或许多个 worker 进程。但这里 master 是运用 root 身份启动的,由于 Nginx 要任务在 80 端口。

    而只要管理员才有权限启动小于低于 1023 的端口。master 主要担任的作用只是启动 worker,加载配置文件,担任系统的平滑晋级。其他的任务是交给 worker。

    那当 worker 被启动之后,也只是担任一些 Web 最复杂的任务,而其他的任务都是由 worker 中调用的模块来完成的。

    模块之间是以流水线的方式完成功用的。流水线,指的是一个用户央求,由多个模块组合各自的功用依次完成完成的。

    比如:第一个模块只担任剖析央求首部,第二个模块只担任查找数据,第三个模块只担任紧缩数据,依次完成各自任务来完成整个任务的完成。

    它们是如何完成热部署的呢?我们前面说 master 不担任详细的任务,而是调用 worker 任务,它只是担任读取配置文件。

    因此当一个模块修正或许配置文件发作变化,是由 master 停止读取,此时不会影响到 worker 任务。

    在 master 停止读取配置文件之后,不会立刻把修正的配置文件告知 worker。

    而是让被修正的 worker 继续运用老的配置文件任务,当 worker 任务终了之后,直接宕掉这个子进程,改换新的子进程,运用新的规则。

    HAProxy

    HAProxy 也是运用较多的一款负载平衡软件。HAProxy 提供高可用性、负载平衡以及基于 TCP 和 HTTP 运用的代理,支持虚拟主机,是收费、快速并且牢靠的一种处置方案。

    它特别适用于那些负载特大的 Web 站点。运转形式使得它可以很复杂安全的整合到以后的架构中,同时可以保护你的 Web 效劳器不被暴露到网络上。

    HAProxy 是一个运用 C 言语编写的自在及开放源代码软件,它提供高可用性、负载平衡,以及基于 TCP 和 HTTP 的运用顺序代理。HAProxy 主要用来做七层负载平衡。

    常见负载平衡算法

    下面引见负载平衡技术的时分提到过,负载平衡效劳器在决议将央求转发到详细哪台真实效劳器时,是经过负载平衡算法来完成的。

    负载平衡算法可以分为两类:

    静态负载平衡算法,包括轮询、比率、优先权。

    静态负载平衡算法,包括最少衔接数、最快照应速度、察看办法、预测法、静态功用分配、静态效劳器补充、效劳质量、效劳类型、规则形式。

    轮询(Round Robin):顺序循环将央求一次顺序循环地衔接每个效劳器。当其中某个效劳器发作第二到第七层的缺点,BIG-IP 就把它从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

    以轮询的方式依次央求调度不同的效劳器;完成时,普通为效劳器带上权重,这样有两个益处:

    1、针对效劳器的功用差异可分配不同的负载。

    2、当需求将某个结点剔除时,只需求将其权重设置为 0 即可。

    优点:完成复杂、高效;易水平扩展。

    缺陷:央求到目的结点的不确定,形成其无法适用于有写的场景(缓存,数据库写)。

    运用场景:数据库或运用效劳层中只要读的场景。

    随机方式:央求随机散布到各个结点;在数据足够大的场景能到达一个平衡散布。

    优点:完成复杂、易水平扩展。

    缺陷:同 Round Robin,无法用于有写的场景。

    运用场景:数据库负载平衡,也是只要读的场景。

    哈希方式:依据 key 来计算需求落在的结点上,可以保证一个同一个键一定落在相反的效劳器上。

    优点:相反 key 一定落在同一个结点上,这样就可用于有写有读的缓存场景。

    缺陷:在某个结点缺点后,会招致哈希键重新散布,形成命中率大幅度下降。

    处置:分歧性哈希 or 运用 keepalived 保证任何一个结点的高可用性,缺点后会有其他结点顶下去。

    运用场景:缓存,有读有写。

    分歧性哈希:在效劳器一个结点出现缺点时,受影响的只要这个结点上的 key,最大水平的保证命中率。

    例如 twemproxy 中的 ketama 方案;消费完成中还可以规划指定子 key 哈希,从而保证部分相似特征的键能散布在同一个效劳器上。

    优点:结点缺点后命中率下降有限。

    运用场景:缓存。

    依据键的范围来负载:依据键的范围来负载,前 1 亿个键都寄存到第一个效劳器,1~2 亿在第二个结点。

    优点:水平扩展容易,存储不够用时,加效劳器寄存后续新增数据。

    缺陷:负载不均;数据库的散布不平衡。(数据有冷热区分,普通最近注册的用户愈加生动,这样形成后续的效劳器十分忙碌,而前期的结点闲暇很多)

    适用场景:数据库分片负载平衡。

    依据键对效劳器结点数取模来负载:依据键对效劳器结点数取模来负载;比如有 4 台效劳器,key 取模为 0 的落在第一个结点,1 落在第二个结点上。

    优点:数据冷热散布平衡,数据库结点负载平衡散布。

    缺陷:水平扩展较难。

    适用场景:数据库分片负载平衡。

    纯静态结点负载平衡:依据 CPU、IO、网络的处置才能来决策接上去的央求如何调度。

    优点:充沛应用效劳器的资源,保证多个结点上负载处置平衡。

    缺陷:完成起来复杂,真实运用较少。

    不用自动负载平衡:运用音讯队列转为异步模型,将负载平衡的成绩消灭;负载平衡是一种推模型,不断向你发数据。

    那么将一切的用户央求发到音讯队列中,一切的下游结点谁闲暇,谁下去取数据处置;转为拉模型之后,消弭了对下行结点负载的成绩。

    优点:经过音讯队列的缓冲,保护后端系统,央求剧增时不会冲垮后端效劳器;水平扩展容易,参加新结点后,直接取 queue 即可。

    缺陷:不具有实时性。

    运用场景:不需务实时前往的场景。比如,12036 下订单后,立刻前往提示信息:您的订单出来排队了...等处置终了后,再异步通知。

    比率(Ratio):给每个效劳器分配一个加权值为比例,根椐这个比例,把用户的央求分配到每个效劳器。

    当其中某个效劳器发作第 2 到第 7 层的缺点,BIG-IP 就把其从效劳器队列中拿出,不参加下一次的用户央求的分配,直到其恢复正常。

    优先权(Priority):给一切效劳器分组,给每个组定义优先权,BIG-IP 用户的央求,分配给优先级最高的效劳器组(在同一组内,采用轮询或比率算法,分配用户的央求)。

    当最高优先级中一切效劳器出现缺点,BIG-IP 才将央求送给次优先级的效劳器组。这种方式,实践为用户提供一种热备份的方式。

    最少的衔接方式(Least Connection):传递新的衔接给那些停止最少衔接处置的效劳器。

    当其中某个效劳器发作第二到第七层的缺点,BIG-IP 就把它从效劳器队列中拿出,不参加下一次的用户央求的分配,直到其恢复正常。

    最快形式(Fastest):传递衔接给那些照应最快的效劳器。当其中某个效劳器发作第二到第七层的缺点,BIG-IP 就把它从效劳器队列中拿出,不参加下一次的用户央求的分配,直到其恢复正常。

    察看形式(Observed):衔接数目和照应时间以这两项的最佳平衡为依据为新的央求选择效劳器。

    当其中某个效劳器发作第二到第七层的缺点,BIG-IP 就把它从效劳器队列中拿出,不参加下一次的用户央求的分配,直到其恢复正常。

    预测形式(Predictive):BIG-IP 应用搜集到的效劳器以后的功用目的,停止预测剖析,选择一台效劳器在下一个时间片内,其功用将到达最佳的效劳器相运用户的央求(被 BIG-IP 停止检测)。

    静态功用分配(Dynamic Ratio-APM):依据 BIG-IP 搜集到的运用顺序和运用效劳器的各项功用参数,静态调整流量分配。

    静态效劳器补充(Dynamic Server Act):当主效劳器群中因缺点招致数量增加时,静态地将备份效劳器补充至主效劳器群。

    效劳质量(QoS):按不同的优先级对数据流停止分配。

    效劳类型(ToS):按不同的效劳类型(在 Type of Field 中标识)负载平衡对数据流停止分配。

    规则形式:针对不同的数据流设置导向规则,用户可自行调整。

    负载平衡的几种算法 Java 实现代码

    1、轮询

    (责任编辑:admin)