OT:幂等,收敛,以及其他我们经常使用的愚蠢的花哨词汇

        有点 OT,但我认为许多来自某些其他工具的人可能不知道这个词的意思,并经常说它:) 我已经看到它在 bug 报告中出现相当数量,“X 不是幂等的”,等等,在 86.2% 的事件中,“幂等”这个词被错误地使用了。

        这个词的意思是一个操作是可重复的。

        在数学中,它的意思是 F(x) = F(F(x)) 就是这样。

        我们的模块都是可重复的,所以这么频繁地使用这个词并不是很有趣。

        一个更有趣的特性是,不管期望的状态如何,一个模块是否能让你达到期望的状态。

        这多少有点关系,但并不是完全相同的事情。

        这就是为什么微软将他们的配置工具命名为“期望状态配置”,而不是“幂等状态配置”(然而,尴尬的产品名称!抱歉,伙计们!)

        经典的类比是开车穿越全国。如果我想去加利福尼亚,从北卡罗来纳州向西开车就能到达那里,从提华纳向北开车就能到达那里。但你不会在你的自动化中输入“向西行驶”,因为你不确定你是从北卡罗来纳州还是墨西哥开车。 这个属性中的等幂是指,如果你再次运行“开车去加利福尼亚”,当你到达加利福尼亚时,你会停止驾驶。更重要的属性是,你能指定位置并让它带你去那里。 如果模块中有一个 bug,而你最终到了缅因州,这个 bug 不是“驾驶模块不是等幂的”。这个 bug 是“驾驶模块中有一些疯狂的混乱逻辑”。

        我认为“等幂”不知何故已经成为新的对话中的“嗯”,人们喜欢把它插入许多句子中,让事情听起来复杂。不要这样做! 这个期望状态的东西有时也被误称为“收敛”。

        收敛通常意味着如果我运行这个过程 4 或 5 次,它就会到达我想要的地方。

        太可怕了,你想一步到位!为什么你想要一个一次只解决一半问题的模块或系统? 不管怎样,收敛就像“开车去加利福尼亚——好吧,你在内华达州——开车去加利福尼亚——好吧,你在加利福尼亚”。不,你不希望事情收敛,你希望它按照你说的去做。

         我认为这个行业有点困扰于这样一个想法,简单的事情必须用复杂的术语来谈论,而Ansible不是那样的。

        我们的目标很简单——用简单的英语说话。把事情做好。

        因此,如果你看到我收到一封学术邮件或错误报告时有点生气,这就是原因。

        这就是我们(作为一个项目)的想法。我们希望谈论计算机,让事情变得简单,而不是更难。 是的,期望状态,等幂,我们有软件系统的这些属性。

        不过它们是无趣的属性。什么有趣? 把工作做好! 我想我的总体观点是,出于一些疯狂的原因,让计算机变得难以谈论是有风险的。

        计算机已经很困难了。我对世界的挑战是简单地谈论它们。

        当我们从其他配置工具吸引用户时,鼓励简单的对话。计算机已经足够复杂了。

原文:

Somewhat OT, but I think lots of people coming from certain other tools might not know what this word means, and are saying it too frequently :)  I've seen it crop up in bug reports a fair amount, "X is not idempotent", etc, and in 86.2% of the occurances, the word "idempotent" is being used incorrectly.

All this word means is an operation is repeatable.

In math, it means F(x) = F(F(x))

That's it.

Our modules all are repeatable just like that, so it's not really interesting to use that word so much.

A more interesting property is does a module get you to the desired state you want to be in regardless of the desired state.  That's somewhat related, but not quite the same thing.   This is why Microsoft named their configuration tools, quite uninterestingly, "Desired State Configuration", not "Impotent State Configuration".  (However, awkward product name!  Sorry, guys!)

The classic analogy is driving across the country.  If I want to get to California, driving west from North Carolina gets me there, driving north from Tijuana gets me there.  But you don't put "drive west" in your automation because you are not sure if you are driving from NC or Mexico.  

The idempotence in this property is that you stop driving when you get to California if you run the "drive to California" routine again.  The more important property is can you specify the location and have it get you there.

If there was a bug in a module and you ended up in Maine, the bug is not "driving module is not idempotent".  The bug is "driving module has some crazy messed up logic in it".  

