📖 高扩展性网站的50条原则

高扩展性网站的50条原则, Martin L. Abbott/Michael T. Fisher, 张欣/杨海玲译, 人民邮电出版社, 2012

比较喜欢这类既讲技术又讲思想的书,读起来比较轻松.书是借的,迟早要还,这里把其主题点列出来,作为备忘. 有些内容并没有形象认识,也有对备忘的需要.

第1章 化简方程

  • 1.1 不要过度设计
  • 1.2 设计时就考虑扩展性 (设计,实现,部署)
  • 1.3 把方案一减再减 (如何简化范围,如何简化设计,如何简化实施)
  • 1.4 减少DNS查找
  • 1.5 尽可能减少对象 (另一方面又不能过度减少对象)
  • 1.6 使用同一品牌的网络设备

第2章 分布工作

  • 2.1 横向复制 (X轴原则,比如通过硬件来扩展,用多个服务器分布工作)
  • 2.2 拆分不同的东西 (Y轴原则)
  • 2.3 拆分相近的东西 (Z轴原则)

第3章 横向扩展设计

  • 3.1 设计横向扩展方案
  • 3.2 采用经济型系统
  • 3.3 横向扩展数据中心
  • 3.4 利用云技术进行设计

地4章 使用正确的工具

  • 4.1 合理使用数据库 (使用什么样的数据库,关系数据库,键值数据库,文件系统)
  • 4.2 防火墙,到处都是防火墙 (考虑防火墙的必要性)
  • 4.3 积极利用日志文件

第5章 不要重复工作

  • 5.1 不要立即检查刚做过的工作
  • 5.2 停止重定向
  • 5.3 放松时序约束

第6章 积极利用缓存

  • 6.1 利用CDN (Content Delivery Network,内容分发网络)
  • 6.2 使用过期头
  • 6.3 缓存Ajax调用
  • 6.4 利用页面缓存
  • 6.5 利用应用缓存
  • 6.6 利用对象缓存
  • 6.7 把对象缓存放在自己的 “层” 上

第7章 从错误中吸取教训

  • 7.1 积极地学习
  • 7.2 不要依靠QA发现失误
  • 7.3 没有回退功能的设计是失败的设计
  • 7.4 讨论失败并从中吸取教训

第8章 数据库原则

  • 8.1 注意代价高的关系
  • 8.2 使用类型正确的数据库锁
  • 8.3 不要使用多阶段提交
  • 8.4 不要使用SELECT FOR UPDATE
  • 8.5 不要选择所有数据 (SELECT *)

第9章 容错设计与故障控制

  • 9.1 采用隔离故障的 “泳道”
  • 9.2 绝对不要信任单点故障
  • 9.3 避免系统串联
  • 9.4 确保能够启用/禁用功能

第10章 避免或分发状态

  • 10.1 努力实现无状态
  • 10.2 尽可能在浏览器端维护会话
  • 10.3 利用分布式缓存存放状态

第11章 异步通信和消息总线

  • 11.1 尽可能使用异步通信
  • 11.2 确保信息总线能够扩展
  • 11.3 避免让消息总线过度拥挤

第12章 其他原则

  • 12.1 慎用第三方解决方案扩展
  • 12.2 清楚、归档和成本合理的存储
  • 12.3 删除事物处理中的商业智能
  • 12.4 设计能够监控的应用
  • 12.5 要能胜任