沧州三亚菏泽经济预测自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

系统设计黄金法则简单之美

12月20日 长歌行投稿
  最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自己的一些实践教训,让我觉得应该把这些资料汇总整理一下。如果要从讨论不同系统的众多资料中总结一条黄金法则的话,那只有一个词简单;如果用一个英语单词来表达的话,那就是KISS(KeepItSimple,Stupid!)。
  麻省理工方法与新泽西方法(MITApproachvs。NewJerseyApproach)【1】【2】
  这个观点来自一篇很经典的文章,RichardGabriel在1989年写的文章中的一节TheRiseof‘WorseisBetter’。说来惭愧,我是直到2011年5月在IBMT。J。Watson实验室听报告才第一次听说,当时便印象深刻。后来上普林斯顿的高级系统设计课程,发现这篇文章也在ReadingList中,要求所有学生阅读然后在课上讨论。
  TheRiseof‘WorseisBetter对比了以LISP系统为代表的麻省理工方法和以UnixC为代表的新泽西(贝尔实验室)方法。Gabriel发现相比于LISPCLOS系统完美的设计,UnixC只是一味追求实现简单,但事实却证明UnixC像终极计算机病毒那样快速蔓延,奠定了今天计算机系统的基础。
  让我们来看看这两种不同的设计哲学。
  1)MITApproach
  简单性:设计必须简单,这既是对实现的要求,也是对接口的要求。接口的简单要比实现的简单更加重要。
  正确性:设计在任何值得注意的方面都要保证正确。不正确是绝对不允许的。
  一致性:设计必须保持一致兼容。设计可以允许轻微少量的不简单和不完整,来避免不一致。一致性和正确性同等重要。
  完整性:设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都必须覆盖到。简单性不能过度的损害完整性。
  2)NewJerseyApproach
  简单性:设计必须简单,这既是对实现的要求,也是对接口的要求。实现的简单要比接口的简单更加重要。简单是设计中需要第一重视的因素。
  正确性:设计在任何值得注意的方面都要求正确。为了简单性,正确性可以做轻微的让步。
  一致性:设计不能过度不兼容一致。为了简单,一致性可以在某些方面做些牺牲,但与其允许设计中的这些处理不常见情况的部分去增加实现的复杂性和不一致性,不如丢掉它们。
  完整性:设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都应该覆盖到。为了保证其它几种特征的品质,完整性可以作出牺牲。事实上,一旦简单性受到危害,完整性必须做出牺牲。一致性可以为实现的完整性作出牺牲;最不重要的是接口上的一致性。
  如果觉得这种哲学描述太抽象的话,原文中有一个关于Unix中断处理的例子,非常生动。一位MIT的教授一直困恼于Syscall处理时间过长出现中断时如何保护用户进程某些状态,从而让用户进程能继续执行。他问新泽西人,Unix是怎么处理这个问题。新泽西人说,Unix只支持大多数Syscall处理时间较短的情况,如果时间太长出现中断Syscall不能完成,那就会返回一个错误码,让用户重新调用Syscall。但MIT人不喜欢这个解决方案,因为这不是正确的做法。
  UnixC开发于1970年前后,那时离1964年刚推出的IBMSystem360没几年,软件刚摆脱硬件束缚,能移植到不同的机器上,从而变成了一种可单独出售的产品。就是这样的一个软件产业的萌芽期,这种实现简单的理念被证明是更有效的。那么在今天的互联网时代,这种理念还有效吗?我们再来看下一篇文章。
  来自互联网巨头们的教训【3】
  这是最近看到的一篇文章,作者从HighScalabilityBlog上总结了几大互联网在设计后台数据中心所遇到的教训(这篇文章总结的非常好,强烈推荐大家读一下)。文章开头就总结了七个互联网公司(Google,YouTube,Twitter,Amazon,eBay,FacebookandInstagram)都提到的6点教训:
  Keepitsimplecomplexitywillcomenaturallyovertime。
  Automateeverything,includingfailurerecovery。
  Iterateyoursolutionsbepreparedtothrowawayaworkingcomponentwhenyouwanttoscaleituptothenextlevel。
  Usetherighttoolforthejob,butdon’tbeafraidtorollyourownsolution。
  Usecaching,whereappropriate。
  Knowwhentofavordataconsistencyoverdataavailability,andviceversa。
  第一点就是简单,但和NewJerseyApproach的原因和内涵有所不同。不同于Unix时代相对简单的单机系统,互联网时代的大公司的系统往往都是成千上万台机器,在这样的系统上部署、管理服务(软件)是一项非常有挑战的任务。而为大规模用户提供的一项服务往往会涉及到众多模块、若干步骤。此时简单就是要求每个阶段、每个步骤、每个子任务尽量采用最简单的解决方案,这是由于大规模系统内在的不确定性导致的复杂性决定的。
  即使做到了每个环节最简单,但由于不确定性的存在,整个系统还是会出现不可控的复杂性。比如,Google的JeffDean最近在UCBerkeley有个报告【4】介绍他们努力缓解大规模数据中心中的LongTailLatency难题。问题简单描述如下:假设一台机器处理请求的平均响应时间为1ms,只有1的请求处理时间会大于1s(99thPercentile)。如果一个请求需要由100个这样的节点一起处理,那么就会出现63的请求响应时间大于1s,这样的系统完全是不可接受的。面对这个复杂的不确定性问题,Google他们做了很多工作,权衡各种Tradeoff,具体请看这个报告【4】。
  大规模数据中心,看起来似乎和我们普通的开发人员离得比较远。但最近看PaulGraham写的《HackersandPainters》这本介绍硅谷创业公司的书,发现Graham也在多处强调简单。
  PaulGraham的《HackersandPainters(黑客与画家)》
  PaulGraham被称为硅谷创业之父。他在1995年和MIT的RobertMorris教授创办了Viaweb,于1998年被Yahoo!以4900万美元收购。2005年,他又创办了YCombinator创业孵化器公司,帮助80多家创业公司成长起来,其中包括Dropbox(市值大于40亿美元)、Airbnb(市值大于13亿美元)等。显然,Graham有丰富的创业经验。
  Graham在设计者的品味一章中写到,好的设计是简单的、简单就是美,正如漂亮的数学证明往往是简短而巧妙的那种。他提到,有些创业者希望第一版就能推出功能齐全的产品,满足所有的用户需求,但这种想法是致命的。在硅谷创业最忌讳的就是PrematureOptimization。因为一方面用户需求是多样的,不同人群都有不同的需求;另一方面开发者想象的需求往往和真实的用户需求有偏差。所以,Graham推崇那种有用户参与反馈的迭代优化的方式。
  无独有偶,最近至少听到两个报告提到了Facebook的开发模式。当Facebook开发一个新的服务,会先让一个小用户群使用,根据用户的反馈来修改功能,同时可以调试程序中的bug。然后下一版让更大一些的用户群使用,收集用户反馈继续修改程序。如此反馈几次,最后再推向所有用户。这种模式要求再最初设计时尽量简单,从而只需几个月的时间就能推出一个新的功能,然后再不断地优化完善。
  到目前为止,谈的工业界偏多一些,但其实在系统领域的学术研究,简单法则同样适用。
  李凯教授:KISS原则
  普林斯顿大学计算机系的李凯教授是KISS原则的坚决贯彻者。几乎每次和李凯老师讨论,他都会强调KeepitSimple。李凯老师的做事方式是只抓住大方向,其他问题尽量简化。
  但真正要做到KISS原则其实并不容易。我在遇到问题时,往往会从各个方面去考虑问题,其中难免包含了各种细枝末节,这种方式导致问题经常会变得非常复杂。之前讲过这个例子,在移植TCPIP协议栈到用户态时,我觉得有约10个功能需要考虑。和李老师讨论,他让我把那些功能分成两类:必须有(MustHave)和可以有(NicetoHave)。当我试了这种方法,发现原来MustHave的功能其实也不过23个而已。而最近的例子则是在要设计一个功能让TCPIP连接的Server在模拟器中、Client在真实机器。我考虑是尽量减少模拟器上OS的开销,所以打算采用自己写一个设备、然后让用户态程序BypassKernel直接访问该设备的方案。但李凯老师在了解OS开销以后,认为容忍开销、尽量直接使用模拟器自己带的功能,让开发更简单。
  这些教训也让我不断地去思考为什么要用KISS原则。慢慢地我体会到,KISS原则目的其实是快速推进、逐步优化。我们设计一个算法,往往可以在大脑中预先思考好,然后直接编程写出来。但是,我们设计实现一个系统,当系统的复杂度超出我们大脑的工作记忆容量时,就无法在大脑中去模拟每一个细节。此时,我们应该用最快的速度去把系统建起了,然后再对各个环节进行优化。
  这个KISS理念并不是计算机系统领域特有的,最早是来源于研制飞机时提出的设计理念。而在其他领域,如果一个任务涉及多个步骤,也同样有效,比如生物研究。我去年前曾看过施一公教授写的一篇文章中也提到了这一点。
  施一公教授:耗费时间的完美主义阻碍创新进取【5】
  2011年9月清华大学施一公教授在科学网上发布了一篇博客《如何做一名优秀的博士生:(二)方法论的转变》,其中介绍到完美主义的危害,其实是从另一个角度来强调简单。
  施教授讲了他博士后期间的一个故事。一次他的任务是纯化一个蛋白。两天下来,虽然纯化了,但是产量只有20。
  他不好意思地对导师说,产率很低,我计划继续优化蛋白的纯化方法,提高产率。
  但导师反问:你为什么想提高产率?已有的蛋白不够你做初步的结晶实验吗?
  他回敬:我有足够的蛋白做结晶筛选,但我需要优化产率以得到更多的蛋白。
  导师不客气地打断:不对。产率够高了,你的时间比产率重要。请尽快开始结晶。
  实践最后证明他导师的建议是对的。
  对于这个故事,施一公教授总结如下:
  在大刀阔斧进行创新实验的初期阶段,对每一步实验的设计当然要尽量仔细,但一旦按计划开始后对其中间步骤的实验结果不必追求完美,而是应该义无反顾地把实验一步步推到终点,看看可否得到大致与假设相符的总体结果。如果大体上相符,你才应该回过头去仔细地再改进每一步的实验设计。如果大体不符,而总体实验设计和操作都没有错误,那你的假设(或总体方向)很可能是有大问题的。
  这个方法论在每一天的实验中都会用到。比如,结构生物学中,第一次尝试纯化一种新的蛋白不应该追求每一步的产率,而应该尽量把所有纯化步骤进行到底,看看能否拿到适于结晶的蛋白。第一次尝试limitedproteolysis,不应该刻意确定protease浓度或追求蛋白纯度,而是要关注结果中是否有proteaseresistantcoredomain。从1998年开始自己的独立实验室到现在,我告诉所有学生:切忌一味追求完美主义。
  我把这个方法论推到极限:只要一个实验还能往前走,一定要做到终点,尽量看到每一步的结果,之后需要时再回头看,逐一解决中间遇到的问题。
  结语
  我想从各个角度去阐释简单之美,但到最后感觉这篇文章就是一个大杂烩。既然如此,那我就再加一点料。
  ElonMusk是现实世界中的钢铁侠,他先后创办了网络支付公司PayPal、电动汽车公司Tesla以及空间探索公司SpaceX。目前SpaceX研制的猎鹰火箭已成功试飞,并得到NASA16亿美元的合同。为了减低成本和提供可靠性,SpaceX设计的火箭也到处渗透着简单【6】:在他们的猎鹰1号运载火箭上,并没有很多专利,科学家们不在乎,只要火箭能飞就行。火箭用的主发动机也不是21世纪的最新设计,而是1960年代的老古董,只有一个燃料喷射器。它很老,但很可靠。
  参考资料
  【1】TheRiseof’WorseisBetter’
  【2】差点的更好设计理念的兴起
  【3】ScalabilityLessensfromGoogle,YouTube,Twitter,Amazon,eBay,FacebookandInstagramhttp:www。dodgycoder。net201204scalabilitylessonsfromgoogleyoutube。html
  【4】AchievingRapidResponseTimesinLargeOnlineServices,JeffDean,Google。http:research。google。compeoplejefflatency。html
  【5】如何做一名优秀的博士生:(二)方法论的转变,施一公,科学网博客http:blog。sciencenet。cnhome。php?uid46212id486270
  【6】硅谷企业家开设私人火箭工厂目标直指火星,新浪科技,http:tech。sina。com。cnd2012020916086703213。shtml
