前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译】《Thinking in Promises》第二章:意图的许可

【译】《Thinking in Promises》第二章:意图的许可

作者头像
崔秀龙
发布2024-01-29 11:22:47
1270
发布2024-01-29 11:22:47
举报
文章被收录于专栏:伪架构师伪架构师

意图性是用于描述目的的,是人类判断的体现。意图是更大视角下的宏伟设计的一部分。我们用这种目的感来丈量我们的生活。意图是一个敏感的问题。目的不会超越观察者的视角——我们就是这观察者。

强扭的瓜不甜

不做任何提醒直接传球,就是一种强加的行为。这里没有用计划好的承诺来提前宣告意图——只是瞄准、投球。接球者很可能不想、或者不能接球。不论怎样,投球者强加的意图,并不会促进接球者的配合。

投球者可能将这种强加视为一种友善的表达——例如将其当成一种邀请的方式。而接球者却可能因为没兴趣做运动、或者忙着别的事情,而将其视为一种打扰。

图 2-1 中,两个参与者做出了投球-接球的承诺,这种承诺可能只是游戏规则的一部分。当然,这种规则可能也是一种强制,但是这种情况下,双方接受了这一规则并且决定承诺遵守规则;还有一种可能:双方共同制定了这一规则。规则只是资源合作的种子。

图 2-1 强加并不意味着强制。自主的代理仍然是可以自愿进行响应(或者不响应)的。图右侧试图表达的是,可能因为不愿意响应或无法响应而导致了承诺无人响应。

用承诺构建你的世界

用承诺而非强加的世界观来审视这个世界,在思考预期结果时,你会很容易看得到其中的优劣。

承诺使用描述预期收益的方式来表达目的。西方文化习惯于使用法律和义务作为主要出发点,而某些东方文化中,则有更多的自主选择。制定法律的历史至少可以上溯到摩西的圣经故事里。因此,你可能不太习惯于用承诺的方式来思考日常事务。然而实际上承诺是无处不在的。

这里列举一些使用承诺思路的描述:

  • 我承诺会去遛狗
  • 我承诺当你不在的时候会去喂猫
  • 我们承诺接受现金支付
  • 我们承诺接受有效的信用卡
  • 我离开时候会锁门
  • 我承诺离开时候不会锁门
  • 在接触食物之前我们一定会洗手

可以用服务承诺来称呼这些例子:这些承诺来自于一个代理人,它对其他人提供了一种潜在的价值。我们会经常回顾服务承诺的概念。服务承诺是有待验证的预期结果。

代理人的代理(Proxy)

得益于人类的聪明才智和转移倾向(有些人可能会说是拟人化),无生命的代理也可以做出承诺。无生命物体经常作为人类意图的代理。因此,将承诺的概念扩展到允许无生命物体和其他实体做出承诺是有用的。考虑以下可能在信息技术世界中做出的承诺:

  • ISP 承诺为固定月费的用户提供宽带互联网服务
  • 安全官承诺该系统符合安全要求
  • 支持人员承诺 24 小时待命
  • 客服承诺 24 小时内对查询做出响应
  • 路标承诺你可以在这里停车
  • 紧急出口标志承诺提供一个出口

这些都是能帮你看清承诺的直白的例子。接下来的举例比较抽象,把承诺转移到一个虚拟的实体上:“客服坐席”:

  • 公司客服承诺在 24 小时内响应服务请求
  • 天气肯定会很好

第二个例子描述了我们如何把承诺的意图转移到我们认为负有联合责任的实体上的活成。更通用的情况是,我们会把承诺转一个某个独立的技术组件。我们会用逐步泛化的方式来对代理进行抽象:

  • 前台的马丁承诺会在早上 7 点叫我起床
  • 前台服务员承诺早上 7 点叫我起床
  • 前台承诺早上 7 点叫我起床。

这个过程中,有命名的个体被一个非生命体取而代之。

