ACM
BLOG@CACM

企业度量和优化


来自onada的Doug Meil"src=

收集和发布度量对于任何组织都是重要的,有许多框架选项,如Ganglia、Prometheus和ELK (Elastic、Logstash、Kibana)堆栈用于这些任务。与度量对于理解当前状态一样重要的是,收集和发布只是第一步,下一步是度量解释要了解一个指标是正的还是负的,然后最后确定这个过程要用什么指标优化

让我们买一个动物园的例子

要说明这一点,一个有用的具体例子是动物园,这是大多数读者应该熟悉的。假设我们想让这里成为“最好的”动物园,那该如何衡量呢?即使是瞄准“最大”的荣誉也很复杂。当然,尝试增加访问者和收入指标是一个很好的开始,但前提是吸引增加是有原因的——这种类型的增长通常不是凭空产生的,营销不是免费的。在其他“最大”指标方面,动物园可以实际扩张,但“容量平方英尺”包括停车场吗?就目前而言,每个指标都是有效的,但每个指标还需要为进一步的上下文添加其他指标。

这也是可能的当试图改善一个指标时进行优化,比如增加“动物数量”选择包括增加几只狮子,一些熊猫,或者50万只蚂蚁。虽然把每只蚂蚁都算作一种动物显然是一种廉价的数字伎俩,毫无疑问忽视了这种度量的真正意图,但软件行业集体计算蚂蚁的时间比许多人可能意识到的要长——有时是偶然的,有时是有意的。

软件工程中的蚂蚁计数

计算软件的蚂蚁

正如Robert X. Cringley在20世纪90年代早期的书《偶然的帝国》和他的纪录片《书呆子的胜利》中所描述的那样,IBM可能并没有创造“KLOC”(千行代码)的度量标准,但它在一段时间内把它变成了一种信仰。软件项目是用KLOC来估算、评估和支付的。由于代码是软件工程过程的输出,所以想要计算它并不是不合理的,但是附加一个意义就像很多人以前注意到的那样,代码行是事情变得棘手的地方。如果KLOC变大了,那说明有进展,但如果KLOC变大了较低的情况变好了还是变坏了?如果有人清理代码库并删除和重构冗余,情况可能会更好。使问题更加复杂的是,对于相同的任务,不同的编程语言的代码计数可能不同,而且现代系统使用多种语言编写的情况并不少见。最重要的是,开发人员可以通过以不同的样式编写代码来解决这个问题,例如扩展到非常广泛的范围,其中度量“代码字符”可以比“代码行”提供更多的信息。

功能点是IBM在1979年创建的,作为一种尝试测量系统复杂性的方法已经存在了几十年,但是基于上述所有原因,计算代码行数。但即使是最初的研究论文也承认,功能点与他们试图做的事情高度相关使用。多年前,当我接触到一个项目的功能点时,我也有过同样的经历。我们记录了屏幕、输入和输出,但随后我也回想起每个按钮背后相对复杂点的代码量。

一位朋友曾经告诉我,在他的公司有一个生成“可重用代码”的计划,生成这种代码的人会得到表扬和奖金。一些软件工程师突然开始生成一系列一行函数来提高代码的可重用性,因为所有这些小函数理论上都可以被某些人重用。更小更高效的代码库的意图并没有错,但强调的只是代码的可重用性作家而不是可重用的代码用户这也注定了这一努力走向失败。

计算数据的蚂蚁

在过去的十年里,大数据进入了公共词汇,谈论数据大小变得流行起来。越大越好,至少在会议上给人留下深刻印象方面是这样。但我曾经有过一次谈话,有人说“我们有100 TB的数据”,好像这是一件坏事,好像这就是谈话的结束一样重要。拥有100 TB的内存是一个事实,一个数据点,但是如果没有进一步的上下文,这既不好也不好。我们无法从这个数字中得知包含了多少个环境(例如,生产、QA等),这是什么样的数据(结构化的还是非结构化的),这是否只包含当前版本还是历史副本,数据在什么存储介质上持久化,价格如何,这些都是问题的起始列表。就目前而言,指标就是指标,但解释需要大量后续工作。它是一种艺术。值得思考的是,如果同一个人第二天突然只有50tb的数据,也许是在一个按键中,他会作何感想。情况是变好了还是变坏了?