投诉 评论

贫贱夫妻1、老婆说做了个梦,梦见和别人xxoo了,我问:那你有没反抗啊?老婆:好像没有。我:你居然都不反抗,离婚!第二天半夜,睡得正香的时候被老婆一脚踢下床你干……看完西游记我邪恶了唐僧四人取经回来,记者分别对四人进行了采访。1。记者:孙大圣,我是两性网记者。请问,在这取经的十几年中,你是怎么解决自身的需要的?悟空:我有一根棍子。记者:我……十万火急快下夜班时,张强火急火燎地跑来了,正好和大头撞个满怀。你吃错药了吧?大头被撞得脑袋更显大了。十万火急,十万火急,快借车我用一下,要出人命了。张强喊。出什么情况……有朋自远方来悲乎老公:今天怎么不开心啊?老婆:我的蜜闺要来我这玩,我跟她聊天只是说了句客气话,想不到她真的要来老公:那有什么,来就来呗,有朋自远方来不亦乐乎?老婆:可是我跟她……都是女人惹的祸干柴勾动烈火,一点就着,星星之火,马上就要燎原到熊熊大火,可就在这个时候,意外出现了!好巧不巧,一只大马蜂子不知道从什么地方钻了出来,也许是被两个人破坏了它的居住场所,也……工程师发明了一款柔软却有力的机械手哈佛大学和麻省理工学院的机器人专家ShuguangLi及其同事计划在5月份的蒙特利尔机器人与自动化国际会议上展示他们最新发明的设备。那是一款机器手,兼具柔软触感和抓握力度……吃无花果的禁忌一般人群均可食用脾胃虚寒者忌食无花果在我们生活中是一种非常常见的水果,一般来说都是当水果直接吃的,但是也有人会拿无花果做果酱或者煮粥,那么吃无花果的禁忌有哪些呢?无花果真的适合所有人群吃吗?想进一步了解无花……系统设计黄金法则简单之美最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自己的一些实践教训,让我觉得应该把这些资料汇总整理一下。如果要从讨论不同系统的众多资料中总结一条黄金法则的话……猛人之作关于裸婚时代的吐槽裸婚时代这部剧火了,刚刚看到某网站的民意测验。80的男人都支持裸婚,80的女人都反对裸婚。很多猥琐男人都希望一毛钱不花娶个美女回来生崽洗内裤做饭,大胸细腰长腿,温柔善解人……男生工装裤配什么上衣男生工装裤的搭配方式01:hr【工装裤西装】职业型男的穿搭不仅要够成熟和正式,潮流气息也要兼顾,西装成套的穿过于死板,在人群中和路人甲没什么区别,可以用军绿色工装代……比基尼毛发太浓密肿么办有很多人因为遗传等原因,可能是天生的,导致部分女性比基尼部位毛发过于浓密。当你去洗澡时,看见过多的毛发,那么心情总是不会太好。现代社会里,汗蒸,桑拿,游泳各种各样的活动都在吸引……一带一路背景下我国经济发展面临的机遇与挑战吉才琦江堰维刘义沨杜后荣刘小勇【摘要】在新常态经济背景下,我国的市场经济得到了迅速的改革和发展,一带一路是实现各方面开放的主要战略,这表明我国经济进入了一个新的发展阶段。……
幸福的煎熬四十八各自寻爱职场中你需要现在就开始培养的个习惯快速给视频加字幕全自动双语字幕软件制作教程李想创业者的投资秀是谁拯救了我的青黄不接十一高尔基童年中的重要人物形象分析如何才能成为一个自律的人孩子是你给我勇气一位婚姻困顿中的妈妈写给女儿的信女生如何靠发型提升魅力让长发发型成为你的抢镜法宝已婚女人这里让男人欲罢不能忆苦思甜缕光染发随手一拨立马射出女神光告别单一发色缕光染2021影院热映电影何以为家观后感素材摘抄思维导图激发抽象思维增强记忆力出口如何查看电脑的显卡型号刘强东事件4年后,章泽天二胎产子,她的聪明让刘强东受用终身窦文涛:珍惜每一次当众出丑的机会去年的春节沒过好!今年的春节怎么过?(原创)妈妈我想对您说作文400字鼠年强姓女孩名字强姓女孩三字名合集帮助别人,快乐自己日记100字(共四篇)文竹叶子发黄的八大原因及修剪方法,对症解决酌情修剪海口哪家早茶人气爆棚?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找