大型网站技术架构核心原理与案例分析 读书笔记
伸缩性架构
一、设计
不同功能的物理分离
纵向分离:
网站具体产品 |
---|
可复用业务服务 |
基础技术服务 |
数据库 |
横向分离:
横向分离的粒度可以非常小,电商网站每个页面都会独立部署
单一功能通过集群伸缩
- 应用服务器集群
- 缓存服务器集群
- 存储服务器集群
二、应用服务器集群
负载均衡
关键组件:HTTP请求分发——负载均衡器。
主要的负载均衡技术有以下几种:
- HTTP重定向。HTTP 302重定向,实际中很少使用。性能差。
- DNS域名解析。大型网站通常把DNS作为第一级负载均衡。解析后得到内部服务器的负载均衡服务器,然后再分发到真实服务器。
- 反向代理。反向代理是用于缓存资源的,通常也用于负载均衡。实际上反向代理服务器几乎都有负载均衡功能。反向代理服务器需要配置双网卡。反向代理负载均衡也成为应用层负载均衡,优点是部署简单,缺点是性能可能成为瓶颈。
- IP负载均衡。响应数据吞吐量受制于负载均衡服务器网卡带宽。
- 数据链路层负载均衡。在数据链路层修改mac地址进行负载均衡。数据传输方式成为三角传输模式。响应数据包不经过负载均衡直接返回。负载均衡通过修改mac进行请求分发。这种负载均衡方式又叫做直接路由(DR).链路层负载均衡是大型网站使用最广的一种负载均衡手段。Linux平台上最好的开源的链路层负载均衡产品是LVS(Linux Virtual Server).
负载均衡算法
- Round Robin. 轮询,每台服务器处理的请求数目都相同。适用于所有服务器硬件配置都相同的场景。
- Weighted Round Robin. 加权轮询
- Random. 随机。如果应用服务器配置不同,可以使用加权随机算法。
- Source Hashing. 实现会话黏滞。
三、分布式缓存服务器集群
- Memcached设计
- Memcached伸缩挑战
- 分布式一致性hash算法、虚拟节点
四、存储服务器集群
关系型数据库的伸缩性设计
- 读写分离
- 业务分库(跨库的表不能进行join操作)
- 表分片,将一张表拆开分别存储在多个数据库中。开源产品有Amoeba和Cobar.
NoSQL数据库的伸缩性设计
- HBase