Feb 06, 2019 PHP

负载均衡、集群与分布式

        在“高并发,海量数据,分布式,NoSql,云计算…….概念满天飞的年代,相信不少朋友都听说过甚至常与人提起“集群,负载均衡”等,但不是所有人都有机会真正接触到这些技术,也不是所有人都真正理解了这些“听起来很牛的"技术名词。下面简单解释一下。一、负载均衡网络的负载均衡是一种动态均衡技术,常见的实现方式是通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。日常生活中到处都能看到“负载均衡”,一个超市的收营员高峰期只能服务10位顾客,当做活动时有20位顾客需要服务的话可能就会排长队,这样购物体验将会很差(就像客户抱怨系统/网站访问太慢)。最简单的办法就是再招个营业员,重新开通一个出口。负载均衡的核心就是“分摊压力”。二、集群(Cluster)        所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可通过网络共享内存进行消息传送,实现分布式计算机。通俗一点来说,就是让若干台计算机联合起来工作,可以是并行的,也可以是做备份。2.1、大规模集群的特点2.1.1、高可靠性(HA)        利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。2.1.2、高性能计算(HP)        即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。2.1.3、负载平衡(LB)        即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。当然,以上这些特点,在某些适应场合下是需要同时具备的。2.2、常用集群类型2.2.1、High availability cluster(高可用集群)        两兄弟开早餐铺,生意不大,但是每天早上7点到9点之间客户很多并且不能中断。为了保证2个小时内这个早餐铺能够保证持续提供服务,两兄弟商量几个方法:        方法一:平时老大做生意,老二这个时间段在家等候,一旦老大无法做生意了,老二就出来顶上,这个叫做Active/Standby.(双机热备)        方法二:平时老大做生意,老二这个时候就在旁边帮工,一旦老大无法做生意,老二就马上顶上,这个叫做Active/Passive.(双机双工)        方法三:平时老大卖包子,老二也在旁边卖豆浆,老大有问题,老二就又卖包子,又卖豆浆,老二不行了,老大就又卖包子,又卖豆浆,这个叫做Active/Active(dual Active)(双机互备)        (包子=application package,互相照应叫做heartbeat,顶替对方工作叫做failover/takeover.如果两个兄弟突然都瞎了聋了,不知道现在对方到底是否正在干活,都认为自己要顶对方的工作,这个叫做brain-split,然后需要第三者,比如他们的老爹来解决问题,这个叫做tier-breaker,或者让他们两个的媳妇过来拉走其中一个,这个叫做fency)2.2.2、high computing clustering(高性能计算集群)        10个兄弟一起做手工家具生意,一个客户来找他们的老爹要求做一套非常复杂的仿古家具,一个人做也可以做,不过要做很久很久,为了1个星期就交出这一套家具,10个兄弟决定一起做。        老爹把这套家具的不同部分分开交给儿子们作,然后每个儿子都在做木制家具的加工,最后拼在一起叫货。        老爹是scheduler任务调度器,儿子们是compute node.他们做的工作叫做作业。2.2.3、load balance cluster(负载均衡集群)        一共有四兄弟开裁缝铺,生意特别多,一个人做不下来,老是延误工期,于是四个兄弟商量:老大接订单,三个兄弟来干活。客户多起来之后,老大根据一定的原则(policy)根据三兄弟手上的工作量来分派新任务。三、分布式        集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。         举例:就比如新浪网,访问的人多了,他可以做一个集群,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将该业务分配给哪一台去完成。        而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。四、总结        在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。集群指的是将几台服务器集中在一起,实现同一业务。分布式是指将不同的业务分布在不同的地方。        严格来讲,这些已经超过了一般开发人员的知识范畴了,想真正理解和掌握这些并不太容易,有时候需要真正的实践而不是闭门造车。从运维人员和系统架构师的角度来看,不仅需要具备丰富的操作系统配置和管理的经验,更要具备网络协议、存储等相关的知识(懂算法和底层的就更完美了)。从开发人员和软件架构师的角度来看,需要考虑的重点又不同了。当然,远远不止我所提到的这些。现在的Web应用一般都比较依赖于基础架构,而越来越脱离了”纯软件架构“的本质。集群不是万能的,但有时候确实相当有用。