程序开发中的“人类容错性”——老兵不死

标签: Idea Life Tech | 发表时间:2012-03-19 13:38 | 作者:Stanley Xu
出处:http://www.xuwenhao.com

周末得空,把前一阵买的MEAP版本的Big Data已经出了的两张给翻完了,觉得有点不划算,主要是内容之前在Nathan Marz的博客,以及Twitter发布出来的各类Slides里都已经看过了(话说Twitter去年年头上说Rainbird要开源到现在也是坑爹地没个影)。但是有一个新词儿还是让我觉得“心有戚戚焉”,把最近在Team里数据处理架构做的各种迁移工作的精髓给说出来了,就是这个Human Fault-Tolerance。

在这个人人都热衷于叫唤Big Data,讨论CAP理论的时候,Nathan同学一针见血地指出了一点,其实CAP也好,Cassandra的Dynamo模型也好,HBase的Big Table模型也好,看似非常酷非常好用,解决或者部分解决了各种一致性和可用性问题,但是其实对于Big Data处理的架构的最关键的一点,在于对于各种人类错误的容错性。

其实即使在没有海量数据需要处理的时候,各个程序也要考虑各种人类容错性。最简单的例子就在设计数据库的时候,对于删除操作大家都喜欢用个标记字段来标记删除,而不是真把记录删掉。类似的,在各种实时数据处理的事务里,除了普通的各种check和特殊情况考虑之外,通常有经验的程序员会做两件事情,一个是做日志,记录所有实时输入的日志,而是在整个处理的逻辑外面捕获所有的Exception,然后对Exception也会记录日志。做这些事情的原因是有这样一个假设,人会犯错,程序员会写出Bug。即使对程序做了充分的测试,但是当程序进入真实环境运行的时候,仍然会有你想不到的意外情况发生。当意外发生的时候,这些日志,记录能够帮助你把数据恢复到一个正常的状态下。记得在我工作的第一个年头里,就曾经花过一整天,将由于一个Bug引发的数据错误通过人肉SQL恢复过来。

当进入Big Data时代的时候,光光依靠简单的日志记录和人工恢复,已经不能够解决这些问题了。一天如果有个几条数据在几千条数据里面出错,也许你能够手工恢复过来;但是如果当一天的数据有几亿条,聚合后生成的数据记录也有几千条的时候,恐怕你就不能使用记录错误日志,然后人肉恢复的方式来解决问题了。而需要依靠在系统实现的架构层面来解决这些问题,Twitter推荐的实现方式就是让事实数据immutable,所以所有的数据都会记录,要看的数据是基于事实数据,计算出来的视图,非常简单粗暴,但是有效的方式。

话说回来,基本上,能不能写出Human Fault-Tolerance可以看做是一个程序员是否有充足的工业界工作经验的一条标准,这个不是依靠聪明和天赋能够解决的问题,而是完全依靠血泪教训得来的,从这个角度讲,老兵不死。虽然IT特别是互联网行业常常充斥着“30岁要转行,因为加班加不动了”,但是我向来是以为,有经验的工程师的价值始终被低估了。即使是不是Super Star的老工程师,也许光光写新功能写算法,未必比新人强出多少,但是这些血泪教训带来的经验,只要能够躲过一次问题,带来的价值也许就是一个工程师一两个月的工作量了(当然,无论如何记得,10年工作经验和1年工作经验重复10次的差别)。当然,更好地是团队能够拥有天才程序员,比你年轻比你聪明还比你身体好,比如Nathan Marz同学……

相关 [程序 开发 人类] 推荐:

程序开发中的“人类容错性”——老兵不死

- - 灰色的灵魂
周末得空,把前一阵买的MEAP版本的Big Data已经出了的两张给翻完了,觉得有点不划算,主要是内容之前在Nathan Marz的博客,以及Twitter发布出来的各类Slides里都已经看过了(话说Twitter去年年头上说Rainbird要开源到现在也是坑爹地没个影). 但是有一个新词儿还是让我觉得“心有戚戚焉”,把最近在Team里数据处理架构做的各种迁移工作的精髓给说出来了,就是这个Human Fault-Tolerance.

scala 开发spark程序

