写点什么

InfoQ 播客: Caitie McCaffrey 谈工程有效性和验证分布式系统

2016 年 8 月 01 日

本周的 InfoQ 播客内容是 QCon 主席 Wes Reiszt Werner Schuster Caitie McCaffrey 之间的谈话。Caitie McCaffrey 在 Twitter 的工程有效性团队工作,专注于分布式系统。他曾经就职于 343 Industries、微软游戏工作室和 HBO 电视网等,对于构建支撑娱乐内容的大型分布式服务和系统有丰富经验。Caitie McCaffrey 在这次 QCon 纽约大会上演讲的题目是“验证分布式系统”。

关键要点

  • Twitter 的工程有效性团队主要任务是不断改进开发工具,要让程序员们工作更愉快,更高效。
  • 如果仅仅因为性别而请人在你的会议上讲话,或者邀请人家加入你的团队,这种行为的害处远超大家想象。
  • 没有什么约定俗成的办法来打造又好又成功的技术。
  • 即使有时候没有时间做测试,也有别的办法来提高你对你的系统的信心。
  • 运行单元测试的最大问题是它只是在测试你写死在测试用例中的那些输入值。

要点

工程有效性

  • 1 分:24 秒 - Twitter 的工程有效性团队主要任务是不断改进开发工具,要让程序员们工作更愉快,更高效。
  • 2 分:44 秒 - 团队在努力实现一些架构,这样就不必让每个团队都自己去解决那些分布式问题。为开发者们提供一些 API 和工具,这样大家就可以很容易的构建系统。
  • 3 分:45 秒 - 挑战之一是我们用超时来做分布式系统中的失效检测,但有的任务一跑就是一个小时,没办法设置超时时间,所以就有很多不同的事情要做。对于用户要执行的有多个子任务的任务,我们使用了 SAGA 模式。SAGA 也是一种处理分布式事务的办法,它可以保证一个任务的所有子任务都正常运行。
  • 6 分:01 秒 - 如果你是离线的,那所有东西都要在你断线时运行,并且要在你连上 VPn 或者网络时就立刻在后台进行身份认证,并且把构建等任务都跑得更快。

趋近多样性

  • 7 分:30 秒 - 他们让我多说些,我想他们本意肯定是好的。但如果退后一步再多想一下,假如因为我是一位女士而被要求发言时,那好像就是在说:“你把这些事情全都做了吧,但我们只是因为你是个女的才找你的。”
  • 8 分:35 秒 - 有很多奇怪的现象,就是说出来的话和本来要表达的意思是不一样的,但是这样的谈话却到处都在发生,这让大家实在感觉太不好了。有许多本意是好的东西却给人造成了意想不到的伤害,这就是其中之一。
  • 11 分:05 秒 - 很多问题最终都归因于网络故障。人们会说,在技术上没有怎么怎么样的团队。但是看看 Helena Price 他们的 Techies 项目,他们的团队也是由各种不同背景的人组成的。Price 在旧金山也没怎么花力气招聘,就招到了这些人。

验证分布式系统

  • 12 分:55 秒 - 由于各种原因,测试并不是我们团队很擅长的一项技能。
  • 13 分:30 秒 - 有很多方法来提高你对你的代码的信心,也有很多事例证明做测试有时候带来的回报并不如你直观想像的那么多。
  • 13 分:54 秒 - 我们人手有限,又要按时提交项目,那我们哪里有时间做测试呢?事实上是有别的办法来让你相信你的系统可以如愿运行的。
  • 14 分:30 秒 - 我们都在构建分布式系统。我在谈的是单元集成测试,以及一些你要关注的而且可以获得最大价值回报的方面,就是基于属性的测试,它差不多是模型检验器和错误注入测试的工业版。它们中的每一个都有很多值得你去投资的内容。
  • 16 分:30 秒 - 形式验证是非常有趣的,亚马逊用 TLA+ 来验证他们的核心架构内容,比如 S3。Koch 不太为人所知,你可以用它来写下你的描述,然后生成 Ocaml 代码。Diego Ongaro 刚刚发布了 Runway,也是一个形式描述工具。
  • 18 分:33 秒 - 对这方面研究成果会是非常巨大的,因为这可以让我们把事情做得更好,而不必把过多时间花在测试、验证和调试上。

模型驱动开发

  • 20 分:40 秒 - Leslie Lamport 写过一本关于 TLA+ 的书,书中提到在实现系统之前先做好设计是个非常好的想法。在你实现之前,你应该先把规范写出来,因为它会逼着你把整个事情从头到尾都想清楚。
  • 21 分:00 秒 - 写规范就是形式验证的第一步,你可以用模型检验器来先跑一遍检查一下。做这件事是非常有用的,甚至不必再试着去证明它是正确的,因为许多的 BUG 在写规范的过程中就会被发现了。
  • 21 分:30 秒 - 做这件事是有非常重大意义的,特别是处理很多非常复杂的系统和异步消息时,处理不同级别的一致性会更加困难。

类型理论

  • 22 分:45 秒 - 如果你仍然想用和以前写代码一样的方式去写,那你可以先写一个顶层描述——跑一些东西就可以知道正确与否需要你有比较强的类型理论,或者是用某种编程语言写的类型系统。但象 Go、JavaScript 或 Python 等没有类型的语言是不属于我们现在讨论的范围之内的,要想它们也能运行一个形式方法检验器就可以检查错误,除非有的人正在为它们构造类型系统。

