Skip to content

Latest commit

 

History

History
51 lines (34 loc) · 4.54 KB

3.1.md

File metadata and controls

51 lines (34 loc) · 4.54 KB

3 目标和技术

总览

3.1.1 目标-稳定

[数据不是信息,]信息不是知识,知识不是智慧,智慧不是 真理,真理不是美丽,美丽不是爱,爱不是音乐,音乐是最好的-Frank Zappa

目标是指您希望系统具有的常规属性,而不是系统要解决的问题。 您应该希望您的系统稳定:简单,及时,高效,适应性强,可靠且美味。 由于您无法同时拥有所有这些美好的事物,因此您需要确定哪些目标对您最重要; 工程是要权衡的。

简洁 : 应该始终是首要目标,而抽象是使事情变得更简单的最佳工具,但是任何人都不是万能药。 正确无可替代。 与1980年代相比,现在其他三个目标更为重要:及时,适应性强和美味。

  • 及时(投入市场):因为廉价的计算机硬件意味着企业和消费者都在日常生活的各个方面都使用计算机系统,因此,一旦软件就绪,您就可以部署系统。 您可以在几分钟内订购云中的硬件,您的客户拥有智能手机。 如果您无法快速交付系统,您的竞争对手可以
  • 适应性:因为Internet意味着系统可以在几周内从拥有几十个用户发展到拥有数百万个用户。 此外,用户需求可能会迅速变化,对于许多应用程序而言,敏捷比正确无误更为重要。
  • Yummy(美味),是因为许多系统是为服务消费者而构建的,与组织努力学习系统的意愿相比,他们的意愿要低得多,对功能的兴趣要大得多。 时尚和时尚。 甚至对于专业人士而言,网络,社交媒体和GitHub都意味着人们很容易建立起对正式采购流程的反抗热情。
目标 简单 及时 效率 适应性 可靠 Yummy
问题 干净吗? 就绪? 快吗? 能进化吗 有效工作吗 会叫卖吗
同义词 节俭 第一 灵活 可信 精美/幻想
作为名词 优雅 上市时间 经济性 演化 保真度 特征
反义词 复杂 浪费 死板 易坏的 丑陋

3.1.2 技术- AInD

技术是用于构建系统的思想和工具。 了解它们可以防止您重新发明轮子。 最重要的是关于抽象和规范。 这些是原则,而不仅仅是提示。 其余大多数归为三个主要类别:

  • 是似而非,而不是精确的,完美的或最佳的结果通常足够好,并且通常更容易实现且更便宜。 较宽松的规格而不是严格的规格更有可能得到满足,尤其是在出现故障或变更时。 懒惰或推测性执行有助于使资源与需求匹配。
  • 增量设计具有多个方面,许多方面以“ i”开头。 最重要的是用独立,隔离的部分(称为模块)构建系统,并具有可以以不同方式组合在一起的接口。 这些部分更容易正确设置,发展和安全,并且借助间接和虚拟化,您可以在许多不同的环境中重复使用它们。 迭代设计而不是预先决定所有事情,可以使您与客户保持联系,并且可扩展性使系统易于迭代。
  • 分而治之是最重要的技术,尤其是具有清晰规范的抽象,用于组织系统。 当系统对于一个人的头来说太大时,或者不久之后回顾的时候,分治是保持掌握的唯一方法。 其他方面:使系统并发利用硬件,冗余处理故障以及递归以重用工作。 增量技术也是分而治之的方面。

对于每种技术,都有许多示例说明了它的用法,并强调了它的广泛应用。 少数观点一遍又一遍地出现,人们常常为同一件事用不同的词来掩盖。 以下目录既简短又令人惊讶。

我将在目标的段落中描述大多数技术,并针对每个目标告诉您:

  • 这是什么
  • 为什么好
  • 它怎么可能出错(何时避免;需要注意的事情)。

Here are links to important techniques, to inspire you when you have a design problem.


  • 简单:抽象,动作,可扩展,接口,可预测,关系,规范。
  • 高效:算法,批处理,缓存,并发,惰性,本地,分片,流,汇总,翻译。
  • 适应性强:动态,索引,间接,可扩展,虚拟化。
  • 可靠:原子,共识,最终,冗余,复制,重试。
  • 增量式:成为,间接,接口,递归,树。