失败开放和层政策
建筑(30)大约2009年,发电机纸张融为一体卡桑德拉。Cassandra以时尚的时尚逃离Facebook:突然爆炸的爆炸性爆炸物遭受了较少的持续维护。维护早期的Cassandra本身就是一种爆炸性的经历,那些跑早期版本的人开发了一个共同的笑话,Cassandra是一个特洛伊木马,被释放出在整个一代硅谷初创公司爆发进展。
在Digg和Ring Cassandra工作0.6,我们没有太多笑。
虽然在操作上,它有点挑战,但它介绍了我当时的一种非常新颖的想法:Cassandra和类似设计的NoSQL数据库是通过仅提供规模良好的操作来对群众带来可扩展性。当然,后来他们发布了CQL,刚刚的执法褪色,但你可以通过彻底限制选择来驱动正确的用户行为的想法是一个非常强大的。
几个工作后,我加入了一个正在探索这个概念的逻辑极端的团队;我们拥有极其严格的服务配置和配置工具,只允许以非常具体的方式(俗称,正确的方式)运行非常具体的服务形状。我们的客户喜欢,我们的工具始终确保他们以可维护,易于扩展的方式做的事情,并且它不需要他们浪费时间尝试各种工具,他们可以开始工作!
只是在开玩笑。他们反叛了。
挖掘并解释了为什么我们的客户应该做我们的方式而不是他们的方式,但这是令人惊讶的是令人惊讶的,即使在新的方式感觉非常糟糕的情况下,也是如此。传感潮汐转向我们,我们最终得到了符合和建立了一个非常灵活的流行语兼容的服务,允许团队为他们想要的任何编程语言提供任何类型的服务。
一切都是幸福的一段时间,团队做出了关于技术的决定。特别是这种方法,使选择和责任保持一致,在那里选择使用非标准技术的团队最终吸收了大部分额外复杂性。
精心良好,设计良好,我们骑着高,但奇怪的是我们的幸福不会永远持续下去。很快就有另一种正确的方式毕业到正确的方式 - 这与其标称前任相对共同,我们的工具突然有一个新的错误:它太灵活了。
我花了一段时间来弄清楚脱离这些经历的东西,但这些日子总结了我的带走:
设计系统在顶部失败和层策略。
在这种情况下,失败开放即使您发现不受欢迎,也意味着默认允许任何行为。这可能允许用户使用不受支持的编程语言,存储太多的数据,或执行未索引的查询。
然后在顶部分层政策意味着添加强制执行设计行为的过滤器。在上面的示例之后,这将是拒绝您发现不受欢迎的编程语言或库,用户存储太多数据或没有适当索引的查询。
对我的关键洞察力是,足够通用的实现可以永远持续,但故意限制往往会随着时间的推移而迅速发展;如果基础架构维护者希望避免每年或两者重写其系统,那么我们需要能够调整策略来强制执行限制,同时独立维护和提高底层功能。(我有时也将此概念描述为“带防护轨道的自助服务”,对于这些层更有关提供信息规范而不是执行限制。)
就像大多数未经细微的规则一样,我没有发现这是普遍适用的,但我发现它有助于降低工具转型到技术债务的速度。下次您在开发人员的工具上迭代时,请给它一个旋转,看看它的感受。