属性测试

  • 24 分:58 秒 - 我觉得属性测试超级有用。QuickCheck 是 John Hughes 写的,它的思想就是你为你的系统定义一些属性,那你就可以通过这些属性的各种组合来构造复杂的测试用例。
  • 25 分:38 秒 - 运行单元测试的最大问题是它只是在测试你写死在测试用例中的那些输入值。
  • 26 分:06 秒 - 如果你用一个基于属性的测试工具来定义这些东西的话,它很象一个模型检验器,但它不会测试整个系统的所有状态。你不能说这样的系统就没问题了,但是它测到的内容肯定比单元测试多。
  • 27 分:05 秒 - 你可以用这种方法发现许多隐藏得很深的 BUG,因为它可以产生非常多的输入,以及各种输入的组合。

错误注入

  • 30 分:12 秒 - Kyle Kingsbury 的 Jepsen 是一个非常好的错误注入和分析工具。
  • 30 分:35 秒 - 也有许多别的办法来注入错误,比如你把一个服务杀掉,再看看系统的反应怎么样。
  • 31 分:09 秒 - 我的许多灵感都来自于 Peter Alvaro 关于错误注入的论文,或者说他的工具 Molly。

关于 QCon 大会

QCon 大会是由 InfoQ 主办的全球顶级技术盛会,由业内人士推动,专为在团队中影响软件创新的技术团队主管、架构师以及项目经理而设计。QCon 每年的七场大会分别在伦敦、纽约、旧金山、圣保罗、北京、上海和东京召开。QCon 旧金山大会已经举办到第十届,今年将于 2016 年 11 月 7-11 日举行,届时会有 100 多名业内专家作为演讲嘉宾,并有 1300 多名与会者以及 18 个涉及如今推动软件开发发展的专题追踪报道。想要了解更多详情,请参见 qconnewyork.com 网站。

阅读英文原文 The InfoQ Podcast: Caitie McCaffrey on Engineering Effectiveness and Verifying Distributed Systems

2016 年 8 月 01 日 18:153730
用户头像

发布了 152 篇内容, 共 58.9 次阅读, 收获喜欢 53 次。

关注

评论

发布
暂无评论
发现更多内容

SGY奇点交易所系统源码开发

DV:19924636653

软件开发

英特尔力邀150家产业大咖推动Evo严苛认证,打造PC界的奥斯卡

intel001

周立齐出任电动车联合创始人:网红经济背后的病态消费心理

石头IT视角

快速接入 | 从 0 到 1 构建语音聊天室

拍乐云Pano

音视频 RTC 实时语音 语音聊天室 语聊房

九环智能合约开发

V19927655815

APP开发

如何基于 SDK 快速开发一款IoT App 控制智能灯(iOS 版)

IoT云工坊

ios App 物联网 IoT sdk

为什么说rollup比webpack更适合打包库

fengxianqi

前端 Rollup webpack

高空立体云防控系统搭建,智能化平安小区建设方案

t13823115967

平安小区 智慧平安社区建设

移动生态盘点与HMS生态解析

华章IT

华为 Android Studio 移动开发 HMS

字节二面跪拜“Redis源码”后,面试官直接推荐这份笔记!真是NB

比伯

Java 编程 架构 面试 程序人生

区块链溯源平台优势,区块链溯源系统解决方案

13530558032

直播中不可缺少的一环-rtmp直播推流

anyRTC开发者

音视频 WebRTC CDN RTC RTMP

为什么香港云服务器更适合放新网站

德胜网络-阳

应急指挥中心平台搭建,移动可视化指挥解决方案

t13823115967

可视化数据分析搭建 应急指挥

如何通过 Serverless 轻松识别验证码?

Serverless Devs

人工智能 Serverless 云原生

一线大厂开源三份JDK+Spring+Mybatis源码笔记

Java架构追梦

Java spring 源码 jdk mybatis

没能进入大数据领域

escray

面经 面试经历 101次面试

重点人员管控系统开发,情报研判系统开发

13530558032

智慧社区综合管理平台搭建,智慧平安城市建设

13530558032

华为18级工程师总结的50W字算法、LeetCode、操作系统、计算机底层刷题必备笔记

Java成神之路

Java 程序员 架构 面试 编程语言

智能合约交易所系统开发

DV:19924636653

软件开发

抢先体验全新升级版Eternal Wallet!

Geek_c610c0

数字货币 数字货币钱包开发

盘点 2020 | 10 天开发前台系统技术系列

老魚

CSS 前端 全栈 js 盘点2020

扒开 SqlSession 的外衣

田维常

mybatis

限时!字节Java程序性能优化宝典开源,原来这才叫性能优化

996小迁

程序员 面试 性能优化 笔记

APICloud AVM 多端开发 |外卖 app 开发案例源码教程(上)

APICloud

Vue Web Worker 前端框架 移动终端 前端训练

重磅|中国PostgreSQL分会与腾讯云战略合作协议签订

PostgreSQLChina

数据库 postgresql 软件 开源社区

云视频技术领军人赵加雨:如何提升在线教育课堂互动体验

拍乐云Pano

音视频 在线教育 RTC 互动课堂 白板

星域母子币系统软件开发|星域母子币APP开发

开發I852946OIIO

系统开发

Java:利用BigDecimal类巧妙处理Double类型精度丢失

程序员小毕

Java 架构 编程语言 阿里 开发

微服务架构思考 - 理清楚,管起来

jorden wang

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

InfoQ播客: Caitie McCaffrey谈工程有效性和验证分布式系统-InfoQ