- - 研发管理 - ITeye博客
Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情. 如果你对Scala语言还不太熟悉,可以阅读网络教程 A Scala Tutorial for Java Programmers或者相关 Scala书籍进行学习. 本文将介绍3个Scala Spark编程实例,分别是WordCount、TopK和SparkJoin,分别代表了Spark的三种典型应用.

Eclipse开发Android应用程序入门

- Bingnan - 酷壳 - CoolShell.cn
原文出处:http://www.smashingmagazine.com/2010/10/25/get-started-developing-for-android-with-eclipse/. 如今的移动设备应用程序开发充满着让人振奋的东西. 功能强大的硬件支持,平板电脑,多样的软件平台(塞班 OS,iOS,WebOS,Windows Phone 7…),移动设备开发者前景充满了机会和挑战.

Web应用程序的开发步骤

- xxg - 月光博客
  如今已进入了web2.0高速发展的互联网时代,各种互联网的Web应用程序如雨后春笋般出现. 那么作为一名Web开发人员,怎样去开发一款优秀的Web应用程序呢. 这个问题没有一个简单的答案,甚至那些教育机构都未必能清楚的知道. 所以,像大多数在这个领域里的web开发人员一样,我们只是通过去做,去实验才学会了这些.

Web 开发程序员招聘

- GLORY - 云风的 BLOG
前两天在 blog 里提到了 web 前端程序员招聘的消息 , 结果这两天收到了好多热情洋溢的 email , 真是受宠若惊. 上次说的不详细,其实也没完全想好,只是之前在讨论公司架构的时候提到了这个岗位. 昨天晚上又讨论了一下,把需求细化了一些. 我个人,作为程序员,对 web 前端开发领域没有太多了解,很惭愧.

[程序员] Web开发入门(原创)

- Xinyu - V2EX
这篇文章最早发在水木web开发和IT业界板,都加精了. 原文在我的博客上,不定期会更新下内容. 顺便说下我创建的喜分分 http://www.xifenfen.com 也公测了,是一个个性化阅读,分享与收藏社区. 我读过的相关书籍发布在豆列(已更新):程序员的自我修养 http://book.douban.com/doulist/1268022/.

如何开发一个 N9 上的程序

- wang - Nokia Developer Wiki - Recent changes [en]
本文向大家演示如何开发一个基本的 N9 程序. 首先下载最新的Qt SDK 1.1.2,安装的时候不要使用默认安装,要选择自定义安装,自定义安装的时候记得在Harmattan前打上对勾,这样安装程序才会把开发 Meego平台所用的环境安装到机器上. 下面新建一个 Harmattan 工程:. 我们这里取名叫 helloMeego,以下步骤都按照默认设置即可,一直点到最后一步 finish 即可.

Mozilla希望Web开发可以取代原生程序

- bill - cnBeta.COM
Mozilla 正在构建 WebAPI,一组用于在浏览器中调用硬件设备功能的程序接口. 而之前,通常只有原生应用才能调用硬件功能. 此举意在开发一套跨平台解决方案,让开发人员只编写一次代码,就可以在所有移动平台上运行.

19个基于 HTML5 和 CSS3 开发的优秀应用程序

- Amo - HTML5研究小组
今天,本文向大家展示19个基于 HTML5 和 CSS3 开发的优秀应用程序. HTML5 可以说是近十年来 Web 标准最巨大的飞跃,它的使命是将 Web 带入一个成熟的应用平台,而 CSS3 同样给 WEB 开发带来了革命性的影响,以前很多需要 JavaScript 实现的复杂效果,现在使用简单的 CSS3 就能实现.

【转载】移动开发中HTML5能否替代本地程序?

- - HTML5研究小组
随着移动设备越来越先进,对HTML5的支持度越来越高,我们进军移动领域的时候,都会遇到一个问题,是选择HTML5和还是Native(用原生代码编写的本地程序). HTML5的前景无疑是诱人的,一句“Write once, run anywhere”就可以秒杀一切. 笔者最近两年来对HTML5与Native有较为深入的研究,觉得两者之间不能仅仅是二分法来选择,还要根据企业自身的情况、团队的构成、公司的战略以及产品的特点来综合选择.