I think "idempotence" has somehow become the new "um" of conversation, and folks like to insert it in many sentences to make things sound complicated.  Don't do that!  :)

This Desired State thing also gets mislabelled from time to time as "Convergence".  Convergence typically means if I run this process 4 or 5 times it gets to where I want to be.  Terrible, you want to get there in one hop!   Why do you want a module or system that only fixes half of the problem at a time?  Anyway, meh.  Convergence would be like "drive to California -- ok you are in Nevada -- drive to California - ok, you are in California".  No, you don't want stuff to converge, you want it to do what you say.

I think the industry is plagued a bit with the idea that simple things must be talked about in complicated terms, and Ansible is not like that.

Our goals are simple -- Speak in plain English.  Get stuff done.

Thus, if you see me bristle up a little bit when I get a academic email or bug report, that's why.

It's how we (as a project) think.  We want to talk about computers and make things easy, not harder.

Yes, desired state, idempotence, we have those properties of software systems.  They are uninteresting properties though.  What's interesting?  Getting work done!  

I guess my general point is there's a risk -- for some crazy reason -- to make computers hard to talk about.  Computers are already hard.  My challenge to the world is to talk about them simply.

As we attact users from other configuration tools, encourage simple dialog.  Computers are complicated enough already.

转自:https://groups.google.com/g/ansible-project/c/WpRblldA2PQ/m/lYDpFjBXDlsJ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/254390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iPhone16:首款AI iPhone?

随着科技水平的不断发展,智能手机逐渐成为人们最依赖的电子产品之一。为能够满足用户需求,手机的硬件、外观设计与性能飞速提升,这也导致智能手机市场快速进入到瓶颈期。 为了能够带来更优秀的表现,苹果可能会为iPhone 16系列带来…

中国首家!腾讯云入选Gartner®视频平台服务市场指南代表厂商

近日, Gartner正式发布《Market Guide for Video Platform Services》(《视频平台服务市场指南》,下称“《指南》”),凭借领先的音视频技术和产品组合优势,腾讯云成为中国首家且唯一入选的代表厂商。 腾讯…

GZ015 机器人系统集成应用技术样题8-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书(学生赛) 样题8 选手须知: 本任务书共 25页,如出现任务书缺页、字迹不清等问题,请及时向裁判示意,并进行任务书的更换。参赛队…

Vue学习笔记-Vue3中的customRef

作用 创建一个自定义的ref&#xff0c;并对其依赖项的更新和触发进行显式控制 案例 描述&#xff1a;向输入框中输入内容&#xff0c;在下方延迟1秒展示输入内容 代码&#xff1a; <template><input type"text" v-model"keyword"><h3&…

力扣刷题记录(15)LeetCode:509、70、746

目录 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯 总结 ​​​​​​ 用一个数组来存储前两个数的值&#xff0c;然后根据前两个数的值来确定当前的值。 class Solution { public:int fib(int n) {if(n<2) return n;vector<int> v;v.push_back(0);v.push…

3 使用postman批量创建测试数据

上一篇:2 使用postman进行接口测试-CSDN博客 在软件测试实际工作中,因测试需要,我们要批量创建测试数据。如果某些接口不允许输入重复数据,我们在做批量请求时就要做参数处理了。 比如在上一篇介绍的用户注册接口,一般注册的时候用户名是不允许重复的,如果要批量创…

8.完成任务实现的SDK封装及插件式加载

1.设计 任务的实现目前完成了Modbus RTU、Modbus TCP、Virtule。任务实现应该是任意的&#xff0c;比如打印一段话&#xff0c;执行一句SQL等&#xff0c;所以系统内部的必然要做到可扩展。 要做到可扩展&#xff0c;首先第一步就是定义标准&#xff0c;所以我们首先需要封装…

FA1210AN (MHz范围晶体单元超小型低轮廓贴片)

FA1210AN体积小&#xff0c;高度低&#xff0c;设计人员可以在不影响性能的情况下节省板空间。这对于那些限制功能和尺寸的设备和模块来说是必不可少的。 宽MHz范围的频率服务于流行的&#xff0c;无线通信协议&#xff0c;理想的消费者和工业物联网应用。应用程序&#xff1a…

第15章 《乐趣》Page375~379定时器,定时回调,定时回调线程id, 停止后续定时

