Python DevOps 指南(八)
原文:
annas-archive.org/md5/68b28228356df0415ddc83eb0aaea548译者:飞龙
第十六章:DevOps 战斗故事和面试
作者:Noah
当我在加利福尼亚州圣路易斯奥比斯波的最后一年大学时,我需要在夏季修完有机化学才能按时毕业。不幸的是,夏季没有财政援助,所以我不得不租房并找份全职工作。我能在图书馆找到一份时薪工作,但这还不够钱。我搜遍了招聘广告,唯一出现的工作是一个大型乡村西部夜总会的门卫。
在我的面试中,面试我的经理大约有六英尺高,近三百磅的肌肉大部分。他还有一个巨大的黑眼圈。他告诉我,上个周末一大群人殴打了所有门卫,包括他在内。他告诉我,这是我和田径队的铅球手之间的竞争。为了帮助决定我和铅球手之间的竞争,他问我是否会在类似的斗殴中逃跑。我告诉他我不会逃避打架,然后我得到了这份工作。
后来我开始意识到,我在评估我的勇气和能力时可能有些天真。一些大力士和橄榄球运动员经常来这里打架,他们是可怕的人物。在一场音乐会上,他们叫来了后援,因为他们预料到会有麻烦。一个有着鹰嘴式发型和头上刺着中文的门卫是那个事件的我的同事。几年后,我在电视上看到他赢得 UFC 重量级冠军,并把名字和面孔对应起来,那人就是查克·利德尔。保镖是一份危险的工作。这一事实在有一天变得明显,当我试图制止一场醉酒的 250 磅重的橄榄球运动员在殴打一个受害者的脸时。我想拉他开,但结果被他轻而易举地甩开了好几英尺,就像他在轻松地打一个靠在房间对面的枕头一样。在那一刻,我意识到我并不无敌,而我的武术技能根本不存在。我从未忘记那个教训。
描述这种过度自信的一种方式是邓宁-克鲁格效应。邓宁-克鲁格效应是一种认知偏差,人们错误地评估自己的认知能力比实际更重要。你可以在每年的 StackOverflow 调查中看到这种效应。2019 年,70%的开发者认为自己高于平均水平,而 10%的人认为自己低于平均水平。这里的教训是什么?不要相信人类的认知!相信自动化!“相信我”,“我是老板”,“我已经做了 X 年”,以及其他自信的陈述与正确执行的自动化的残酷效率相比,都是无稽之谈。相信自动化优于等级制度,这就是 DevOps 的全部意义。
本章通过使用真实人物和真实案例研究,将书中关于自动化的一切联系起来,探索了 DevOps 的最佳实践:
-
连续集成
-
持续交付
-
微服务
-
基础设施即代码
-
监控和日志
-
沟通和协作
电影工作室无法制作电影
在新西兰为电影《阿凡达》工作了一年后,我心境非常平静。我住在北岛一个名叫米拉马的小镇,那里是一个令人惊叹的美丽半岛。每天早上,我会从家门口走出去沿着海滩跑上 14 公里。最终,合同到期了,我不得不找新工作。我接受了湾区一个大型电影工作室的职位,那里有数百名员工,工作场所占地十多万平方英尺。这家公司投资了数亿美元,看起来是一个很酷的工作地方。我周末飞来,星期天抵达(工作日前的一天)。
我工作的第一天相当震惊。我从天堂般的心境中猛然醒来。整个工作室瘫痪了,数百名员工因为核心软件系统——资产管理系统——无法工作。在恐慌和绝望中,我被带进了秘密的战斗室,并展示了问题的严重程度。我可以感觉到我在沿着海滩悠闲奔跑的平静日子结束了。我进入了一个战区。天哪!
随着我对这场危机的了解加深,显而易见,这已经是一个慢慢燃烧的大火已有一段时间了。整天的停机和严重的技术问题成为常态。问题清单如下:
-
系统是在没有代码审查的情况下独立开发的。
-
没有版本控制。
-
没有构建系统。
-
没有测试。
-
有超过一千行的函数。
-
有时很难联系到负责项目的关键人员。
-
停机很昂贵,因为高薪人员无法工作。
-
电影鼓励不负责任的软件开发,因为他们“不是一个软件公司”。
-
远程地点存在神秘的连接问题。
-
没有真正的监控。
-
许多部门为问题实施了临时解决方案和补丁。
这一系列问题的唯一解决办法就是一次做一件正确的事情。新组建的团队正是这样做的。解决这个问题的第一步之一是在演练环境中设置持续集成和自动化负载测试。令人惊讶的是,像这样简单的行动可以极大地增进理解。
注意
我们解决的最后一个更有趣的问题之一出现在我们的监控系统中。在系统性能稳定并应用软件工程最佳实践之后,我们发现了一个令人惊讶的错误。我们让系统每天检查资产作为基本健康检查。几天后,我们开始每天遇到严重的性能问题。当我们查看数据库上 CPU 使用率的波动时,它们与基本健康检查相关。进一步挖掘后,显而易见的是,签入代码(自制的 ORM,对象关系映射器)正在指数级地生成 SQL 查询。大多数工作流程只涉及资产的两三个版本,我们的健康检查监控发现了一个关键缺陷。自动健康检查的另一个原因。
当我们运行负载测试时,我们发现了一系列问题。我们立即发现的一个问题是,在少量并发流量之后,MySQL 数据库会变成一条直线。我们发现我们正在使用的 MySQL 版本具有严重的性能问题。切换到最新版本极大地提高了性能。通过解决了这个性能问题,并找到了一种自动测试是否正在解决问题的方法,我们迅速进行了重大修复。
接下来,我们将源代码放入版本控制中,创建了基于分支的部署策略,然后在每次签入时运行了代码检查和测试,以及代码审查。这个举措也极大地提高了我们对性能问题的可见性,并呈现了不言自明的解决方案。在工业危机中,自动化和卓越标准是您可以部署的两个基本工具。
我们最后需要解决的一个问题是,我们的远程电影工作室位置存在严重的可靠性问题。远程位置的工作人员确信问题与我们的 API 相关的性能问题有关。危机紧急到公司的高层执行官让我和另一位工程师飞到现场排查问题。当我们到达那里时,我们打电话给我们的中央办公室,并让他们仅查看该 IP 范围的请求。当我们启动他们的应用程序时,没有观察到任何网络流量。
我们检查了远程位置的网络基础设施,并验证了客户机与中央办公室之间可以发送流量。出于直觉,我们决定使用专门的诊断软件检查 Windows 机器上的本地和网络性能。然后我们观察到在 2 到 3 秒内启动了成千上万个套接字连接。经过进一步研究,我们发现 Windows 操作系统会暂时关闭整个网络堆栈。如果在短时间内生成太多的网络连接,操作系统会保护自己。客户端应用程序试图在一个for循环中启动成千上万个网络连接,最终关闭了它的网络堆栈。我们进入代码并限制了机器只能进行一个网络连接,突然之间,一切正常运转起来。
后来,我们对客户端软件的源代码运行了 pylint,并发现大约三分之一的系统无法执行。关键问题不是性能问题,而是缺乏软件工程和 DevOps 最佳实践。通过一些简单的工作流程修改,如持续集成、监控和自动化负载测试,本可以在不到一周内解决这个问题。
游戏工作室无法推出游戏
当我第一次加入一家成熟的游戏公司时,它们正在经历一场变革。旧产品在首次推出时非常创新,但在我加入时,他们决定需要投资新产品。公司当前的文化非常注重数据中心,每一步都有大规模的变革管理。许多开发的工具都是对维持一个高度成功但即将消亡的游戏的可用性的逻辑扩展。引入新人、新部门和新产品导致了不可避免的持续冲突和危机。
我很早就意识到危机的初步深度,尽管我一直在处理老产品。在我去参加另一个会议的路上,经过新产品团队时,我听到了一个有趣的对话。在敏捷团队会议上,一位西班牙开发者在谈论旗舰新产品时引起了我的注意,他说:“It no worketh…” 单这个声明就相当震惊,但更令我震惊的是听到的回应:“Luigi,这是技术术语;这不是讨论这个的场合。”
从那一刻起,我知道确实出了问题。后来,项目上的许多人都离开了,我接手了一个延迟一年多、第三次重写第三种语言的项目。其中一个关键发现是这位“煤矿里的金丝雀”开发者完全正确。什么都不起作用!在项目的第一天,我在笔记本电脑上检查了源代码,并尝试运行 Web 应用程序。几次刷新 Chrome 后,我的电脑完全死机。噢哦,我又碰上了这种情况。
在深入研究了项目后,我意识到有几个关键问题。首先是需要解决的核心技术危机。有一个“木乃伊崇拜”的敏捷过程,非常擅长创建和关闭工单,但却构建了一个功能不完善的系统。我做的第一件事是将核心工程师从这个项目管理流程中隔离出来,我们为核心解决方案设计了一个修复方案,而不带有“敏捷”额外开销。接下来,当核心引擎问题解决后,我们创建了自动化部署和定制的负载测试流程。
因为这是公司的头等大事,我们重新调整了一些其他团队成员在核心产品上的工作,以构建定制的负载测试和定制的仪器。这个举措也遭遇了相当大的阻力,因为这意味着与这些资源合作的产品经理们将被迫闲置。这是项目中的一个重要节点,因为它迫使管理层决定是否将这个全新产品的首次发布作为公司的首要任务。
推动产品发布的最后一个重大障碍是创建持续交付系统。平均而言,即使是像更改 HTML 这样的小改动,也需要大约一周的时间。对于拥有数十万付费客户的 C++ 游戏而言,工作相当顺利的部署过程对于现代网络应用程序并不适用。传统游戏是在传统数据中心中运行的,这与在云中创建基于网络的游戏的理想条件大不相同。
云计算还揭示了自动化的缺乏。云计算的本质要求更高级的 DevOps 技能和自动化。如果需要人工介入来扩展和缩小服务器,事情就不具有弹性。持续交付意味着软件持续运行,并且可以快速部署到环境中作为最后一步。参与一个需要一周时间的部署过程的“发布经理”与 DevOps 目标直接相悖。
Python 脚本需要 60 秒才能启动。
在世界顶级电影工作室之一,并拥有世界上最大的超级计算机之一,是了解大规模运作的好方法。开源软件的一个关键问题是,它可能是在孤立的笔记本电脑上构建的,与大公司的需求无关。开发者试图解决一个特定的问题。一方面,解决方案很优雅,但另一方面,它又带来了问题。
这个电影工作室遇到的 Python 问题之一是,它们不得不在集中文件服务器上处理宠字节的数据。Python 脚本是公司的主要工具,它们几乎在所有地方运行。不幸的是,它们需要大约 60 秒才能启动。我们几个人聚在一起解决这个问题,我们使用了我们最喜欢的工具,strace:
root@f1bfc615a58e:/app# strace -c -e stat64,open python -c 'import click'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 97 4 open
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 97 4 total
Python 2 的模块查找是 O(nlogn)或者称为“超线性时间”。路径中目录的数量至少会线性增加启动脚本的时间。这种性能惩罚在电影工作室成为了一个真正的问题,因为这经常意味着超过十万次的文件系统调用来启动 Python 脚本。这个过程不仅速度慢,而且逐步破坏了文件服务器的性能。最终,这开始完全击垮中央化的数百万美元文件服务器。
解决方案是深入使用strace进行详细分析,即使用适合工作的正确工具,同时通过修改 Python 停止使用路径查找导入。Python 的后续版本通过缓存查找已解决了这个问题,但学会使用能够深入分析性能的工具是非常重要的。最后一个要点是始终将性能分析作为连续集成过程的一部分,以捕捉这些类型的性能错误。
注意
想起了电影工作室中另外两种与糟糕的用户体验设计和糟糕的架构结合的情况。一天,一名动画师来到主工程部门,寻求解决设置的 Filemaker Pro 数据库问题的建议。动画部门跟踪镜头的 Filemaker Pro 数据库一直被删除。当我要求查看数据库时,发现了一个 UI 界面,其中有两个相邻的按钮。一个是中等大小的绿色按钮,上面写着“保存条目”,另一个是大红色按钮,上面写着“删除数据库”。
在另一家完全不同的公司,我们注意到一个特定 IP 地址向生产 MySQL 数据库发送了大量负载。当我们追踪开发人员时,他们似乎有些犹豫与我们交谈。我们询问他们的部门是否在做任何特殊的事情。他们说他们有一个 PyQt GUI 执行自动化任务。当我们查看 GUI 时,发现了几个正常大小的按钮,然后是一个标有“GO”的大按钮。我们问“GO”按钮的作用,开发人员羞怯地说每个人都知道不要按下那个按钮。我打开了一个 SSH 连接到我们的数据库,并在 MySQL 服务器上运行了 top 命令。尽管他坚决反对,我还是按下了那个按钮。果然,数据库立即持续 100%的 CPU 使用率数分钟。
使用缓存和智能仪器灭火
在我担任 CTO 的体育社交网络中,我们的关系型数据库性能出现了严重问题。我们开始接近垂直扩展的极限。我们使用了 Amazon RDS 提供的最大版本的 SQL Server。更糟糕的是,由于当时 SQL Server 没有将读从服务器整合到 RDS 中,我们无法轻松切换到水平扩展。
解决这类危机的方法有很多种。一种方法可能涉及重写关键查询,但我们正面临大量流量和工程师短缺的情况,所以我们必须寻找创造性的解决方案。我们其中一位以 DevOps 为中心的工程师提出了一个关键性的解决方案,做了以下几步:
-
添加更多的仪表盘,通过一个应用性能管理工具(APM),跟踪 SQL 调用所花费的时间,并将其映射到路由。
-
将 Nginx 作为缓存添加到只读路由。
-
在专门的测试环境中对这个解决方案进行负载测试。
这位工程师拯救了我们的后路,他通过对应用程序进行最小修改来实施解决方案。这显著提高了我们的性能,并最终让我们能够扩展到每月数百万用户,成为世界上最大的体育网站之一。DevOps 原则不仅仅是抽象的重要性;它们可以象征性地帮助你避免在技术债务的海洋中陷入困境。
你将自动化自己的工作!
20 多岁时,我在世界顶级电影工作室之一找到了工作,并且非常兴奋能够运用我在视频、电影、编程和信息技术方面的综合技能。这也是一个工会工作,这在我之前从事技术工作时从未有过的经历。工会工作的好处是,它拥有极好的福利和薪酬,但后来我发现,其中涉及到自动化方面的一些缺点。
在那里工作了几个月后,我意识到我的一个任务相当愚蠢。我会在星期六(加班工资)在电影工作室里走动,把 CD 放入高端编辑系统中,并“进行维护”。总体的想法是好的;每周进行预防性维护,以确保这些昂贵的设备在工作日几乎没有停机时间。然而,实施方式有缺陷。如果一切都可以自动化,我为什么还要手动操作呢?毕竟,这是一台电脑。
在第二个“维护”星期六之后,我构思了一个秘密计划来自动化我的工作。因为这是一个工会工作,所以我必须小心谨慎,并保密直到验证其可行性。如果我请求批准,那就别想了。我首先写下了一系列必要的步骤来实现自动化:
-
连接 OS X 机器到公司的 LDAP 服务器。这一步将允许多个用户,并允许我挂载 NFS 主目录。
-
反向工程编辑软件,以允许多个用户访问该软件。我对几个列表应用了组级权限进行了修改,以此来“黑客”它,允许各种用户使用同一台机器。
-
创建软件的镜像,使其处于我想要安装的状态。
-
编写一个脚本来进行“NetBoot”,即从网络操作系统引导计算机,然后重新映像这些计算机。
一旦我解决了这个问题,我就能够走到任何一台机器旁边,重新启动它,并按住“N”键。然后完全重新安装软件(并且保留了用户数据,因为它在网络上)。由于系统速度快,并且我在做块级复制,所以整个机器的重新安装只需 3.5 到 5 分钟。
在我的第一次测试中,我能够在 30 分钟内完成我的“维护”工作。唯一的瓶颈是走到机器旁边,按住“N”键重启它们。此外,我告诉了电影编辑们首先尝试通过重置并按住“N”键来恢复他们的机器,这显著减少了支持电话。天哪,我的工作以及整个部门的工作都变得更加容易处理了。这种自动化在工会工厂并非完全适用。
不久,一位老工会工人突然把我拉到与我的老板的一次意外会议中。他对我所做的不满意。会议结束时,他对我大声吼叫,并指着我说:“你这个小子会把自己脚本化而失去工作的!”老板的上司也不高兴。几个月来,他一直向管理层倡导批准一个维护团队,然后我写了一个脚本,消除了我们部门大部分工作。他也对我大声斥责。
消息传开了,每个人都喜欢这个新的自动化流程,包括明星和电影编辑。因此,我没有因此被解雇。后来,关于我的做法传开了,我因此把自己脚本化而从一份工作中脱颖而出。我被招募到索尼影像工作室工作,并被聘用来做我几乎因为这个而被解雇的事情。这也是一份有趣的工作。我经常在午餐时和亚当·桑德勒以及他电影的演员们一起打篮球。所以,是的,你可以通过脚本化把自己从一份工作中解脱出来,而且正好转移到一个更好的工作中!
DevOps 反模式
让我们深入一些明确的例子,说明不应该做的事情。通常,从错误中学习要比追求完美容易得多。本节详细介绍了许多可怕的故事和应避免的反模式。
无自动化构建服务器反模式
令我惊讶的是,有多少麻烦项目或公司根本没有构建服务器。这一事实可能是软件公司存在的最重要的警示标志。如果你的软件没有经过构建服务器的检验,你几乎可以肯定几乎没有其他形式的自动化正在进行。这个问题就像煤矿中的金丝雀一样。构建服务器是确保您能够可靠交付软件的基础组成部分。通常,在危机中我会立即设置一个构建服务器。仅仅通过 pylint 运行代码就能迅速改善情况。
与此有些相关的是“几乎工作”的构建服务器。有些组织竟然对待 DevOps 也是这样做,“这不是我的工作…那是构建工程师的工作。” 这种不屑一顾的态度,就像“这不是我的工作;这是 DevOps 的工作”一样,是癌症。如果你在软件公司工作,那么自动化的每一个工作都是你的工作。没有比确保事情自动化更关键或更高尚的任务了。说自动化任务不是你的工作,简直荒谬。任何说这种话的人都应该受到谴责。
飞行盲目
你有记录你的代码吗?如果没有,为什么?你开车时也不开车灯吗?应用程序可见性是另一个很容易解决的问题。对于生产软件,技术上有可能记录过多,但在困扰项目中,往往是没有!对于分布式系统,有记录是至关重要的。无论开发人员有多么熟练,问题多么简单,运维团队有多么优秀,你都需要记录。如果你的应用程序不包括记录,你的项目注定会失败。
协调困难作为一项持续的成就
在 DevOps 团队中工作的一个困难是创始人/CTO、创始人/CEO 和团队其他成员之间的地位差异。这种冲突导致在获取更可靠的基础设施、更好的仪器设备、适当的备份、测试和质量保证以及最终解决任何持续稳定危机方面存在协调困难。
另一个影响整合条件并导致协调失败的普通组织动态是团体中的状态差异,因为高地位的团体可能觉得没有必要承认低地位团体成员的任务贡献。例如,Metiu 在软件开发中展示了高地位程序员拒绝阅读低地位程序员提供的注释和进度文档的情况。因为问责要求承认相互责任,阻碍这种承认的状态差异限制了责任的发展。
在存在显著状态差异的情况下,团体成员可能无法彼此信任。在互相依赖的工作中,这些情况下的低地位个体会少问问题,少提反馈意见,因为担心冒犯他人和可能的后果。这种情况导致知识分享减少,限制了团体的共同理解。
在组织行为学中,有一个概念叫做“封闭”。封闭被定义为基于地位垄断商品或机会的行为。根据 Metiu,典型的高地位软件开发团体会使用以下技术来实行封闭:
-
缺乏互动
-
利用地理距离或接近程度(办公室的情况)
-
不使用工作成果
-
批评
-
代码所有权转移
在公司内部的互动观察中,我认为高管经常会为他们与员工合作的项目做出决策。例如,即使 CTO 要求 DevOps 工程师参与一个仪表化任务,但 CTO 后来可能会拒绝使用它。通过不使用,可以推断出 DevOps 工程师永远无法进入与 CTO 同一高地位组的情况。这种行为根据 Metiu 在软件开发团队研究中被称为“封闭”[²]。
这种行为是组织中解决工程普遍问题中最大的挑战之一。当一个高地位的个人“拥有”一个组件时,历史上直到几个“低地位”的团队成员介入并共同承担责任后,它才能正常运作。这些项目包括 UI 界面、日志记录、数据中心迁移、基础设施等等。诚然,这是一个复杂的问题,并非唯一因素,但它是一个具有一定未知但显著权重的因素。
如果组织中的领导比其他人“更优”,你将永远无法实施真正的 DevOps 原则。你将只会应用最高薪人士的观点(HIPO 原则)。尽管 DevOps 可以直接挽救生命并拯救你的公司,但 HIPOs 是凶猛的动物,它们可以并且确实会摧毁它们路径上的一切。
缺乏团队合作
在武术馆中,让学生帮忙拖地是司空见惯的。这样做有很多明显的原因。这显示了对教练的尊重,教给了学生自律。然而,还有一些更微妙的原因。
这里涉及一个博弈论问题。接触到葡萄球菌感染可能会导致严重的健康问题。如果你被提供在你训练的健身房里拖地的机会,务必认真考虑你如何回应。人们会观察你清洁地板的效果,如果你做得好,他们也会因为尊重你而做得好。如果你把这个任务看作“低人一等”的事情,不认真执行,你可能会造成两个问题。首先,你没有清洁好地板,这可能会导致健身房的其他成员生病。其次,你“感染”了其他人的思维方式,他们反过来也不会认真清洁地板。你的行为在现在和未来都会有后果。
因此,通过“赢得”而没有正确清洁地板,实际上是“输掉”了,因为你在鼓励可能会危及生命的不卫生条件中扮演了角色。这个故事的寓意是什么?如果你经常在武术馆训练,并被要求拖地,请确保你以愉快的面孔做出出色的工作。你的生命可能取决于此。
让我们来看看软件公司的同样情况。许多关键任务都符合相同的特征:添加适当的日志记录、创建项目的持续部署、负载测试项目、linting 你的代码,或进行代码审查。如果你态度消极或者不完成这些任务,你的公司可能会得到一种像葡萄球菌一样的致命疾病。方法和完成都很重要。你传达给同事的信息是什么?
有一本由拉森和拉法斯特³撰写的关于团队合作的优秀书籍,涵盖了对团队进行全面和科学研究的详细内容。他们确定了八个特征,解释了有效团队如何以及为什么发展:
-
一个明确的、激励人心的目标
-
一个以结果为导向的结构
-
有能力的团队成员
-
统一的承诺
-
一个协作的氛围
-
卓越的标准
-
外部支持与认可
-
有原则的领导力
让我们回顾一些这些在组织中是如何有效或无效的例子。
一个明确的、激励人心的目标
如果你的组织没有一个明确的、激励人心的目标,那就麻烦了,完全停下来!作为一名工程师,我希望目标是制作优秀、可靠的软件。然而,在问题多多的公司里,我听到了许多目标:追逐大鱼,让亚马逊“烧毁”,我们搬到数据中心,将公司卖给“X”或“Y”。
一个以结果为导向的结构
你的组织是否采用了结果导向的工作体验(R.O.W.E)?许多公司使用的工具和流程如果不能直接归因于结果,则其可取性存疑:Skype、电子邮件、非常长的会议、“加班”。但最终,这些都无法单独帮助公司。更多地关注结果,而不是“面对面的时间”或者“Skype 上的快速响应”或电子邮件,可能会在组织中引发突破性变化。“假敏捷”呢?你的公司是否在做仪式主义的敏捷?这种流程除了在会议中消耗开发人员的时间讨论燃尽图、故事点以及使用大量流程术语外,实际上一无所获。
有能力的团队成员
毫无疑问,要想组织成功,你需要有能力的团队成员。能力并不意味着“精英”学校或者“leet code”,而是指作为团队一部分执行任务的能力和愿望。
统一的承诺
你的团队中有自私的人吗?他们只关心自己吗?他们在最后一刻对数据库进行了更改,然后在下班前没有测试就走了,因为已经是下午 4 点 35 分?他们需要赶公交车(不在乎他们是否烧毁了生产)。这种行为比任何其他事情都更快地摧毁了你的团队。在高效团队中,你不能有自私的人;他们会毁掉它。
一个协作的氛围
任务冲突的适当水平是多少?每个人不能仅仅同意彼此,因为你不会发现错误。同时,也不能让人们彼此大声争吵。这需要一个尊重的环境,人们在这样的环境中开放并期待反馈。如果天平倾向任何一方,你注定会失败。实现这种平衡说起来容易做起来难。
另一个例子是招聘流程。许多公司抱怨不能雇用、为多样性而雇用,并且普遍得到优秀的候选人。真正的问题是他们的招聘流程是“fugly”:
-
首先,公司 FLATTERs 候选人申请。
-
接下来,他们 WASTE 时间进行定制的无关紧要的测试。
-
然后他们通过一轮面试 HAZE 他们,其预测价值比随机还差。
-
然后他们 GHOST 候选人,并且不给他们任何反馈。
-
他们 LIE 并且说他们正在尝试雇佣人员,而实际上他们的流程已经损坏。
-
然后他们在社交媒体上 YELL 关于多样化,或任何候选人难以参与的问题。
你不能雇用的原因是你的流程 FUGLY!尊重他人,你将得到尊重。联系将体现在能够留住许多优秀员工身上,他们被一个优化错误事项的招聘实践毫无必要地忽视了。
卓越标准
这一步对组织来说是一个重大挑战。大多数 IT 专业人员工作非常努力,但可以提高卓越和工艺水平。另一种说法是需要更高程度的自律。需要更高的软件编写、测试和部署标准。在部署新技术之前,需要对文档阅读有更严格的要求。
一个例子是软件生命周期。在每个阶段,需要更高的标准。在工作开始之前,撰写技术概述并创建图表是很重要的。绝不能发布未经过适当 DevOps 生命周期的代码。
在基础设施方面,需要在许多步骤上遵循最佳实践,无论是动物管理员配置、EC2 存储配置,还是 mongo 或 serverless。技术堆栈中的每个组件都需要重新审视并符合最佳实践。许多情况下,文档中规定了正确配置元素的方法,但从未被阅读过!可以安全地假设,在许多公司,超过 50%的技术堆栈仍然配置不正确,尽管技术有了显著改进。
请注意,我在“长时间工作、夜晚和周末工作”与工作高度纪律性及遵循卓越标准之间作了明确区分。在软件行业,通常有太多的夜晚和周末工作,却缺乏纪律性,这相差一个数量级。低估缺乏标准和控制的重要性,仅仅告诉某人工作更长时间更努力将是一个严重错误。
最后,对于许多公司在推荐战略方向时收集定量数据,需要设定更高的标准。许多管理人员在“迁移到新数据中心”或“追求大客户”方面缺乏任何真正的定量分析,这反映了许多管理层的缺乏纪律和流程。仅凭意见来作为事实陈述的管理团队成员,而不具备数据支持,这是不够的。管理层需要高标准。公司中的每个人都可以看到,决策使用数据而非意见、等级制度、攻击性或对佣金的渴望。
外部支持和认可
历史上,DevOps 专业人士在外部支持和认可方面确实存在一些真实问题。一个显而易见的例子是值班。在科技界,情况有了显著改善。但即使在今天,许多值班人员仍然没有得到应有的认可,他们工作的辛苦和值班的挑战性并未受到重视。
在许多组织中,似乎没有为努力工作(比如主动承担值班)提供明显的奖励。如果有的话,明显的先例表明逃避责任可能会让你得到晋升,因为你足够狡猾地摆脱了低地位的工作。在我一起工作的某位员工的案例中,他说同意值班“不明智”(他的话)。他在工程部门时拒绝值班。逃避责任随后导致了晋升。当领导展示低于平均水平的承诺和诚信时,要求非凡贡献是具有挑战性的。
另一个缺乏外部支持的例子是,当一个部门将艰难的任务转嫁给另一个部门时。他们常说,“这是 DevOps 的事情,不是我的工作。” 我见过销售工程团队设置了许多环境:数据中心环境、Rackspace 环境、AWS 环境。他们不断地呼叫值班人员,尽管他们并没有设置这些环境。当销售工程师面对这个问题时,他提到自己是销售部门的,这“不是他的工作”。工程部门无法访问他设置的机器。这些机器配置错误,并不断呼叫人员。这里传达的明确信息是“不要当冤大头”,把值班的工作推卸给地位较低的“冤大头们”。
另一个缺乏外部支持的例子是,我曾在一家公司工作,在那里客户数据被意外删除了。一名销售工程师最初错误地配置了机器,存储空间不足以支持客户期望的保留期。然而,持续清理数据的责任却落在了 DevOps 的手中,成了“替罪羊”。
机器的维护需要每天多次运行危险的 Unix 命令,而且通常是在深夜。毫不奇怪,DevOps 团队的一名成员误输入了其中一个命令,导致客户数据被删除。销售工程师生气了,拒绝让客户知道;相反,他试图强迫 DevOps 工程师致电客户并进行“自我承认”。公司外部支持薄弱,管理层允许个人行为不支持的情况是有问题的。这种行为清楚地传达了管理层不会解决“棘手”问题的信息,比如解决不成熟或不道德的行为,而是将其转嫁给 DevOps。
原则领导力
在我工作过的公司里,也有一些展现原则领导力的极好例子,也有一些不幸的情况。Larson 和 LaFasto 提到,一位转型领导者通过定位来建立信任——确保领导者的行为体现了愿景的理想和方向。例如,某位首席技术官在危机期间连续几个月值班,以示与所有人的团结。这种情况是不要求别人做自己不愿意做的事情的一个例子。当个人付出了个人牺牲并且不方便时,责任感就会产生。
另一个展现原则领导力的优秀例子是与产品经理和前端团队的合作。她“要求”前端团队使用工单系统,并以身作则,积极与队列合作并处理其中的问题。结果,用户体验工程师学会了这项技能,以及规划中的重要性。她本可以只是说:“使用系统”,但她选择亲自使用。这种情况导致了一个可以量化衡量的真正成功。产品经理密切监控的工单周转率有所改善。
另一方面,一些初创公司的 CEO 提倡的做法是不道德的。有些人经常发送电子邮件,称需要“加班加点”,然后在下午 4 点就回家了。团队会注意到这种行为,其中一些后果将永远留下。另一种表述方式是称这种行为为“不真实的领导力”。
我曾见过一些情况,其中 DevOps 团队受到了骚扰,这对他们非常有害。这种骚扰是通过说这个团队工作不努力或者无能来制造的。如果这种言论来自于一个经常早退并且拒绝做具有挑战性工程任务的人,那么情况就变得更加难以忍受。骚扰本身已经够糟糕了,但如果这种骚扰来自于一个合法的懒汉,而且他们被允许恐吓人们,那就更加难以忍受。
拉森和拉法斯托还提到,任何自认为在这三个类别中表现低劣的团队最终都不会长久存在:
-
明确而高远的目标
-
有能力的团队成员
-
卓越的标准
面试
Glenn Solomon
你能给 Python 和 DevOps 从业者提供一些简短的智慧吗?
所有公司都将成为软件公司。在这种增长中,将会有四到五家公司起到基础性作用。DevOps 是这种演进的关键方面。变化的速度很重要。将会创造出新的不同的工作。
个人网站
公司网站
公共联系信息
https://www.linkedin.com/in/glennsolomon
Andrew Nguyen
你在哪里工作,以及你在那里做什么工作?
我是旧金山大学健康信息学项目主任和健康专业系主任。我的研究兴趣包括将机器/深度学习应用于医疗数据,特别关注非结构化数据。这包括使用自然语言处理处理文本以及使用信号处理和分析处理传感器数据,这两者都极大地受益于深度学习的进展。我还是 qlaro, Inc.的创始人兼首席技术官,这是一家专注于利用机器学习和自然语言处理来帮助癌症患者从诊断到存活的数字健康创业公司。我们帮助患者优先考虑下一步需要做什么以及如何最好地向他们的医生和护理团队提问。
你最喜欢的云是什么,为什么?
虽然我最初是从 AWS 的基础设施即服务的角度探索云服务的,但最近我主要在我的工作中使用 GCP。我早期的转换纯粹是因为在部署符合 HIPAA 法规的解决方案时节省了成本。从那时起,我一直在使用 GCP,因为这是我最有经验的平台。然而,尽可能地,我会使用平台无关的工具来减少影响,以防需要进行更改。
从机器学习的角度来看,我更加中立,愿意根据具体的机器学习项目使用 AWS 或者 GCP。话虽如此,对于我接下来的项目(将涉及收集、存储和处理大量数据),我打算使用 GCP,因为在各种执行器上(包括 Google Dataflow)开发和运行 Apache Beam 作业非常方便。
你是什么时候开始使用 Python 的?
我大约 15 年前开始使用 Python 作为 Web 开发语言,当时 Django 刚刚发布。自那时起,我把它用作通用编程/脚本语言,也用作数据科学语言。
你最喜欢 Python 的哪一点?
我最喜欢的是它是一种无处不在的、可解释的、面向对象的语言。它几乎可以在任何系统上运行,并提供面向对象编程的强大性能,同时保持解释脚本语言的简洁性。
你最不喜欢 Python 的哪一点?
空白符。我理解 Python 使用空白符的理由。然而,当试图确定一个函数的作用域跨越屏幕无法显示的范围时,这种方式变得很烦人。
10 年后软件行业会是什么样子?
我认为我们会看到越来越多的人在不写太多代码的情况下进行“软件开发”。类似于 Word 和 Google Docs 如何使任何人能够轻松格式化文档而无需手动文字处理,我认为人们将能够编写小函数或使用 GUI 处理简单的业务逻辑。在某种意义上,随着 AWS Lambda 和 Google Cloud Functions 等工具成为常态,我们将看到越来越多的即插即用的函数,无需正式的计算机科学培训即可有效使用。
你会短什么技术?
我认为机器学习即服务(MLaaS)公司会被短期化——也就是说,那些专注于机器学习算法的公司。正如我们不会看到提供文字处理服务的公司一样,自动 ML 工具或平台如 AutoML 或 SageMaker 将使大多数公司能够轻松地将 ML 能力内部化。虽然我们不能使用这些工具解决所有 ML 问题,但我们可能能解决 80 到 90%的问题。因此,仍然会有公司创建新的 ML 方法或提供 ML 作为服务,但我们将看到围绕主要云提供商的巨大整合(而不是今天看到的无数“做机器学习”的公司)。
你会推荐对 Python DevOps 感兴趣的人学习什么最重要的技能?
学习概念,而不仅仅是工具和工具链。新的范式会来去,但对于每一个范式,我们会看到数十种竞争的工具和库。如果你只学习特定的工具或库,当新的范式开始显现并接管时,你很快就会落后。
你会推荐别人学习什么最重要的技能?
学会如何学习。弄清楚你如何学习以及如何快速学习。与摩尔定律类似,我们看到每一代处理器速度翻倍,我们正在看到 DevOps 工具的加速增长。有些构建在现有方法的基础上,而其他人试图取而代之。无论如何,你需要知道如何学习,以便快速有效地了解越来越多的工具,然后迅速决定是否值得追求。
告诉读者一些关于你的酷事情。
我喜欢徒步旅行,背包旅行,总之喜欢待在户外。空闲时间里,我也在当地警长办公室的搜救队做志愿者,通常在森林中寻找失踪的人,也会在像加利福尼亚天堂镇的“野火”等灾难期间参与搜救工作。
Gabriella Roman
你叫什么名字,目前从事什么职业?
你好!我的名字是 Gabriella Roman,我目前是波士顿大学的计算机科学本科生。
你在哪里工作,以及你在那里做什么?
我是红帽公司的实习生,主要在 Ceph 团队工作。我主要与 ceph-medic 这个 Python 工具合作,用于对 Ceph 集群进行检查,无论是修复旧检查中的错误还是解决新检查中的问题。我还与 DocUBetter 团队合作更新 Ceph 的文档。
你最喜欢的云是什么,为什么?
尽管我只用过 Google Cloud Storage,但我实在找不出它成为我最喜欢的理由。我只是碰巧试用了它,而且没有理由讨厌它,所以过去 10 年来我一直忠于它。我喜欢它简洁的界面,作为一个不喜欢保留太多数字杂乱的人,它的 15GB 限制并不困扰我。
你是什么时候开始使用 Python 的?
我第一次学习 Python 是在大二下学期的一门计算机科学导论课上。
你最喜欢 Python 的什么地方?
它的可读性。Python 的语法是所有编程语言中最简单的之一,这使得它成为初学者的绝佳选择。
你最不喜欢 Python 的什么地方?
我对其他编程语言的经验还不足以进行比较。
软件行业未来 10 年会是什么样子?
几乎不可能预知未来会带来什么,尤其是在这个不断变化的领域。我唯一能说的是,我希望软件行业能继续朝着积极的方向发展,并且软件不被不当使用。
你会向有兴趣学习 Python 的人推荐最重要的技能是什么?
遵循良好的代码风格,特别是在团队协作时,有助于避免很多不必要的头疼。作为一个 Python 新手,我发现当我阅读整理有序并有详细文档的代码时特别有帮助。
你会向别人推荐学习的最重要的技能是什么?
这不完全是一种技能,更像是一种心态:要愿意学习新东西!我们一直在学习,即使在最意想不到的时候,所以保持开放的心态,允许他人与你分享知识!
告诉读者一些关于你的酷事情。
我非常喜欢玩视频游戏!我最喜欢的一些游戏包括《最后的生还者》、《空洞骑士》和《英雄联盟》。
专业网站
https://www.linkedin.com/in/gabriellasroman
Rigoberto Roche
你在哪里工作,以及你在那里做什么?
我在 NASA Glenn Research Center 担任机器学习和智能算法团队的首席工程师。我的工作是开发决策算法来控制空间通信和导航的所有方面。
你最喜欢的云平台是什么,为什么?
由于它在我的工作流程中的可用性,我最熟悉的是 Amazon Web Services。
你什么时候开始使用 Python?
2014
你最喜欢 Python 的什么?
易于阅读的代码和快速的开发时间。
你最不喜欢 Python 的什么?
空白分隔。
软件行业未来 10 年会是什么样子?
很难说。似乎有一股推动云计算和分散式编程的潮流,将开发者推向作为一切的独立承包商。这将成为一个零工经济,而不是一个大型商业产业。最大的转变将是使用自动编码工具来分离创造性开发与语法学习任务。这可以为更多的创意专业人士开发新事物和新系统打开大门。
你会短暂什么技术?
Uber 和 Lyft。任何可以由狭义 AI 自动化的体力劳动:驾驶、仓储、法律助理工作。可以通过深度学习解决的问题。
你会建议对 Python DevOps 感兴趣的人学习的最重要的技能是什么?
快速学习的能力,标准是“一个月内你能成为危险人物吗?”另一个是理解和从基本原理构建的能力,“像一名物理学家”,通过自己的实际工作理解比理论更多。
你会建议某人学习的最重要的技能是什么?
脑钩(记忆宫殿)、番茄工作法和间隔回忆自测用于内容吸收。
告诉读者一些有趣的事情关于你。
我喜欢像 Rickson Gracie 的柔术风格和 Mussad Krav Maga(不是运动类的)。我在这个世界上的激情是建立一个真正思考的机器。
个人网站
只需谷歌我的名字。
个人博客
没有一个。
公司网站
公开联系信息
Jonathan LaCour
你在哪里工作,做什么工作?
我是 Mission 的 CTO,一家专注于 AWS 的云咨询和托管服务提供商。在 Mission,我负责制定和定义我们的服务提供和领导我们的平台团队,专注于通过自动化推动效率和质量。
你最喜欢的云平台是什么,为什么?
我在公共云领域有深厚的根基,既是公共云服务的消费者,也是构建者。这些经验让我深知 AWS 提供了最深、最广泛、最广泛的公共云服务。因为 AWS 是市场的领导者,他们也拥有最大的开源工具、框架和项目社区。
你什么时候开始使用 Python?
我在 1996 年底第一次开始使用 Python,当时是在 Python 1.4 发布时。那时候,我还在高中,但在空闲时间里为一家企业医疗保健公司工作作为程序员。Python 立即让我感到“如鱼得水”,从那时起,我一直把 Python 作为我的首选语言。
Python 中你最喜欢的是什么?
Python 是一种非常低摩擦的语言,愉快地淡化到背景中,使开发者能够专注于解决问题,而不是与不必要的复杂性作斗争。正因为如此,使用 Python 简直太有趣了!
Python 中你最不喜欢的是什么?
Python 应用程序的部署和分发比我想象中更困难。像 Go 这样的语言可以构建成便于分发的便携式二进制文件,而 Python 程序则需要更多的努力。
十年后的软件行业会是什么样子?
过去的十年见证了公共云服务的兴起,专注于基础设施即代码和基础设施自动化。我相信接下来的十年将会见证无服务器架构和托管服务的兴起。应用程序将不再围绕“服务器”的概念构建,而是围绕服务和函数构建。许多人将从服务器转向容器编排平台,如 Kubernetes,而其他人将直接跨越到无服务器。
你会推荐对技术感兴趣的人做什么?
区块链。虽然是一种有趣的技术,但其适用性的过度扩展令人震惊,该领域充斥着忽悠者和兜售区块链作为解决所有问题的解决方案的推销员。
你会推荐对 Python DevOps 感兴趣的人学习哪些最重要的技能?
自从 1996 年开始使用 Python 以来,我发现学习的最重要动力是好奇心和自动化的驱动力。Python 是一种极好的自动化工具,一个好奇的头脑可以不断找到新的方法来自动化从我们的业务系统到我们的家庭的一切。我鼓励任何刚开始学习 Python 的人寻找机会通过用 Python 解决真正的问题来“解决你自己的问题”。
你会推荐有兴趣学习的人学习哪些最重要的技能?
同理心。技术人员往往会在不考虑其对人类和彼此影响的情况下接受技术。同理心对我来说是一种核心价值观,它帮助我成为更好的技术人员、经理、领导和人类。
向读者介绍一些关于你自己的酷炫事情。
在过去的三年里,我一直在重建我的个人网站,汇集了从 2002 年以来的内容。现在,我的网站成为了我个人的记忆、照片、文章等的档案馆。
个人网站
个人博客
公司网站
公开联系信息
Ville Tuulos
你在哪里工作,做什么工作?
我在 Netflix 工作,负责领导我们的机器学习基础设施团队。我们的工作是为数据科学家提供一个平台,使他们能够快速原型化端到端的机器学习工作流,并有信心将其部署到生产环境中。
你最喜欢的云是什么,为什么?
我是 AWS 的铁杆粉丝。我从 2006 年 EC2 beta 版本开始使用 AWS。AWS 技术上和商业上仍然给我留下深刻印象。他们的核心基础设施,如 S3,具有极好的扩展性和性能,并且非常稳定。从商业角度来看,他们做对了两件事情。他们拥抱开源技术,在许多情况下使采纳变得更容易,并且他们非常重视客户的反馈。
你什么时候开始使用 Python?
我大约在 2001 年开始使用 Python。我记得当时我刚开始使用 Python 不久,就对生成器和生成器表达式的发布感到非常兴奋。
你对 Python 最喜欢的是什么?
我对编程语言非常着迷。不仅在技术上,而且作为人类沟通的媒介和文化。Python 是一种非常平衡的语言。在许多方面,它是一种简单且易于上手的语言,但同时又足够表达复杂的应用程序。它并不是高性能语言,但在大多数情况下性能足够好,特别是在涉及 I/O 时。许多其他语言更适合特定的使用场景优化,但只有少数语言像 Python 一样全面。
此外,CPython 实现是一段简单直接的 C 代码,比起 JVM、V8 或 Go 运行时要简单得多,这使得在需要时易于调试和扩展。
你对 Python 最不喜欢的是什么?
Python 作为一个全面的通用语言的另一面是,它并不是任何特定用例的最佳语言。在处理任何性能关键的工作时,我会想念 C 语言。在构建需要并发性的任何项目时,我会想念 Erlang。在进行算法编程时,我会想念 OCaml 的类型推断。讽刺的是,当使用这些语言中的任何一种时,我会想念 Python 的通用性、务实性和社区。
软件行业 10 年后会是什么样子?
如果你看过过去 50 年的计算机发展,趋势是显而易见的。软件正在改变世界,软件行业在技术栈中不断向上移动。相对而言,我们关注硬件、操作系统和低级编程的人越来越少。相应地,我们有越来越多的写软件的人缺乏底层技术栈的经验或知识,这是可以接受的。我认为这一趋势在很大程度上促成了 Python 的成功至今。我预计我们将看到越来越多像 Python 这样以人为本的解决方案,这样我们就能赋予越来越多的人构建软件的能力。
你会缩短哪种技术?
我倾向于对那些认为技术因素胜过人文因素的技术进行缩短。历史上有许多技术在技术上很出色,但未能体察到用户实际需求。采取这种立场并不总是容易的,因为工程师的本能是认为技术上优雅的解决方案应该胜出。
您会推荐有兴趣学习 Python DevOps 的人学习哪个最重要的技能?
我建议任何严肃对待 Python 的人,特别是 DevOps 领域的人,了解一些关于函数式编程的知识。没有什么非常深入的内容,只是关于幂等性、函数组合以及不可变性的思维方式。我认为函数式思维对于大规模 DevOps 非常有用:如何考虑不可变基础设施、打包等等。
您会推荐有兴趣学习的人学习哪个最重要的技能?
学会识别哪些问题值得解决是至关重要的。我经常观察到有些软件项目几乎投入了无限的资源来解决最终并不重要的问题。我发现 Python 是一个很好的工具来磨练这种技能,因为它可以让您快速原型化完全功能的解决方案,帮助您看清什么是相关的。
向读者介绍一些有趣的事情。
我和一个朋友一起破解了一个在纽约市进行的城市游戏。玩家用手机拍摄的照片实时投射到时代广场的巨大广告牌上。关于这个游戏的一个酷炫的事情是,整个游戏,包括手机上运行的客户端,都是用 Python 编写的。更酷的是,这个游戏是在 2006 年举行的,在智能手机的侏罗纪时代,早于 iPhone。
个人网站
https://www.linkedin.com/in/villetuulos
公司网站
公共联系信息
@vtuulos 在 Twitter 上
约瑟夫·赖斯
您在哪里工作以及您在那里做什么?
我是 Ternary Data 的联合创始人。我主要从事销售、市场营销和产品开发。
您最喜欢的云平台是什么?为什么?
在 AWS 和 Google Cloud 之间取舍很难。我发现 AWS 更适合应用程序,但 Google Cloud 在数据和 ML/AI 方面更为优越。
你何时开始使用 Python?
2009 年
你最喜欢 Python 的什么?
通常只有一种方法可以解决问题,因此在减少解决问题最佳解决方案所需的心理负担方面有所帮助。按照 Python 的方式去做,然后继续前进。
你最不喜欢 Python 的什么?
GIL 是我最不喜欢的东西。不过幸运的是,世界似乎正在朝着解决 GIL 的方向发展。
10 年后,软件行业会是什么样子?
可能很像现在这样,尽管采用了更快的迭代周期、最佳实践和新工具。新的就是旧的,旧的就是新的。不变的是人。
你会卖空哪种技术?
我会短期做空 AI,但在未来几十年内会非常看好 AI。围绕 AI 的大量炒作可能会导致短期内一些人心碎。
你会推荐对 Python DevOps 感兴趣的人学习什么技能?
尽可能自动化一切。Python 是一个极好的语言,可以简化你的生活和公司的流程。一定要充分利用这种强大的力量。
你会推荐别人学习什么最重要的技能?
学会保持成长的心态。灵活、适应性强和能够学习新事物将使您在很长一段时间内保持相关性。随着技术和世界的超快变化,学习的机会将是无穷无尽的...主要是因为你必须要学习 :).
告诉读者关于你的一些酷炫事情。
我曾经是一个攀岩狂人、俱乐部 DJ 和冒险家。现在虽然我有了一份攀岩工作,依然当 DJ,并尽可能多地冒险。所以,没有太多改变,但探索和做危险的事情的冲动仍在持续。
个人网站和博客
公司网站
公共联系信息
Teijo Holzer
你在哪里工作,你在那里做什么?
我在新西兰 Weta Digital 担任高级软件工程师已有 12 年。我的职责包括软件开发(主要是 Python 和 C ++),但偶尔也会执行系统工程和 DevOps 任务。
你最喜欢的云是什么,为什么?
一定是 AWS。
他们提供的主要特性之一是支持持续集成和交付。在软件工程中,您希望自动化尽可能多的单调任务,这样您就可以集中精力进行创新软件开发中有趣的部分。
通常你不想考虑的事情是代码构建、运行现有的自动化测试、发布和部署新版本、重新启动服务等。因此,你希望依赖像 Ansible、Puppet、Jenkins 等工具,在特定的定义点(例如,当你将新功能分支合并到主分支时)自动执行这些任务。
另一个重要的优点是在线论坛如 Stack Overflow 等提供的大量支持。作为云平台领域的当前市场领导者,自然会拥有更大的用户群体提出问题和解决问题。
你是什么时候开始使用 Python 的?
我开始使用 Python 超过 15 年,并且有超过 12 年的专业 Python 经验。
关于 Python,你最喜欢的是什么?
永远不需要重新格式化你的源代码。选择让空白符号具有语法/语法意义意味着其他人的 Python 代码立即具有非常高的可读性评分。我也喜欢 Python 许可证,这导致 Python 作为脚本语言在许多第三方商业应用程序中广泛使用。
关于 Python,你最不喜欢的是什么?
在复杂环境中执行高度并发任务的困难程度。在 Python 中,实现高效可靠的线程和多进程仍然是困难的。
未来 10 年软件行业会是什么样子?
在我看来,更加重视在现有基础设施和工具基础上,能够在紧迫时间框架内集成和提供以客户为中心的解决方案。没有必要不断重新发明轮子。因此,在软件行业中,系统工程和 DevOps 技能将变得更加重要。如果需要的话,你需要能够快速扩展。
你会对什么技术感到不安?
任何有单点故障的系统。构建健壮的系统需要你承认所有系统最终都会失败,因此你需要在每个层次上为此做好准备。首先,不要在你的代码中使用断言语句,然后提供高可用性、多主数据库服务器。当有许多用户全天候依赖你的系统时,构建容错系统尤为重要。即使 AWS 也只提供 99.95%的正常运行时间。
你会推荐对 Python DevOps 感兴趣的人学习的最重要的技术是什么?
快速的自动化。每当你发现自己一遍又一遍地重复相同的任务,或者你再次发现自己在等待长时间运行的任务完成时,问问自己:我怎么能自动化并加快这些任务?快速的周转时间对于有效的 DevOps 工作至关重要。
你会推荐别人学习的最重要的技能是什么?
如上所述,快速的自动化。
告诉读者一些有趣的关于你的事情。
我喜欢在 Python 会议上做演讲。请关注我在 Kiwi PyCon X 关于 Python、线程和 Qt 的最新演讲。
最近的演讲:
https://python.nz/kiwipycon.talk.teijoholzer
公司网站
Matt Harrison
你在哪里工作?你在那里做什么?
我在一家名为 MetaSnake 的公司工作,这是我创建的公司。它提供 Python 和数据科学的企业培训和咨询服务。我大约一半的时间用来教工程师如何提高 Python 的生产力或如何进行数据科学。另一半时间用于咨询和帮助公司利用这些技术。
你最喜欢的云平台是什么?为什么?
我过去使用过 Google 和 AWS。它们(及其他公司)都有出色的 Python 支持,这点我很喜欢。我不知道我有没有最喜欢的,但我很高兴有多个云平台,因为我相信竞争会带给我们更好的产品。
你何时开始使用 Python?
我是在 2000 年开始使用 Python 的,当时在一家小型初创公司做搜索。我和一个同事需要建立一个小型原型。我倾向于使用 Perl,他想使用 TCL。Python 是一个妥协,因为我们都不想使用对方喜欢的技术。我相信我们当时都迅速忘记了之前使用的是什么,此后我一直在使用 Python。
你最喜欢 Python 的什么?
Python 非常适合我。从简单的东西开始构建 MVP,然后再将其投入生产。我非常喜欢使用 Jupyter 和 Colab 这样的笔记本环境。它们使数据分析变得非常互动。
你最不喜欢 Python 的什么?
类的内置文档字符串,如列表和字典,需要进行一些清理。它们对新手来说很难理解。
软件行业 10 年后会是什么样子?
我没有水晶球。对我来说,现在和 10 年前的主要区别是利用云。否则,我使用许多相同的工具。我预计未来 10 年的编程将非常相似,仍然会出现一些错位错误,CSS 仍然很难,也许部署会稍微容易些。
你会短线哪种技术?
我想象专有的数据分析工具将会像恐龙一样灭绝。也许会有努力将其开源以拯救它们,但为时已晚。
你会推荐对 Python DevOps 感兴趣的人学习的最重要的技能是什么?
我认为好奇心和学习意愿非常重要,特别是因为许多工具都在快速发展。似乎总是有新的产品或新的软件出现。
你会推荐别人学习的最重要的技能是什么?
我有两个答案。首先,学习如何学习。人们有不同的学习方式。找到适合自己的方式。
另一项技能不是技术性的。那就是学习如何建立人际网络。这不必是个贬义词,对科技行业的人非常有用。我大部分的工作和工作机会都来自于人际网络。这将带来巨大的回报。
向读者介绍一些关于你的酷事。
我喜欢外出活动。这可能是跑步、究极徒步旅行或滑雪。
个人网站/博客
公司网站
公开联系信息
迈克尔·福德
你在哪里工作,做什么工作?
我过去的两份工作都是在 DevOps 工具上工作,这导致我对这个主题产生了不情愿的热情。不情愿是因为我曾长期怀疑 DevOps 运动,认为这主要是管理者希望开发人员也做系统管理员的工作。我现在看到,我真正关心的 DevOps 部分是系统级的思维,以及开发过程完全意识到这一点。
我在 Canonical 为 Juju 工作了三年,在那里我尝试了使用 Go 进行编程,然后在 Red Hat 为 Ansible Tower 构建了一个测试自动化系统。从那以后,我一直是自由职业者,同时进行培训、团队指导和合同工作,包括我现在正在进行的一个 AI 项目。
在我丰富的空闲时间里,我作为 Python 核心开发团队的一员工作在 Python 本身上。
你最喜欢的云是什么,为什么?
我要稍微侧面回答这个问题。我的最爱云是所有云,或者至少不用太担心我使用的是哪个云。
Juju 模型以与后端无关的方式描述您的系统。它提供了一种描述您的服务及其之间关系的建模语言,然后可以部署到任何云。
这使您可以从 AWS 或 Azure 等平台开始,并出于成本或数据安全原因迁移到像 Kubernetes 或 OpenStack 这样的本地私有云,而无需更改工具。
我喜欢控制我的主要依赖项,因此我更喜欢使用类似 OpenStack 的东西而不是公共云。我也是 Canonical 的 MaaS(金属即服务)的粉丝,这是一个裸金属提供程序。我相信它最初是作为 Cobbler 的一个分支启动的。您可以直接使用它,或者作为管理硬件的私有云的基础。我编写了连接到 MaaS 2 API 的 Juju 代码,并对其印象深刻。
我更喜欢 LXC/LXD 或 KVM 虚拟化,而不是 Docker(在今天几乎是异端邪说),因此 Kubernetes 或 OpenShift 不会是我的首选。
对于商业项目,我有时会推荐 VMware 的云解决方案,主要是因为这些系统的管理员使用情况。
你什么时候开始使用 Python?
我大约在 2002 年开始以 Python 作为业余爱好进行编程。我非常喜欢它,以至于在 2006 年左右全职从事编程工作。我很幸运地在伦敦的一家金融科技初创公司找到了一份工作,那里我真正学到了软件工程的技艺。
你最喜欢 Python 的哪个方面?
这是实用主义。Python 非常实用,这使得它在处理实际任务时非常有用。这种实用性延伸到了力求使理论与实践相匹配的对象系统。
这就是为什么我喜欢教 Python。大部分情况下,理论与实践是一致的,所以你可以同时教授它们。
你对 Python 最不喜欢的是什么?
Python 已经很老了,如果包括标准库的话,就更加庞大了。Python 有一些缺陷,比如描述符协议中的对称性不足,这意味着你不能为类描述符编写设置器。但这些大多数都是小问题。
对我来说,最大的问题是缺乏真正的自由线程。在多核世界中,这变得越来越重要,而 Python 社区多年来一直对此视而不见。幸运的是,我们现在看到核心开发人员正在采取实际步骤来解决这个问题。子解释器支持已经有几个 PEP 在积极地工作中。也有人正在考虑[可能]放弃引用计数的垃圾回收,这将使得自由线程变得更加容易。事实上,Larry Hastings 在他的 Gilectomy 实验中已经完成了大部分工作,但仍受到引用计数的限制。
软件行业未来十年会是什么样子?
我认为我们现在正处于人工智能的早期热潮中。这将会产生成千上万个短命和无用的产品,但也将彻底改变整个行业。人工智能将成为大多数大型系统的标准组成部分。
此外,DevOps 正在为我们提供一种思考系统开发、部署和维护的方式。我们已经在微服务和多语言环境中看到了其影响。我认为我们将会看到新一代 DevOps 工具的兴起,这些工具将民主化系统级思维,使得构建和维护大规模系统变得更加容易。这些问题将变得更加“解决”,而前沿领域将扩展到尚未描述的新挑战。
你会对哪种技术进行空头交易?
哦,这是一个具有挑战性的问题。我要说的是当前一代的 DevOps 工具。
DevOps 的天才在于将复杂的部署和配置知识编码化;例如,使用 Ansible 编写的 playbooks 和 Juju 的 Charms。
理想的 DevOps 工具将允许您以一种与后端无关的方式描述和编排系统,并且还将整合监控和对系统状态的感知。这将使得部署、测试、重新配置、扩展和自我修复变得简单且成为标准功能。
或许我们需要一个面向云的应用商店。我认为很多人都在努力朝这个方向发展。
你会推荐对 Python DevOps 有兴趣的人学习什么技能?
我倾向于通过实践学习,所以我反感被告知学习什么。我肯定是为了学习新技能而接受工作的。我加入 Canonical 的初衷是因为我想学习 Web 开发。
因此,实际经验胜过学习。话虽如此,虚拟机和容器很可能仍然是系统设计和部署的基本单位。熟练地操作容器具有非常强大的能力。
网络技能很难,也很重要,是一项非常宝贵的技能。结合软件定义网络层中的容器,这将是一个强大的组合。
你推荐别人学习的最重要的技能是什么?
你永远不会知道足够多,所以最重要的技能是学习和改变的能力。如果你能够改变,你永远不会被困住。被困住是世界上最糟糕的事情。
告诉读者关于你的一些酷炫事情。
我从剑桥大学辍学,曾经无家可归,多年来生活在社区中,我卖过砖十年,自学编程。现在我是 Python 核心开发团队的一员,并有幸游历世界演讲和教授 Python。
个人网站/博客
公开联系信息
推荐
“所有模型都是错误的……但有些是有用的”,这当然适用于任何关于 DevOps 的一般建议。我的分析中有些部分肯定是错误的,但有些部分是有用的。我个人的偏见不可避免地在我的分析中起作用。尽管在一些分析中可能是错误的并且存在极大的偏见,但大多数公司管理中显然存在一些紧迫的问题需要解决。其中一些最优先的问题包括:
-
地位差异导致了责任问题,软件稳定性是一个非常显著的例子。工程经理(特别是创业公司的创始人)特别需要承认非正式地位封闭如何影响软件质量,并加以修复。
-
许多组织存在一种无意义风险的文化(发射银子弹对比修复破窗),这是一个问题。
-
许多组织在卓越标准上存在无效或无意义,并且在工程领域普遍缺乏纪律。
-
文化上,数据并未被用来做出决策。最高薪水者的意见(HIPO),地位、攻击性、直觉,甚至是掷骰子可能都是决策的原因。
-
高管对“机会成本”概念的真正理解依然难以达成。这种理解的缺乏随后影响了各个层级。
-
需要增加对“精英主义”而非“蛇油和胡扯”的关注,正如 Kaggle 的高级数据科学家杰里米·霍华德所言。
几个月内在工程领域可以落实的“正确”事情:工单系统、代码审查、测试、规划、调度等。公司的高级领导团队可以同意这些是正确的事情,但是他们的行动必须与他们的话语一致。而不是专注于执行、一致性和问责制,高级领导层通常专注于用高性能象枪射银子弹。不幸的是,他们经常错过每头大象。高级管理团队应该从这些错误中吸取教训,避免围绕这些错误产生负面文化。
练习
-
一个高效团队所需的核心组成部分是什么?
-
描述你作为团队成员可以改进的三个领域。
-
描述你作为团队成员擅长的三个领域。
-
未来所有公司都正确的是什么?
-
为什么 DevOps 需要外部支持和认可?
挑战
-
使用 Larson 和 LaFasto 的团队合作框架,对你当前的团队进行详细分析。
-
让团队的每个人填写匿名索引卡,上面列出每个小组成员的三个积极和三个有价值的反馈项目(必须包括积极和负面问题)。让每个人在房间里读出来来自队友的索引卡。(是的,这确实有效,并且可能是团队成员的一次改变人生的经历。)
毕业项目
现在你已经读完这本书,可以完成一个毕业项目,展示你掌握的概念:
-
使用书中探讨的思想,创建一个通过 Flask 提供预测的 scikit-learn、PyTorch 或 TensorFlow 应用程序。在完成所有这些任务的同时将该项目部署到主要的云提供商:
-
终端和健康检查监控
-
连续交付到多个环境
-
记录到像 Amazon CloudWatch 这样的云服务
-
进行性能负载测试并创建可伸缩性计划
-
¹ Anca Metiu,《掌控代码:分布式团队中的状态封闭》,《组织科学》,(2006 年 7-8 月)。
² Anca Metiu,《掌控代码:分布式团队中的状态封闭》,《组织科学》,(2006 年 7-8 月)。
³ Larson, C. E., & LaFasto, F. M. J.(1989)。《人际交流中的智慧系列,第 10 卷:团队合作:什么必须做对/什么可能出错》。千橡市,加利福尼亚州,美国:Sage 出版公司。