您的位置:首页 > 运维架构 > 网站架构

架构のHP&HA&LB

2016-04-25 18:01 363 查看
高性能集群(Highperformance cluster,HP) 

它是利用一个集群中的多台机器共同完成同一件任务,使得完成任务的速度和可靠性都远远高于单机运行的效果。弥补了单机性能上的不足。该集群在天气预报、环境监控等数据量大,计算复杂的环境中应用比较多;

 

负载均衡集群(Loadbalance cluster,LB) 

它是利用一个集群中的多台单机,完成许多并行的小的工作。一般情况下,如果一个应用使用的人多了,那么用户请求的相应时间就会增大,机器的性能也会受到影响,如果使用负载均衡集群,那么集群中任意一台机器都能相应用户的请求,这样集群就会在用户发出服务请求之后,选择当时负载最小,能够提供最好的服务的这台机器来接受请求并相应,这样就可用用集群来增加系统的可用性和稳定性。这类集群在网站中使用较多; 

 

高可用性集群(Highavailability cluster,HA) 

它是利用集群中系统 的冗余,当系统中某台机器发生损坏的时候,其他后备的机器可以迅速的接替它来启动服务,等待故障机的维修和返回。最大限度的保证集群中服务的可用性。这类系统一般在银行,电信服务这类对系统可靠性有高的要求的领域有着广泛的应用。 高可用性群集的出现是为了使群集的整体服务尽可能可用。

负载均衡系统: 负载均衡又有DNS负载均衡(比较常用)、IP负载均衡、反向代理负载均衡等,也就是在集群中有服务器A、B、C,它们都是互不影响,互不相干的,任何一台的机器宕了,都不会影响其他机器的运行,当用户来一个请求,有负载均衡器的算法决定由哪台机器来处理

 

分布式 & 集群区别:

分布式是指将不同的业务分布在不同的地方,集群指的是将几台服务器集中在一起,实现同一业务。 分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。 

                                                                               

Ø  高并发解决方案:

1、HTML静态化

2、图片服务器分离

3、数据库集群、库表散列

4、缓存

6、负载均衡

7、CDN:更智能的镜像+缓存+流量导流,充分考虑用户发起请求的地点和当时网络的情况,来决定把用户的请求定向到离用户最近同时负载相对较轻的节点缓存服务器上

 

 

Ø  高可用性解决方案(HA):减少停止服务的时间,从而使其服务保持高度的可使用性

%availability=(TotalElapsed Time – Sum of Inoperative Times) / Total Elapsed Time

TotalElapsed Time 为系统总时间,包括可提供服务时间+停止服务时间。 Sumof Inoperative Times 为停止服务时间,包括宕机时间+维护时间

 

1)   入口层:主备切换(lvs+keepalived),
failover(故障转移),lvs做双机热备,通过keepalived模块能够达到故障自动转移到备份服务器,不间断提供服务

2)   业务层:session放在缓存中redis,原则就是业务层不要有状态。在业务层没有状态时,一台业务层服务器当掉了后,Nginx/Apache会自动将所有的请求打到另外一台业务层的服务器上。由于没有状态,两台服务器没有任何差异,所以用户完全感受不到。如果把session放在业务层里面的话,那么面临的问题是,这个用户以前是登录在一台机器上的,这个进程死掉后,用户就会被登出了

3)   缓存层:分布式缓存细粒度化

4)   数据库层:有主从模式(Master-Slave),还有主主模式(Master-Master)都能满足需求。MongoDB也有ReplicaSet

总之,要想实现高可用,需要做到这几点:入口层做心跳,业务层服务器无状态,缓存层减小粒度,数据库做一个主从模式。对于这种模式来讲,我们做的高可用不需要太多服务器,这些东西都可以同时部署在两台服务器上。

Ø  可伸缩架构



1)   入口层

在入口层实现伸缩性,可以通过直接水平扩机器,然后DNS加IP来实现。但需要注意,尽管一个域名解析到几十个IP没有问题,但是很多浏览器客户端只会使用前几个IP,部分域名供应商对此有优化(如每次返回的IP顺序随机),但这个优化效果不稳定。

推荐的做法是使用少量的Nginx机器作为入口,业务服务器隐藏在内网(HTTP类型的业务这种方式居多)。另外,也可以把所有IP下发到客户端,然后在客户端做一些调度(特别是非HTTP型的业务,如游戏、直播)。

2)   业务层

业务层的伸缩性如何实现?与做高可用时的解决方案一样,要实现业务层的伸缩性,保证无状态是很好的手段。此外,加机器继续水平部署即可。

3)  缓存层

缓存hash一致性

4)  数据库

水平拆分、垂直拆分和定期滚动

 

总之,我们可以在入口层、业务层面、缓存层和数据库层四个层面,使用刚才介绍的方法和技术实现系统高可用和可伸缩性。具体为:在入口层用心跳来做到高可用,用平行部署来伸缩;在业务层做到服务无状态;在缓存层,可以减小一些粒度,以方便实现高可用,使用一致性Hash将有助于实现缓存层的伸缩性;数据库层的主从模式能解决高可用问题,拆分和滚动能解决可伸缩问题



 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HA HP LB