虽然现在大数据已经不像以前那么常见了,但我也有过不少这样的对话,有人试图狭义地定义大数据,其笑点是哦,那不是大数据”——一个真正的书呆子的奚落。确实,有些数据用例比其他数据大,但我一直认为,如果存储、处理或数据服务的需求超过了一台计算机,那么就该用例而言,这就是大数据问题,而不考虑其他主要技术公司如何对其进行分类。

举个例子,2015年,我有幸请IBM 2011年Jeopardy项目的一位系统工程师为我主持的大数据聚会做了一场精彩的演讲。爬虫文档(尤其是维基百科)的主输入语料库约为50gb。有些人认为,这不是大数据。在为搜索建立索引和优化数据之后,再加上添加一些其他补充源,数据占用空间扩大到500 GB。一些人认为,这可能不是大数据。现在考虑到Jeopardy游戏系统需要一致的亚秒级响应时间,所有索引和优化的数据最终会在90个服务器上分片。我将其称为大数据用例,尤其是在它所处的时代。

计算货币蚂蚁

说到狭义定义,“金钱是万恶之源”是新约中经常出现的错误引用。金钱可以用于获取食物、住所和资助其他必需品,如工资和云计算费用。在上面,如果没有钱,就没有动物园。提摩太前书6:10的原话是爱钱是万恶之源吗金钱本身并不是“问题”,而是强调金钱高于一切,包括其他员工或公众的安全。

波音737 MAX坠机事件在执行层面是一个技术和软件问题。在737 MAX中引入的MCAS(机动特性增强系统)被宣传为与737NG向后兼容,不需要任何额外的飞行员培训,最终成为问题的根源,而不是解决方案,带来了灾难性的后果。2021年1月通信文章波音737 MAX:管理的失败,不仅仅是技术的失败是一个关于这个话题的好帖子。

和大多数复杂的问题一样,这个问题的起源可以追溯到许多年前,特别是1997年波音和麦道的合并。2020年1月石英文章“1997年的合并为波音737 Max危机铺平了道路”直指问题的核心:

在一场企业文化的冲突中,波音公司的工程师和麦道公司的会计们针锋相对,而这家规模较小的公司最终胜出。其结果是,苹果放弃了昂贵的突破性工程设计,转向了一种被一些人称为更残酷的文化,致力于降低成本,并以牺牲大规模创新为代价升级老款车型。直到现在,随着737无限期停飞,我们才开始看到其影响的规模。”

波音又不是没有升级。甚至传说中的747也经历了-200、-300和-400系列的“发布”,在最初的747-100之后,找不到更好的词了。而这一切都发生在麦道公司合并之前。不过,我敢打赌,当时波音的客户知道他们每次升级都能得到什么。

从金钱和生命的角度来说,首先要做正确的事情,提前提供737 MAX飞行员培训,成本必须更低,我相信现在已经有人做过这些计算了。为什么这条路不明显?因为很多人都在优化错误的内容。首先考虑的是数钱,但远远不够考虑机组人员和乘客的安全。

最后

指标至关重要;没有它们,你就是在瞎飞。但要注意你试图优化的内容,因为你可能会得到它。

参考文献

代码的蚂蚁

Robert X. Cringley -意外帝国https://www.cringely.com/tag/accidental-empires/

关于比较不同语言间的代码行数:http://www.projectcodemeter.com/cost_estimation/help/GL_sloc.htm

功能点:https://en.wikipedia.org/wiki/Function_point

货币的蚂蚁

1997年的合并为波音737 Max危机铺平了道路,石英2020年1月,https://qz.com/1776080/how-the-mcdonnell-douglas-boeing-merger-led-to-the-737-max-crisis/?utm_source=pocket-newtab

众议院交通委员会,737 MAX调查,2020年9月,https://transportation.house.gov/committee-activity/boeing-737-max-investigation

737 MAX:管理的失败,不仅仅是技术的失败,通信2021年1月,//www.eqigeno.com/magazines/2021/1/249448-boeings-737-max/fulltext

落幕:针对波音、Netflix的案件,2022年,https://www.netflix.com/title/81272421

道格·梅尔是安大略省的一名投资组合架构师。他还在2010年创立了克利夫兰大数据Meetup。更多Doug的ACM文章可以在下面找到https://www.linkedin.com/pulse/publications-doug-meil


没有发现记录

登录为完全访问
»忘记密码? *创建ACM Web帐户
Baidu
map