类似地,如果有工具是用于实现某种功能的,我们就可以把代理人身份赋予给该工具:

  • 我是一个医生,我承诺会尝试治愈你。
  • 我是一把砍肉刀,承诺能切开肉块。
  • 我是一个逻辑门,承诺能在 TRUE 和 FALSE 之间进行转换。
  • 我是一个变量,承诺表示一个值为 17 的整型值。
  • 我是一个命令行处理器,承诺接受输入并执行来自用户的命令。
  • 我是一个路由器,承诺接收来自 IP 白名单的数据包。
  • 我是一个合规监控组件,承诺根据系统配置和策略来检查并自动修复系统状态。
  • 我是一个高可用服务器,承诺为你的服务提供 99.9999% 的可用性。
  • 我是消防局,承诺你拨打 911 之后会来救你。

从上面的例子,我们可以看到承诺的普遍性。事实上日常生活中的承诺比比皆是——从平时的衣着,到技术领域都能看得到。把工程规范的声明视作承诺也是有意义的,当然我们通常不这么觉得。

请尝试用承诺来表达你的问题。

承诺的代理是什么

环顾四周,看看身边都有什么(谁)在做出承诺:

  • 同学或者朋友。
  • 你所在的组织。
  • 路标。
  • 药品。
  • 桌子
  • 不粘锅
  • 窗户
  • 雨衣
  • 地板
  • 墙壁
  • 你正在阅读的书籍
  • 电插座

我们能做出什么承诺

什么可以作为承诺的主语呢?按照结果不同可以是:

  • 一个功能或者服务
  • 一种价值判断
  • 使用某物的授权
  • 行为(规则、法律)
  • 时机
  • 地点
  • 布局或配置

什么东西能被承诺

有意义的承诺是指我们知道可以实现(即,达到某种状态并维持)的事情。

  • 状态、安排或配置,如布局
  • 幂等操作(一次性发生的事情): 删除文件,清空垃圾桶
  • 规律的、稳定状态或连续变化: 恒定速度
  • 已经发生的事件

什么东西不能承诺

我们已经提到,自主的基本规则是:代理不能对除自身之外的任何人或任何事做出承诺。这是一个简单的经验规则。如果它这样做了,就违背了信任,另一个代理有权拒绝这个承诺,并会因为这种臆测,贬低承诺者的声誉。

例如,一个经理可能试图承诺她的团队将在截止日期前交付一个项目。如果她诚实,她会在团队合作的基础上做出这个承诺,否则这实际上是对她团队的强加(无论他们是否知情)。这甚至可能是谎言或欺骗(承诺的黑暗面)。如果没有她团队每个成员的承诺,她无法知道他们是否能在截止日期前完成项目。如果这听起来愚蠢,请再想一想。科学的目标是现实主义,而不是不切实际的权威。强加不会带来确定性;我们信任的承诺是一种最好的猜测。

还有其他限制吗?

对于绝对的变化做出承诺是容易的——左转弯、翻一面这样的相对变化就不合适了。技术上来说,这种(相对变化)是命令式的、非幂等的。我们做出这种变更时是无法预见其最终结果的。如果我们只是谈论动作,我们如何校验其保持情况呢?我们翻了多少次?什么频率呢?

实际上任何人可以做出任何承诺,就像在蒙提·派森的小品《Stake Your Claim!》中,参赛者承诺:“我声称我能从大象身上穿过去!”和“我声称我写了所有的莎士比亚剧本,我和我的妻子一起写了他的十四行诗。”这些事情,形式上是承诺。然而,它们显然是欺骗,或者彻头彻尾的谎言。谎言会降低承诺的价值。

公正的做法应该是把问题留给其他代理进行评估,但有一些基本的事情是这世界所承诺的,这样就允许存在一些经验性的规则。

一个承诺的最低要求大概是:承诺者和承诺结果之间存在某种因果联系,这才能履行承诺(做出合理承诺)。因此,承诺喂猫是可行的,但承诺创造所在的宇宙,就不合理了。

承诺的生命周期

承诺的生命周期由发出意图到结果所经历的一系列状态组成(如表 2-1 所示)。承诺的生命周期可以从做出承诺的代理人角度来观察(图 2-2),也可以从承诺的角度来观察(图 2-3),甚至还可以从承诺范围内的其它代理人角度来观察。

