零. 核心问题
- 什么是高伸缩性?
- 仅通过改变部署的服务器数量就可以扩大或缩小网站的处理能力
- 如何实现高伸缩性?
一. 伸缩性设计
网站架构伸缩性设计
- 不同功能进行物理分离实现伸缩
- 纵向分离
- 将业务处理流程上的不同部分分离部署,实现系统伸缩性
- 横向分离
- 单一功能通过集群规模实现伸缩
二. 服务器集群的伸缩性设计
- 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算法
四. 数据存储服务器集群的伸缩性设计
- 关系数据库集群的伸缩性设计
- NoSQL数据库的伸缩性设计
五. 总结
- 伸缩架构本身的设计是简单的
- 当与可用性、正确性、性能等耦合到一起,伸缩性就复杂了
- 综合考虑团队的知识储备和结构、管理层的战略愿景和规划
六. Tips
- 只有遇不到的问题,没有解决不了的问题
- 高手之所以是高手,因为遇到了棘手的问题,并解决了