网站的伸缩性架构

网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。

伸,很好理解,随着网站的业务量增大,访问量增多,需要部署越来越多的服务器,此为伸。缩,可以应对举办活动,临时加入若干服务器,活动结束后再下线,节约成本。

一、伸缩性架构设计

网站的伸缩性设计可分为2类:

1)根据不同功能进行物理分离实现伸缩,即不同的服务部署在不同的服务器

2)单一功能通过集群实现伸缩,即集群内的服务器部署相同的服务。

1、不同功能进行物理分离实现伸缩

网站由小到大的发展历程,就是不断加入服务器的过程。新增服务器总是从现有服务器中分离出部分功能和服务。

纵向分离,按网站分层架构进行服务器部署。

然后可对每一层进行横向分离:

横向分离的粒度可以非常小,甚至可以一个关键页面就部署一台独立的服务器。

2、单一功能通过集群实现伸缩

不同功能、服务部署在不同的服务器,可以实现一定程度的伸缩性。但随着访问量增加,即时粒度很小也不能满足要求的时候,就需要使用服务器集群,将服务用集群进行部署。

集群伸缩性,与高可用架构一样,分为应用服务器集群和数据服务器集群。原因是应用服务无状态,而数据服务通常有状态。对状态管理的不同,技术实现有很大区别。而数据服务又分为缓存数据服务器集群和存储数据服务器集群,这两种集群的伸缩性设计也不相同。

二、应用服务器集群的伸缩性设计

应用服务器应该设计成无状态的,即应用服务器不存储请求上下文信息,这样用户请求可以发送到集群中任意一台服务器上去处理,而任意一台服务器的处理结果都是相同的。

负责分发请求到服务器的装置就是负载均衡服务器。在《网站的可用性架构》中介绍到,负载均衡服务器也是改善网站可用性的利器。既可以实现伸缩性,又能实现可用性,负载均衡服务器可谓网站必不可少的基础技术手段,可谓杀手锏之一。

实现负载均衡的技术手段如下:

1、HTTP重定向

根据用户的HTTP请求计算得到真实的WEB服务器地址,并将该WEB地址写入HTTP重定向响应中(响应状态码为302),返回给浏览器,然后浏览器访问WEB地址。这种方案简单,缺点是浏览器需要请求2次才能完成一次访问,性能较差;重定向服务器本身可能会成为瓶颈;搜索引擎会认为是SEO作弊。

2、DNS域名解析

DNS服务器中配置多条A记录,每次域名请求根据负载均衡算法计算一个IP地址返回。

优点是负载均衡工作交给了DNS,省掉了网站本身管理维护负载均衡服务器的麻烦;同时DNS还支持基于地理位置的域名解析,会将域名解析成距离用户最近的一个服务器地址,加快访问速度,改善性能。

缺点是DNS多级解析,每一级都有缓存,A记录修改后生效需要一定时间,期间可能出现将已经下线的服务器地址返回给用户,从而造成访问失败现象;同时这种方式只适合用在访问有域名的网站。

3、反向代理

在《网站的高性能架构》中提到,WEB前端优化的手段之一,就是利用反向代理缓存资源,以改善性能。但实际上,反向代理服务器部署的位置,也是负载均衡服务器的位置,所以大多数反向代理服务器也提供负载均衡功能。

4、修改IP(网络层)

负载均衡服务器在网络层通过修改请求目标地址进行负载均衡。

具体过程:用户请求数据包到达负载均衡服务器,负载均衡服务器计算得到一台真实WEB服务器地址,将数据目标IP修改为该地址,发往WEB服务器;WEB服务器处理完成后返回响应数据包给均衡服务器,均衡服务器修改数据包源地址为自身IP,最后发往用户浏览器。

IP负载均衡在内核进程完成数据分发,较反向代理负载均衡有更好的性能。但负载均衡服务器负责请求分发和数据返回,其网卡带宽容易成为瓶颈。

5、修改MAC地址(数据链路层)

负载均衡服务器在数据链路层修改mac地址进行负载均衡。

这种模式中,负载均衡服务器和所有WEB服务器地址都相同。当数据包到达负载均衡服务器后,负载均衡服务器将请求地址的目标mac地址修改为某台WEB服务器的mac地址,web服务器处理完成后直接返回用户浏览器。所以这种数据传输方式又称为三角传输模式。

三角传输模式的数据链路层是使用最广的一种负载均衡手段,Linux平台上最好的相关产品为LVS(Linux Virtual Server)。

三、分布式缓存集群的伸缩性设计

由于分布式缓存服务器集群中不同服务器缓存的数据各不相同,对缓存的访问请求不可以落在任意一台进行处理,必须先找到有相关数据的服务器。

相应地,让新上线的缓存服务器对整个分布式缓存集群影响最小,也就是说新加入缓存服务器后,集群中已经缓存的数据应该尽可能还可被访问到,这是分布式缓存集群伸缩性设计的最主要目标。

以Memcached为例。访问路由可通过缓存数据的KEY进行计算得到,计算方法可以有余数Hash等。挑战主要来自于扩容。解决之道在于改进算法,提高命中率,减少失败率。

四、数据存储服务器集群的伸缩性设计

1、RDBMS

关系型数据库凭借简单强大的SQL和众多成熟的商业数据库产品,占据了大部分的业务数据存储服务。主要的关系型数据库都支持数据复制功能,可以通过主从复制、读写分离、分库分表等操作来对数据库进行简单伸缩。

但在大型网站的实际应用中,即使进行了分库和主从复制,有一些单表的数据仍然很大,需要将表拆开,分别存储在多个数据库中,称为分片。

2、NoSql

NoSql放弃了关系型数据库中结构化查询语言(SQL)和事务一致性(ACID),而强化其他一些大型网站更关注的特性:高可用和可伸缩性。可以说,NoSql数据库是分布式数据库,天然就具有良好的可伸缩性。

左直拳的博客
我还没有学会写个人说明!
上一篇

从语言、模型和规模三个维度,打造下一代AI

下一篇

抛弃 V8 参数适配器框架:JavaScript 调用提速 40% 的实践

你也可能喜欢

评论已经被关闭。

插入图片