承诺状态

描述

发起

承诺已经被形成,但是还没实现

发布

在承诺范围内发布承诺

发现

已经发布的承诺,被相关代理人发现

未知

承诺被发布,但是后果未知

履行

承诺被评估已经实现

未履行

经过评估,承诺尚未实现

毁约

经过评估,承诺被违背

撤回

发起方撤回了承诺

过期

承诺过了有效期

无效

最初的允许承诺被履行的条件发生了承诺者无法控制的变化

结束

承诺不再存在

一旦承诺被打破或以其他方式进入其结束状态(作废、过期等),其生命周期就结束了,必须通过新的承诺来描述关于该主体的其他意图。

图 2-2 承诺的生命周期

如果从承诺接受者或范围内的其他外部代理的角度来看,会看到一个类似的生命周期,不同之处在于,其它代理人只能在承诺发布之后才能发现。

图 2-3 承诺的生命周期

履行承诺

履行承诺意味着什么?时间线是什么?什么时候算是履行了承诺?需要发生多少事件?需要发生什么?承诺的生命周期是什么?这可能意味着在代理的世界中某个基本状态已经改变或被保留,或者其状态已经被维持或保存。世界的配置衡量承诺的结果。结果对代理也有价值。这些都是任何知道承诺的代理需要做出的评估。代理可以根据自己的标准以不同的方式评估承诺。一个代理认为的承诺履行,可能会被另一个代理拒绝。

合作:给予和接受的极性

当承诺不是双向的时候,合作关系有瓦解的危险,我们应该保持警惕。如果不是出于相互的意图,为什么一个代理会对另一个代理感兴趣?这是潜在不稳定的一个标志。这初看起来平凡且仅限于人类的局限,但即使是机械也是以这种方式运作的。物理学本身就内置了这样的机制。

在现实中,承诺和强加总是从某个自主代理的主观视角来看待的。并不存在一个自动化的“上帝视角”来知晓所有代理所知的一切。我们可能称这种主观视角为代理的“世界”。在计算机科学中,我们将其称为分布式系统。承诺对于这个世界有两种极性:在代理来说,就是向内或向外。

  • 承诺或施加给予某事物(从代理人向外)
  • 承诺或施加接受某事物(向代理人)

在数学语境中,我们用正负符号来形容这种极性,就好像它们是电荷一样。用例子很容易形象化这些差异:

  • 一个(+)承诺(给予)可以是:“我承诺给你一个玫瑰园,”或者“我承诺在 25 端口提供电子邮件服务。”
  • 一个(-)承诺(使用/接受)可以是:“我接受你的结婚提议,”或者“我接受你的数据承诺,并将你添加到我的访问控制列表。”
  • 一个(+)强加(给予)可以是:“你最好给我你的午餐钱!”或者“你最好给我这个DNS域的地址!”
  • 一个(-)强加(使用/接受)可以是:“接住这个!”或者“处理这笔交易!”

对于供应链中一个代理做出的提供某事物(称之为 X )的每一个承诺,下一个代理必须承诺使用结果 X 以向下一个代理承诺 Y,依此类推。必须有人接收或使用被提供或给予的服务(标记为“-”的承诺),即被标记为“+”的承诺。因此,存在一种简单的意图对称性,其极性像电池一样驱动系统中的活动。然而,链条是脆弱的:每个代理都是一个潜在的失败点,所以我们尝试构建短层级的合作体。实际上,大多数组织不是链条,而是承诺的网络。

如果一个代理承诺给予某物,这并不意味着接收代理承诺接受它,因为那将违反自主原则。这也适用于一个代理对另一个代理施加影响,例如给予某物(请为我们的慈善机构捐款),或接收某物(你真的必须接受我们的慈善)。这些都不需要影响被施加这些建议的代理,但人们仍然可以尝试。

正负对称意味着每个问题都有两个视角。你可以练习翻转这些视角以更好地理解系统。

承诺的约束力有多大?

