本文仅供自己学习使用,本文参考自李智慧老师著的《大型网站技术架构:核心原理与案例分析》。
一、网站架构的伸缩性设计
1)不同功能进行物理分离实现伸缩
单一服务器处理所有的服务 ——> 数据库从应用服务器分离 ——> 缓存从应用服务器分离 ——> 静态资源从应用服务器分离
2)单一功能通过集群规模实现伸缩
当一头牛拉不动车的时候,不是去寻找一头更强壮的牛,而是用两头牛来拉车
二、应用服务器集群的伸缩性设计
1)HTTP重定向负载均衡
客户端用户访问 114.10.80.10服务器,即HTTP重定向负载均衡服务器(114.10.80.10)
服务器响应重定向至(114.10.80.1)给客户端
客户端用户浏览器重新请求 114.10.80.1 服务器
【需要2次请求服务器才能完成1次访问,性能差。HTTP302响应码重定向,搜索引擎判断为SEO作弊,降低搜索排名】
2)NDS域名解析负载均衡
客户端请求域名解析 www.163.com ——> DNS服务器
服务器返回IP地址 116.242.0.146
客户端用户浏览器重新请求 116.242.0.146 服务器
【大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段】
3)反向代理负载均衡
用户发起访问请求 ——> 反向代理服务器(外部IP:114.100.80.10;内部IP:10.0.0.10),反向代理服务器收到请求,根据负载均衡算法得到一台真实物理服务器的地址10.0.0.3,并将请求转发给服务器 ——> 服务器吹完请求后返回给反向代理服务器 ——> 反向代理服务器再将该响应返回给用户 ——> 用户
【反向代理服务器是所有请求和响应中转站,其性能可能会成为瓶颈】
4)IP负载均衡
在网络层通过修改请求目标地址进行负载均衡
5)数据链路层负载均衡
用户发起访问请求 114.100.80.10 ——> 反向代理服务器(外部IP:114.100.80.10),请求数据目的mac地址修改为00:0c:29:d2,并将请求转发给响应的服务器 ——> Web服务器集群 虚拟IP:114.100.80.10 mac地址:00:0c:29:d2,处理请求之后,直接响应给用户 ——> 客户端用户
【使用三角传输的链路层负载均衡的目前大型网站使用最广泛的一种负载均衡手段。在Linux平台上最好用的链路层负载均衡开源产品是LVS(Linux Virtual Server)】
6)负载均衡算法
轮询(所有请求依次分发到每台服务器上)
加权轮询(按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多请求)
随机(请求被随机分配到各个服务器上)
最少连接(将新到的请求分发到最少连接的服务器上)
原地址散列(根据请求源的IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址的请求总在同一个服务器处理)
三、分布式缓存集群的伸缩性设计
Memcached分布式缓存集群的伸缩性(分布式缓存的一致性Hash算法。一致性Hash环,上面均匀分布着真是服务器的多个虚拟节点,新加入新的服务器,相当于假如多个均匀分布的虚拟节点)
四、数据存储服务器集群的伸缩性设计
1)关系型数据库集群的伸缩性设计
支持分布式关系数据库处理开源产品(Cobar)【Page 113】
2)NoSQL数据库集群的伸缩性设计(Apache HBase 数据库)【Page 117】
能够很好的处理海量数据,弥补关系型数据库的不足。
一、网站架构的伸缩性设计
1)不同功能进行物理分离实现伸缩
单一服务器处理所有的服务 ——> 数据库从应用服务器分离 ——> 缓存从应用服务器分离 ——> 静态资源从应用服务器分离
2)单一功能通过集群规模实现伸缩
当一头牛拉不动车的时候,不是去寻找一头更强壮的牛,而是用两头牛来拉车
二、应用服务器集群的伸缩性设计
1)HTTP重定向负载均衡
客户端用户访问 114.10.80.10服务器,即HTTP重定向负载均衡服务器(114.10.80.10)
服务器响应重定向至(114.10.80.1)给客户端
客户端用户浏览器重新请求 114.10.80.1 服务器
【需要2次请求服务器才能完成1次访问,性能差。HTTP302响应码重定向,搜索引擎判断为SEO作弊,降低搜索排名】
2)NDS域名解析负载均衡
客户端请求域名解析 www.163.com ——> DNS服务器
服务器返回IP地址 116.242.0.146
客户端用户浏览器重新请求 116.242.0.146 服务器
【大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段】
3)反向代理负载均衡
用户发起访问请求 ——> 反向代理服务器(外部IP:114.100.80.10;内部IP:10.0.0.10),反向代理服务器收到请求,根据负载均衡算法得到一台真实物理服务器的地址10.0.0.3,并将请求转发给服务器 ——> 服务器吹完请求后返回给反向代理服务器 ——> 反向代理服务器再将该响应返回给用户 ——> 用户
【反向代理服务器是所有请求和响应中转站,其性能可能会成为瓶颈】
4)IP负载均衡
在网络层通过修改请求目标地址进行负载均衡
5)数据链路层负载均衡
用户发起访问请求 114.100.80.10 ——> 反向代理服务器(外部IP:114.100.80.10),请求数据目的mac地址修改为00:0c:29:d2,并将请求转发给响应的服务器 ——> Web服务器集群 虚拟IP:114.100.80.10 mac地址:00:0c:29:d2,处理请求之后,直接响应给用户 ——> 客户端用户
【使用三角传输的链路层负载均衡的目前大型网站使用最广泛的一种负载均衡手段。在Linux平台上最好用的链路层负载均衡开源产品是LVS(Linux Virtual Server)】
6)负载均衡算法
轮询(所有请求依次分发到每台服务器上)
加权轮询(按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多请求)
随机(请求被随机分配到各个服务器上)
最少连接(将新到的请求分发到最少连接的服务器上)
原地址散列(根据请求源的IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址的请求总在同一个服务器处理)
三、分布式缓存集群的伸缩性设计
Memcached分布式缓存集群的伸缩性(分布式缓存的一致性Hash算法。一致性Hash环,上面均匀分布着真是服务器的多个虚拟节点,新加入新的服务器,相当于假如多个均匀分布的虚拟节点)
四、数据存储服务器集群的伸缩性设计
1)关系型数据库集群的伸缩性设计
支持分布式关系数据库处理开源产品(Cobar)【Page 113】
2)NoSQL数据库集群的伸缩性设计(Apache HBase 数据库)【Page 117】
能够很好的处理海量数据,弥补关系型数据库的不足。