架构_Web高伸缩架构


零. 核心问题

  1. 什么是高伸缩性?
    • 仅通过改变部署的服务器数量就可以扩大或缩小网站的处理能力
  2. 如何实现高伸缩性?
    • 功能物理分离
    • 集群
      • 应用服务器集群
      • 数据服务器集群

一. 伸缩性设计


网站架构伸缩性设计

  1. 不同功能进行物理分离实现伸缩
    • 纵向分离
      • 将业务处理流程上的不同部分分离部署,实现系统伸缩性
    • 横向分离
      • 将不同的业务员模块分离部署,实现系统伸缩性
  2. 单一功能通过集群规模实现伸缩
    • 应用服务器集群
    • 数据服务器集群
      • 缓存数据服务器集群
      • 存储数据服务器集群

二. 服务器集群的伸缩性设计

  1. HTTP重定向负载均衡
    • 利用HTTP重定向协议实现负载均衡
    • 优点
      • 简单
    • 缺点
      • 浏览器需要请求两次服务器才能完成一次访问
      • 重定向服务器可能成为瓶颈
      • 重定向可能被搜索引擎判断为SEO作弊
  2. DNS域名解析负载均衡
    • 域名解请求会根据负载均衡算法计算出一个不同的IP地址返回
    • 优点
      • 省掉了网站管理维护负载均衡服务器
      • 可以将域名解析成距离用户地理最近的一个服务器地址
    • 缺点
      • 由于DNS的多级缓存,导致修改后生效事件较长
      • DNS负载均衡控制权在域名服务那里,网站无法对其作更多的改善
  3. 反向代理负载均衡
    • 在HTTP协议层面转发请求,应用层负载均衡
    • 优点
      • 部署简单
    • 缺点
      • 性能可能成为瓶颈
  4. IP负载均衡
    • 在网络层通过修改目标地址进行负载均衡
    • 优点
      • IP负载均衡在内核进程完成数据分发,较反向发力负载均衡有更好的处理性能
    • 缺点
      • 集群的最大响应数据吞吐量受制于负载均衡服务器的网卡带宽
  5. 数据链路层负载均衡
    • 三角传输模式
    • 负载均衡数据分发过程中不修改IP地址,只修改目的mac地址
    • 目前使用最广的负载均衡手段
  6. 负载均衡算法
    • 轮询(Round Robin)
    • 加权轮询(Weighted Round Robin)
    • 随机(Random)
    • 最少连接(Least Connections)
    • 源地址散列(Source Hashing)
      • 对IP做Hash计算,得到应用服务器,实现同一个请求总在同一个服务器上处理

三. 分布式缓存集群的伸缩性设计

  1. Memcached分布式缓存集群的访问模型
    • 应用程序 -> Memcached API
    • Memcached API -> 通信模块 -> Memcached服务器
    • Memcached API -> 路由算法 -> 服务器列表
  2. Memcached分布式缓存集群的伸缩性挑战
    • 扩容
  3. 分布式缓存的一致性Hash算法
    • 一致性Hash环

四. 数据存储服务器集群的伸缩性设计

  1. 关系数据库集群的伸缩性设计
    • 主从读写分离
    • 分库分表
    • 分片
      • Amoeba
      • Cobar
  2. NoSQL数据库的伸缩性设计
    • HBase
    • Redis

五. 总结

  1. 伸缩架构本身的设计是简单的
  2. 当与可用性、正确性、性能等耦合到一起,伸缩性就复杂了
  3. 综合考虑团队的知识储备和结构、管理层的战略愿景和规划

六. Tips

  1. 只有遇不到的问题,没有解决不了的问题
  2. 高手之所以是高手,因为遇到了棘手的问题,并解决了