作者向编辑承诺输出 10 页内容,而编辑承诺仅接受 5 页。可能的结果是只印刷 5 页。同样,如果作者承诺写 5 页,而编辑承诺印刷 10 页,可能的结果是 5 页,虽然如果有一个关于全部或无的附加条件,结果可能是零。如果个人电脑有一个千兆网卡,但墙壁插座只承诺提供 100 兆,那么约束将是 100 兆。

承诺与信任是共生的

我们对做出承诺的代理人有多信任,承诺就有多有用。同样地,我们可以从各种意义的层面上,讨论对承诺有效性的信念。在一个没有信任的世界中,承诺将完全无效。

承诺构成的世界可能会让部分人感觉无法安心。特别是,“精确科学”的信徒习惯于使用表面客观的术语描述世界,涉及人类主观评价的概念,会被他们的直觉否定。然而,承诺的作用是提供一个框架,用于减少关于某些事件结果的不确定性,而不是提供保证或某种对确定性的坚持。在许多方面,承诺的作用就像自然界的现代理论,其中虽然内置了不确定性,但是也并没有牺牲预测的能力。

提升确定性

承诺最好能够用清晰的方式来进行表达预期结果。不清晰的承诺,其价值会降低。承诺的成功在于能够对事物的意图做出断言。

自主原则意味着我们总是从独立的对象开始,看看如何将它们聚集在一起。这种自下而上的策略将许多较小的事物组合成一个更大的、更宏观的事物群体。这种粗粒度处理提高了确定性,因为你最终得到的事物更少,事物的细节也更少。缩小了结果空间。

而我们习惯的是用一种分而治之的策略进行自上而下地思考。这是一个不断分支的过程,很明显是与聚合思路背道而驰的。它从一个根或出发点开始,呈指数级分散成大量结果。在一个指数级分散的结果空间中,还说什么确定性?

为了让承诺应该毋庸置疑(见第6章)。只要承诺不相互重叠,就可以共存。避免代理之间的冲突可以为群体带来确定性。归根结底,承诺理论使得冲突解决变得简单。

因为代理是自主的,只能承诺自己的行为,它们不能强加结果给其他代理(强加尝试这样做,但至少在原则上可以被忽视)。

如果单一代理做出了两个冲突的承诺,因为它拥有承诺所需的所有的信息,控制承诺所需的一切因素,所以它有解决冲突的能力。

如果代理接受或使用两个相冲突的承诺,因为接受两个承诺,他有权判断并做出终止某个承诺的决策。

换句话说,自主性策略聚合了所有的信息。自主性使信息变得本地化。从而带来更好的确定性。

一些练习

  1. 看看承诺中的 +- 的例子。 每个 + 对应的 - 是什么? 或者反过来看呢?
  2. 接下来想象一个 IT 项目,为你的最新版软件构建一个服务集群。 这个思想实验的目的是,尝试用违背因果关系的方式来进行预测。
    • 你如何为服务器集群设置需求呢? 例如你会从使用预期出发么? 或者从成本限制的角度考虑? 这能帮你设计服务集群架构么? 从这些输入你如何决定硬件的购买呢?
    • 放开需求不谈,我们再看看服务器和网络设备的目录。 看看这些设备的规格——这也算是承诺。 对于这些承诺,你能够确定要购买的硬件么? 你如何预测这些硬件能够交付的服务水平? 这会让你修改你的架构设计么?
    • 我们再走向反面,重写目录中的硬件承诺,以此作为需求。 这样合理了? 有没有可能会需要目录中的两倍硬件? 这样你又怎样满足需求呢?
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 强扭的瓜不甜
  • 用承诺构建你的世界
  • 代理人的代理(Proxy)
  • 承诺的代理是什么
  • 我们能做出什么承诺
  • 什么东西能被承诺
  • 什么东西不能承诺
  • 承诺的生命周期
  • 履行承诺
  • 合作:给予和接受的极性
  • 承诺的约束力有多大?
  • 承诺与信任是共生的
  • 提升确定性
  • 一些练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档