有舍才有得

作者:比尔·德·霍拉(Bill dehora)

有时,接受某种约束或放弃某个特性,可带来更好的架构,这种架构在构建(build)和运维(run)上都会更加简单,而且成本更低。假设期望的理想特性有3种,试图定义和构建支持所有这3种特性,则可能一无长处。

一个著名的例子是布鲁尔猜想(Brewers's conjecture),也被称为一致性(Consistency)、可用性(Availability)和分区(Partitioning),即CAP定理。该定理指出,在分布式系统中通常期望的3个特性,即一致性、可用性和分区容错性(partition tolerance)是无法同时获得的。试图同是拥有三者,将大幅增加工程费用,显著提高复杂度,也无法真正获得预期效和实现业务目标。如果数据必须是可用和分散的,强求一致性会不断增加成本,最终将无法达成目标。同样,如果系统必须是分布和一致的,则确保一致性首先将会导致延迟和性能问题,因为系统在各部分未同步之前无法提供服务,它最终是无法使用的。

人们常常认为有某个或多个特性是不容侵犯的(inviolate):数据是不能重复的,所有的写入都必须是事务性的,系统必须100%可用,调用必须是异步的,必须设有单点故障,所以一切必须都是可扩展的,等等。除天真幼稚之外,如果将这些特性奉为不容侵犯的教条,你将无法对手头的问题开展真正的思考。我们要谈论的是架构设计上的偏移(architectural deviation),而不是原则层面上的设计,我们惑于教条主义的统治束缚久矣。相反,我们应该问,为什么必须要持有这些特性?这样做可以获得什么好处?何时才期望拥有这些特性?如何能打破系统成规以达成更佳的效果?永远不要放弃质疑,因为架构设计的教条往往从根本上削弱了交付能力。这种权衡不可避免,它是软件开发中最难以应对的事情之一,这不只对架构师而言,即使对开发人员和利益相关者也是如此。但是,我们应当珍惜这种权衡,它们远胜毫无限制的可选项,并且,接受一些权衡,往往能产生富有创造性和创新性的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值