集和负载均衡的理解(⼤⽩话)
在“⾼并发,海量数据,分布式,NoSql,云计算......”概念满天飞的年代,相信不少朋友都听说过甚⾄常与⼈提起“集,负载均
衡”等,
但不是所有⼈都有机会真正接触到这些技术,也不是所有⼈都真正理解了这些“听起来很⽜的”技术名词。下⾯简单解释⼀下吧。
要了解这些概念⾸先要了解⼀下项⽬架构的演进,我这⾥应⽤⼀张Dubbo的⽂档图⽚如图
⼀:项⽬架构的演进
ORM与MVC:
早期的架构都集中在⼀台服务器上,这样对于⼩型的业务访问量是完全可以的,但是随着业务的增多,我们引进的MVC的架构,这种架构是将整个业务分成不同的层(表现层,业务层,数据访问层)维护也更加⽅⾯了,开发更加⽅便。
PRC架构:
但是业务如果继续增⼤,项⽬会出现臃肿,⼀台服务器已经完全没办法⽀持了,所以出现了RPC分布式的架构,RPC架构就是将服务进⾏合理拆分,分别放⼊多台服务器执⾏,服务器与服务器之间通过远程调⽤的⽅式进⾏通信。
服务提供者:运⾏在服务器端,提供服务接⼝与服务实现类
服务中⼼:运⾏在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供服务给消费者使⽤。
服务消费者:运⾏在客户端,通过远程代理对象调⽤远程服务加:698581634 即可免费领取Java架构师学习资料⼀份
SOA架构:
但是业务继续增加,对RPC架构来说,各个服务与服务之间的通信越来越多,依赖越来越多,越来越混乱,给开发带来了困难,于是SOA 架构应运⽽⽣,SOA架构将服务与服务集中起来进⾏管理,加上⼀个服务治理中⼼。谁发布了服务来中⼼进⾏注册,谁需要依赖什么服务来中⼼进⾏请求。
⽽最近很⽕的微服务,则是将业务拆分更加精细,每⼀个可以成为⼀个完整的服务。演变肯定会演变,但是过程得多久谁也不好说。
⼆:名词解释
接下来进⼊正题,解释让外⾏看起来⾼⼤上的名词
1:集
集(Cluster)
所谓集是指⼀组独⽴的计算机系统构成的⼀个松耦合的多处理器系统,它们之间通过⽹络实现进程间的通信。应⽤程序可以通过⽹络共享内存进⾏消息传送,实现分布式计算机。通俗⼀点来说,就是让若⼲台计算机联合起来⼯作(服务),可以是并⾏的,也可以是做备份。
⼤规模集,通常具备以下⼀些特点:
(1)⾼可靠性(HA)
利⽤集管理软件,当主服务器故障时,备份服务器能够⾃动接管主服务器的⼯作,并及时切换过去,以实现对⽤户的不间断服务。
(2)⾼性能计算(HP)
即充分利⽤集中的每⼀台计算机的资源,实现复杂运算的并⾏处理,通常⽤于科学计算领域,⽐如基因分析、化学分析等。
(3)负载平衡(LB)
即把负载压⼒根据某种算法合理分配到集中的每⼀台计算机上,以减轻主服务器的压⼒,降低对主服务器的硬件和软件要求。
常⽤的集⼜分以下⼏种:
load balance cluster(负载均衡集)
⼀共有四兄弟开裁缝铺,⽣意特别多,⼀个⼈做不下来,⽼是延误⼯期,于是四个兄弟商量:⽼⼤接订单, 三个兄弟来⼲活。 客户多起来之后,⽼⼤根据⼀定的原则(policy) 根据三兄弟⼿上的⼯作量来分派新任务。
High availability cluster(⾼可⽤集)
两兄弟开早餐铺,⽣意不⼤,但是每天早上7点到9点之间客户很多并且不能中断。为了保证2个⼩时内这个早餐铺能够保证持续提供服务,两兄弟商量⼏个⽅法:
⽅法⼀:平时⽼⼤做⽣意,⽼⼆这个时间段在家等候,⼀旦⽼⼤⽆法做⽣意了,⽼⼆就出来顶上,这个叫做Active/Standby.(双机热备)
⽅法⼆:平时⽼⼤做⽣意,⽼⼆这个时候就在旁边帮⼯,⼀旦⽼⼤⽆法做⽣意,⽼⼆就马上顶上,这个叫做Active/Passive.(双机双⼯)
⽅法三:平时⽼⼤卖包⼦,⽼⼆也在旁边卖⾖浆,⽼⼤有问题,⽼⼆就⼜卖包⼦,⼜卖⾖浆,⽼⼆不⾏了,⽼⼤就⼜卖包⼦,⼜卖⾖浆.这个叫做Active/Active (dual Active)(双机互备)
high computing clustering(⾼性能计算集)
10个兄弟⼀起做⼿⼯家具⽣意,⼀个客户来他们的⽼爹要求做⼀套⾮常复杂的仿古家具,⼀个⼈做也可以做,不过要做很久很久,为了1个星期就交出这⼀套家具,10个兄弟决定⼀起做。
⽼爹把这套家具的不同部分分开交给⼉⼦们作,然后每个⼉⼦都在做⽊制家具的加⼯,最后拼在⼀起叫货。
⽼爹是scheduler任务调度器,⼉⼦们是compute node. 他们做的⼯作叫做作业。
2:负载均衡
HTTP重定向负载均衡
当⽤户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回⼀个新的url,然后浏览器再继续请求这个新url,实际上就是页⾯重定向。通过重定向,来达到“负载均衡”的⽬标。例如,我们在下载JAVA源码包的时候,点击下载链接时,为了解决不同国家和地域下载速度的问题,它会返回⼀个离我们近的下载地址。重定向的HTTP返回码是302。
优点:⽐较简单。
缺点:浏览器需要两次请求服务器才能完成⼀次访问,性能较差。重定向服务⾃⾝的处理能⼒有可能成为瓶颈,整个集的伸缩性国模有限;使⽤HTTP302响应码重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。
DNS域名解析负载均衡
DNS(Domain Name System)负责域名解析的服务,域名url实际上是服务器的别名,实际映射是⼀个IP地址,解析过程,就是DNS完成域名到IP的映射。⽽⼀个域名是可以配置成对应多个IP的。因此,DNS也就可以作为负载均衡服务。
事实上,⼤型⽹站总是部分使⽤DNS域名解析,利⽤域名解析作为第⼀级负载均衡⼿段,即域名解析得
到的⼀组服务器并不是实际提供Web服务的物理服务器,⽽是同样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进⾏负载均衡,将请求分发到真是的Web 服务器上。
优点:将负载均衡的⼯作转交给DNS,省掉了⽹站管理维护负载均衡服务器的⿇烦,同时许多DNS还⽀持基于地理位置的域名解析,即会将域名解析成举例⽤户地理最近的⼀个服务器地址,这样可以加快⽤户访问速度,改善性能。
缺点:不能⾃由定义规则,⽽且变更被映射的IP或者机器故障时很⿇烦,还存在DNS⽣效延迟的问题。⽽且DNS负载均衡的控制权在域名服务商那⾥,⽹站⽆法对其做更多改善和更强⼤的管理。
反向代理负载均衡
反向代理服务可以缓存资源以改善⽹站性能。实际上,在部署位置上,反向代理服务器处于Web服务器前⾯(这样才可能缓存Web相应,加速访问),这个位置也正好是负载均衡服务器的位置,所以⼤多数反向代理服务器同时提供负载均衡的功能,管理⼀组Web服务器,将请求根据负载均衡算法转发到不同的Web服务器上。Web服务器处理完成的响应也需要通过反向代理服务器返回给⽤户。由于web服务器不直接对外提供访问,因此Web服务器不需要使⽤外部ip地址,⽽反向代理服务器则需要配置双⽹卡和内部外部两套IP地址。
优点:和反向代理服务器功能集成在⼀起,部署简单。
缺点:反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
负载均衡策略
轮询
加权轮询
最少连接数
最快响应
Hash法
3:缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第⼀⼿段,现在CPU越来越快的⼀个重要因素就是使⽤了更多的缓存,在复杂的软件设计中,缓存⼏乎⽆处不在。⼤型⽹站架构设计在很多⽅⾯都使⽤了缓存设计。
CDN缓存
内容分发⽹络,部署在距离终端⽤户最近的⽹络服务商,⽤户的⽹络请求总是先到达他的⽹络服务商哪⾥,在这⾥缓存⽹站的⼀些静态资源(较少变化的数据),可以就近以最快速度返回给⽤户,如视频⽹站和门户⽹站会将⽤户访问量⼤的热点内容缓存在CDN中。
反向代理缓存
反向代理属于⽹站前端架构的⼀部分,部署在⽹站的前端,当⽤户请求到达⽹站的数据中⼼时,最先访问到的就是反向代理服务器,这⾥缓存⽹站的静态资源,⽆需将请求继续转发给应⽤服务器就能返回给⽤户。加:698581634 即可免费领取Java架构师学习资料⼀份
本地缓存
在应⽤服务器本地缓存着热点数据,应⽤程序可以在本机内存中直接访问数据,⽽⽆需访问数据库。
web服务器域名是什么分布式缓存
⼤型⽹站的数据量⾮常庞⼤,即使只缓存⼀⼩部分,需要的内存空间也不是单机能承受的,所以除了本地缓存,还需要分布式缓存,将数据缓存在⼀个专门的分布式缓存集中,应⽤程序通过⽹络通信访问缓存数据。
3: 流控(流量控制)
流量丢弃
通过单机内存队列来进⾏有限的等待,直接丢弃⽤户请求的处理⽅式显得简单⽽粗暴,并且如果是I/O密集型应⽤(包括⽹络I/O和磁盘
I/O),瓶颈⼀般不再CPU和内存。因此,适当的等待,既能够替⾝⽤户体验,⼜能够提⾼资源利⽤率。
通过分布式消息队列来将⽤户的请求异步化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论