所谓网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署服务器数量就可以扩大或者缩小网站的服务处理能力。
网站架构的伸缩性设计
网站的伸缩性设计可分为两类:
一类:是根据功能进行物理分离实现伸缩,垂直拆分;
一类是单一功能通过集群实现伸缩,水平拆分;
应用服务器集群的伸缩性设计
HTTP重定向负载均衡
HTTP重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求计算一台真实的Web服务器地址,并将该Web服务器地址写入HTTP重定向响应中(响应状态码302)返回给用户浏览器。
优点:简单
缺点:浏览器需要两次请求服务器才能完成一次访问,性能较差;
使用HTTP302响应码重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。
DNS域名解析负载均衡
利用DNS处理域名解析请求的同时进行负载均衡处理的一种方案。
优点:将负载均衡的工作交给DNS,省掉了网站管理维护负载均衡服务器的麻烦,同时许多DNS还支持基于地理位置的域名解析,即会将域名解析成距离用户地理最近的一个服务器地址,这样可以加速用户访问速度,改善性能。
反向代理负载均衡
缺点:反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
IP负载均衡
在网络层通过修改请求目标地址进行负载均衡。
这里的关键在于真实物流Web服务器响应数据包如何返回给负载均衡服务器。
一种方案是负载均衡服务器在修改目的IP地址的同时修改源地址,将数据包源地址设为自身IP,即源地址转换(SNAT),这样Web服务器的响应会再回到负载均衡服务器;
另一种方案是将负载均衡服务器同时作为真实物理服务器集群的网关服务器,这样所有响应数据都会到达负载均衡服务器。
IP负载均衡在内核进程完成数据分发,较反向代理负载均衡(在应用程序中分发数据)有更好的处理性能。但是由于所有请求响应都需要经过负载均衡服务器,集群的最大响应数据吞吐量不得不受制于负载均衡服务器网卡带宽。对于提高下载服务或者视频服务等需要传输大量数据的网站而言,难以满足需求。能不能让负载均衡服务器只分发请求,而使响应数据从真实物理服务器直接返回给用户呢?
数据链路层负载均衡
是指在通信协议的数据链路层修改mac地址进行负载均衡。
负载均衡算法
分布式缓存集群的伸缩性设计
数据存储服务器集群的伸缩性设计
缓存目的是加速,因此部分缓存数据丢失不影响业务的正常处理,而数据存储服务器必须保证数据的可靠存储,任何情况下都必须保证数据的可用性和正确性。具体说,可以分为关系数据库集群的伸缩性设计和NoSQL数据库的伸缩性设计。