• Scalability
  • 介绍
    • 描述系统应对负载增长的能力
    • 系统以某方式增长,有什么选项可以应对
  • 负载扩展性
    • 负载参数
    • 负载增加影响
      • 系统资源不变时,性能有什么影响
      • 性能不变时,需要增加多少系统资源
    • 某级别负载架构不能应付10倍负载
      • 发生数量级增长时,要重新考虑架构
  • 性能
  • 思想
    • 简化
      • 不过度设计
      • 设计时就考虑扩展性
      • 方案一简再简
      • 减少DNS查找
      • 减少对象
      • 同一品牌的网络设备
    • 分布式
    • 纵向扩展
    • 横向扩展
    • 弹性扩展
    • 围绕假设建立
      • 每秒多少请求,每个大小多少
  • 正确的工具
    • 合理使用数据库
    • 防火墙
    • 日志文件
  • 不重复工作
    • 不立即检查刚做过的工作
    • 停止重定向
    • 放松时序约束
  • 缓存
    • CDN
    • 过期头
    • 缓存Ajax
    • 页面缓存
    • 应用缓存
    • 对象缓存
    • 对象缓存放在自己的层上
  • 错误吸取
    • 积极学习
    • 不依靠QA发现失误
    • 没有回退功能的设计是失败的设计
    • 讨论失败
  • 数据库
    • 注意代价高的关系
    • 用正确的锁
    • 不多阶段提交
    • 不SELECT FOR UPDATE
    • 不选择所有数据
  • 容错
    • 采用隔离故障的“泳道”
    • 不信任单点
    • 避免系统串联
    • 确保能够启用/禁用功能
  • 避免或分发状态
    • 实现无状态
    • 在浏览器端维护会话
    • 分布式缓存存放状态
  • 异步
    • 尽可能异步通信
    • 确保消息总线能扩展
    • 避免消息总线过度拥挤
  • 其它
    • 慎用第三方解决方案扩展
    • 成本合理的存储
    • 删除事务处理中的商业智能
    • 设计能够监控的应用
  • 服务化发展
    • 进程内服务
    • 单机远程服务
    • 集群手动注册服务(nginx负载多实例)
    • 自动注册和发现服务(zookeeper)
    • 服务分组/隔离/路由
    • 服务治理(限流/黑白名单)
  • 参考资料
    • 《高扩展性网站的50条原则》