高扩展性网站的50条原则(笔记)

1 化简方程

任何大问题,只要分拆方法正确,都不过是一系列有待解决的小问题的集合。

1.1 原则1 :不要过度设计

  • 复杂的解决方案实施成本高,而且会产生大量长期成本。
  • 过度复杂的系统会限制扩展能力。简单的系统更容易维护和扩展,且成本更低。
  • 过度设计分为两大类。一类是指设计与实现超出了有用需求的产品。
    • 范围蔓延,或者最初产品定义和最初的产品发布之间的范围差异,是过度设计的一种表现。
    • 过度设计的第二类表现是使系统过度复杂,或者用复杂的来实现它。简而言之,就是要花费过大的力气去完成一项工作,或者让用户花费过大的力气去完成一项任务,或者让程序员花费过大的力气去理解一个功能。
    • 最后一种情况,就是软件复杂得让其他程序员难以理解。衡量一个伟大程序员的真正标准,是他多快把一个复杂的问题简化,多快能开发出一个既容易理解,又容易维护的解决方案。

1.2 原则2 :设计时就考虑扩展性

  • 提前考虑如何扩展解决方案,在实际需要前大概一个月(编程)实现它,或者在客户急需时提前几天实现它,会给开发团队节省很多金钱和时间。

1.3 原则3 :把方案一减再减

  • 只是着重于“不要复杂”不能解决需求、故事及事件编排和真正的实施带来的各种问题。
  • 在产品开发的各个方面都要简化需求。
  • 如何简化范围
    • 经常应用帕累托法则(也称为80-20%法则)。
    • You Can Always Do Less (你可以做得少一点)。
    • 最小可行产品。用最小的努力得到最有效的客户需求。
  • 如何简化设计
    • 减少复杂度是为了减少工作量,而简化设计是为了工作得更快更容易。
    • 简而言之,简化设计这一步会要求我们用一种容易理解、低成本、可扩展的方式来完成工作。
  • 如何简化实施
    • 最简单的实施方法,都是已经被实施过且被证明是可扩展的方法。

1.4 原则4 :减少DNS查询

  • 浏览器限制了对每个服务器或代理的最大同时持续连接数。许多浏览器把最大连接数设置为6或者更大。
  • 一个通用的原则是,页面上的DNS查找越少下载页面的性能越高。但是,把所有对象都放在一个域中也有不利的一面,在前面关于最大同时连接数的讨论中就暗示过这一点。

1.5 原则5 :尽可能减少对象

  • 提高Web页面的性能,从而提高扩展性(为一个页面提供的对象少,就意味着服务器能够多服务几个页面)的最简单方法之一就是减少页面上的对象。

1.6 原则6 :使用同一品牌网络设备

  • 不应该为了省点钱,就去应付时不时出现的互操作性和可用性问题。
  • 不同品牌的网络设备可能会造成可用性和扩展性问题。最好只选择一个供应商。

2 分布工作

2.1 原则7 :横向复制

2.2 原则8 :拆分不同的东西

2.3 原则9 :拆分相近的东西

3 横向扩展设计

3.1 原则10 :设计横向扩展方案

3.2 原则11 :采用经济型系统

3.3 原则12 :横向扩展数据中心

3.4 原则13 :利用云技术进行设计

4 使用正确的工具

4.1 原则14 :合理使用数据库

4.2 原则15 :防火墙,到处都是防火墙

4.3 原则16 :积极利用日志文件

5 不要重复工作

5.1 原则17 :不要立即检查刚做过的工作

5.2 原则18 :停止重定向

5.3 原则19 :放松时序约束

6 积极利用缓存

6.1 原则20 :利用CDN

6.2 原则21 :使用过期头

6.3 原则22 :缓存Ajax调用

6.4 原则23 :利用页面缓存

6.5 原则24 :利用应用缓存

6.6 原则25 :利用对象缓存

6.7 原则26 :把缓存放在自己的层上

7 从错误中吸取教训

8 数据库原则

9 容错设计与故障控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风九天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值