运行效果&#xff1a;在骏马窗口中&#xff0c;按下ctrl t 键&#xff0c;就可以看到定时回调&#xff0c;同时可以看出timer_callback和main()真的不在同一线程中运行 代码如下&#xff1a;仅给出main.cpp, 其他的头文件和源文件和Page355~375的代码一样&#xff0c;可参看上…

【C语言】数组(一维)详解,手把手教你,保姆级!!!

目录 数组的概念 数组的创建 数组的初始化 数组的类型 数组使用下标 数组的打印 数组的输入 数组的储存 总结 数组的概念 数组是⼀组相同类型元素的集合&#xff1b; 从这个概念中我们有3点拓展&#xff1a; 1&#xff0c;数组中存放的是1个或者多个数据&#xff0c;但…

4.raft协议及简化版raft协议

1.Raft协议介绍 这篇文章&#xff1a;百度安全验证 讲的比较详细了&#xff0c;我再以我的方式汇总一下&#xff1a; Raft协议是一种分布式一致性协议&#xff0c;比Pasox简单&#xff0c;旨在解决数据的一致性和高可用性Raft在选举中的方式&#xff1a; 所有节点相互建立连…

什么是磁钢的工作点和Pc值?如何计算Pc值?

永磁体是在开路状态下工作的&#xff0c;由于开路状态的磁体是在退磁场的作用下&#xff0c;所以工作状态下的永磁体的磁感应强度不在闭路状态的Br点上&#xff0c;而是在比Br低的退磁曲线上的某一点&#xff0c;这一点称为永磁体的工作点&#xff0c;如下图D点。 工作点与退磁…

【C语言】操作符详解(四):结构成员访问操作符

目录 结构成员访问操作符 结构体 结构体的声明 结构体变量的定义和初始化 结构成员访问操作符 结构体成员的直接访问 结构体成员的间接访问 结构成员访问操作符 结构体 ⭐C语言已经提供了内置类型&#xff0c;如: char、short、int、long、float、double等&#xff0c;但…

备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

MySQLhttps://www.mysql.com/ 将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码&#xff0c;使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变&#xff0c;同时添加静态分区&#xff0c;分区字段为etl_da…

提高软件交付速度的6种架构策略

本文向您展示如何评估软件交付性能&#xff0c;并向您介绍可用于提高软件交付性能的六种策略。 如何评估软件的交付速度 软件交付速度能够促进业务发展&#xff0c;那么我们如何评估软件的交付速度呢&#xff1f;主要有以下4个指标 一个功能从开发到上线运营使用需要多久&#…

代码随想Day39 | 62.不同路径、63. 不同路径 II

62.不同路径 每次向右或者向下走两个选择&#xff0c;定义dp数组dp[i][j] 为到达索引ij的路径和&#xff0c;状态转移公式为 dp[i][j]dp[i-1][j]dp[i][j-1]&#xff0c;初始状态的第一行和第一列为1&#xff0c;从左上到右下开始遍历即可。详细代码如下&#xff1a; class Sol…

问卷调查结果分析指南:方法与技巧解析

问卷调查是一种常见的数据收集方式&#xff0c;广泛用于市场调研、科研、员工幸福评估等各个领域。但是&#xff0c;问卷的数据收集只是第一步&#xff0c;分析这种数据至关重要。问卷调查该怎么分析结果&#xff1f;首先要进行数据清理&#xff0c;然后对数据展开叙述&#xf…

基于Java Web的“大学生艺术节”管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对“大学生艺术节”方面的信息管理混乱&#xff0c;出错率高&#xff…

自动化测试Selenium node 配置

查看自己chrome浏览器的版本 下载chromedriver对应版本&#xff0c;下载当前版本中最大版本。 https://npm.taobao.org/mirrors/chromedriver 安装java jdk &#xff0c;版本至少1.7, 并配置jdk环境变量 以下2个文件放在同一个目录下 Cmd地址切换到第四点目录下&#xff0c;然…

Spark基础入门

spark基础入门 环境搭建 localstandlonespark ha spark code spark corespark sqlspark streaming 环境搭建 准备工作 创建安装目录 mkdir /opt/soft cd /opt/soft下载scala wget https://downloads.lightbend.com/scala/2.13.12/scala-2.13.12.tgz -P /opt/soft解压scala…
最新文章