一文教你什么是集群,什么是负载均衡!

在“高并发,海量数据,分布式,NoSql,云计算…”概念满天飞的年代,相信很多朋友都据说过甚至常与人提起“集群,负载均衡”等,前端

但不是全部人都有机会真正接触到这些技术,也不是全部人都真正理解了这些“听起来很牛的”技术名词。下面简单解释一下吧。node

要了解这些概念首先要了解一下项目架构的演进,我这里应用一张Dubbo的文档图片如图web

一:项目架构的演进

ORM与MVC:算法

早期的架构都集中在一台服务器上,这样对于小型的业务访问量是彻底能够的,可是随着业务的增多,咱们引进的MVC的架构,这种架构是将整个业务分红不一样的层(表现层,业务层,数据访问层)维护也更加方面了,开发更加方便。数据库

PRC架构:浏览器

可是业务若是继续增大,项目会出现臃肿,一台服务器已经彻底没办法支持了,因此出现了RPC分布式的架构,RPC架构就是将服务进行合理拆分,分别放入多台服务器执行,服务器与服务器之间经过远程调用的方式进行通讯。缓存

  • 服务提供者:运行在服务器端,提供服务接口与服务实现类服务器

  • 服务中心:运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供服务给消费者使用。网络

  • 服务消费者:运行在客户端,经过远程代理对象调用远程服务架构

目前Java中经常使用的RPC框架:

1:Dubbo:

2:Spring Cloud

3:Thrift

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法

image

3:缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,如今CPU愈来愈快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在不少方面都使用了缓存设计。

CDN缓存

内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求老是先到达他的网络服务商哪里,在这里缓存网站的一些静态资源(较少变化的数据),能够就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在CDN中。

反向代理缓存

反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最早访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。

本地缓存

在应用服务器本地缓存着热点数据,应用程序能够在本机内存中直接访问数据,而无需访问数据库。

分布式缓存

大型网站的数据量很是庞大,即便只缓存一小部分,须要的内存空间也不是单机能承受的,因此除了本地缓存,还须要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序经过网络通讯访问缓存数据。

3:流控(流量控制)

流量丢弃

经过单机内存队列来进行有限的等待,直接丢弃用户请求的处理方式显得简单而粗暴,而且若是是I/O密集型应用(包括网络I/O和磁盘I/O),瓶颈通常再也不CPU和内存。所以,适当的等待,既可以替身用户体验,又可以提升资源利用率。

经过分布式消息队列来将用户的请求异步化。