一、循序怎么保证你的渐进讲解均衡业务可靠想一个问题 :假设你有10台服务器对外提供相同的服务 ,你如何保证这10台服务器能稳定处理外部请求?负载 这里可能有很多种解决方案,但本质上都是循序处理下述两个问题: ① 客户端的请求应该分配去哪一台服务器比较好? ② 万一其中某些服务器故障了 ,如何隔离掉故障服务器 ?渐进讲解均衡 问题① 处理不好 ,可能会导致10台服务器中的负载一部分服务器处于饥饿状态,没有被分配客户端请求或者是循序分配得很少;而另一部分则一直在处理大量的请求,导致不堪负重。渐进讲解均衡 问题② 处理不好 ,负载则CAP原则中的高防服务器循序可用性(A)可能就没法保证,除非系统不需要A。渐进讲解均衡 要解决上述问题,负载你必须实现一套控制器,循序能调度业务请求和管理业务服务器。渐进讲解均衡很不幸的负载是,大多数情况下这个控制器往往就是整个系统的瓶颈。因为控制系统如果不深入到客户端上 ,就必须依赖一个集中式的决策机构 ,这个机构必然要承载所有客户端的请求 。源码下载这时候你又得去考虑这个控制器的冗余和故障隔离的问题,这就变得无休无止。 二、业务和控制隔离那么,如何解决上述问题? 那就是专业的事情交给专业平台去做,即 ,我们需要独立的负载均衡提供上述2点的解决方案。 对于客户端来说 ,每次请求一个站点,最终都会转变成对某个IP发起请求。建站模板所以只要能控制客户端访问的IP地址 ,我们就能控制请求应该落到哪个后端服务器上,从而达到调度效果 ,这是DNS在做的事情。或者 ,劫持客户端所有请求流量,对流量重新分配请求到后端服务器上 。这个是Nginx、LVS等的处理方式。
图1、通过DNS实现负载均衡的云计算效果示意图
图2、通过LVS/Nginx实现负载均衡的效果示意图 这两个方式都能达到负载均衡的效果。但这里面有个严重的问题 ,DNS、Nginx、LVS等服务在互联网时代不可能单机就能提供业务,都是集群式(也就是有N台服务器组成) ,那这些集群的可靠性和稳定性又该如何保证呢? DNS主要负责域名解析 ,有一定的负载均衡效果,源码库但往往负载效果很差,不作为主要考虑手段 。Nginx提供7层负载均衡 ,主要靠域名来做业务区分和负载 。LVS是4层负载均衡,主要靠TCP/UDP协议、IP地址 、TCP/UDP端口来区分服务和负载。 为了解决Nginx 、LVS这些负载均衡器集群的负载均衡及可靠性,我们可以做下述简单的方案 |