架构_Web高伸缩架构
2021-12-21
零. 核心问题
-
什么是高伸缩性?
- 仅通过改变部署的服务器数量就可以扩大或缩小网站的处理能力
-
如何实现高伸缩性?
- 功能物理分离
- 集群
- 应用服务器集群
- 数据服务器集群
一. 伸缩性设计
网站架构伸缩性设计
-
不同功能进行物理分离实现伸缩
- 纵向分离
- 将业务处理流程上的不同部分分离部署,实现系统伸缩性
- 横向分离
- 将不同的业务员模块分离部署,实现系统伸缩性
- 纵向分离
-
单一功能通过集群规模实现伸缩
- 应用服务器集群
- 数据服务器集群
- 缓存数据服务器集群
- 存储数据服务器集群
二. 服务器集群的伸缩性设计
-
HTTP重定向负载均衡
- 利用HTTP重定向协议实现负载均衡
- 优点
- 简单
- 缺点
- 浏览器需要请求两次服务器才能完成一次访问
- 重定向服务器可能成为瓶颈
- 重定向可能被搜索引擎判断为SEO作弊
-
DNS域名解析负载均衡
- 域名解请求会根据负载均衡算法计算出一个不同的IP地址返回
- 优点
- 省掉了网站管理维护负载均衡服务器
- 可以将域名解析成距离用户地理最近的一个服务器地址
- 缺点
- 由于DNS的多级缓存,导致修改后生效事件较长
- DNS负载均衡控制权在域名服务那里,网站无法对其作更多的改善
-
反向代理负载均衡
- 在HTTP协议层面转发请求,应用层负载均衡
- 优点
- 部署简单
- 缺点
- 性能可能成为瓶颈
-
IP负载均衡
- 在网络层通过修改目标地址进行负载均衡
- 优点
- IP负载均衡在内核进程完成数据分发,较反向发力负载均衡有更好的处理性能
- 缺点
- 集群的最大响应数据吞吐量受制于负载均衡服务器的网卡带宽
-
数据链路层负载均衡
- 三角传输模式
- 负载均衡数据分发过程中不修改IP地址,只修改目的mac地址
- 目前使用最广的负载均衡手段
-
负载均衡算法
- 轮询(Round Robin)
- 加权轮询(Weighted Round Robin)
- 随机(Random)
- 最少连接(Least Connections)
- 源地址散列(Source Hashing)
- 对IP做Hash计算,得到应用服务器,实现同一个请求总在同一个服务器上处理
三. 分布式缓存集群的伸缩性设计
-
Memcached分布式缓存集群的访问模型
- 应用程序 -> Memcached API
- Memcached API -> 通信模块 -> Memcached服务器
- Memcached API -> 路由算法 -> 服务器列表
-
Memcached分布式缓存集群的伸缩性挑战
- 扩容
-
分布式缓存的一致性Hash算法
- 一致性Hash环
四. 数据存储服务器集群的伸缩性设计
-
关系数据库集群的伸缩性设计
- 主从读写分离
- 分库分表
- 分片
- Amoeba
- Cobar
-
NoSQL数据库的伸缩性设计
- HBase
- Redis
五. 总结
- 伸缩架构本身的设计是简单的
- 当与可用性、正确性、性能等耦合到一起,伸缩性就复杂了
- 综合考虑团队的知识储备和结构、管理层的战略愿景和规划
六. Tips
- 只有遇不到的问题,没有解决不了的问题
- 高手之所以是高手,因为遇到了棘手的问题,并解决了