开发者

环信CTO:“过早的性能优化是魔鬼”?

用这篇文章向Zen致敬,andthe,ArtofMotorcyleMaintententenancebookValues(中文名:禅和摩托车修理艺术,译名:万里禅游)一本书。摩擦车这个词是玩笑,cache这个词的中文拼音和摩擦车一毛一样,意味着附上了原作摩托车的主题,其实和摩擦车没有任何关系,权利是标题党的又一次苦心吧。

禅和摩托车修理艺术ndash的经典闪回

这本书写在上个世纪70年代,经历了126次被各大出版社拒绝后,由没有收益念头的编辑最终出版,成为那个时代最畅销的书籍:

的计算量已经超过了1000万册,相信这个数据会继续上升

- 著名物理学家 史蒂芬bull;霍金

这是一部哲学小说,书中内容由交替穿插的两种文体组成,一度让读者莫名其妙不知身在何处:一半是游记,记录了自己和儿子历经 17 天的摩托车之旅,横穿美国大陆从明尼苏达州直到加州海岸的行程;另一半则是哲学讨论,作者从旁观者的角度介绍曾经的自己(Phaedrus,斐德洛,精神分裂患者)不断苦苦思索,最终参透良质(不是良知,英文为quality/good)才是一切的源头和本质。

这绝对不是一本易读的书,书中的某些段落甚至是一句话,都需要我们反复体会其中深意。全书共分为四个部分,由浅入深,从表象到形而上学层层推进,带领读者渐次攀登到思想山峰的最高处。书中的后半部分逐渐倾向于形式上学的讨论,为了真正理解需要更多的作业,前半部分只关系到表象和实用主义水平的讨论,对从事技术工作的人们有直接的启发。本文下半场就以此为参考,谈谈我们应该如何在技术挑战过程中多投入,达到心流的状态。

对Cache执念

《禅和摩托车修理艺术》通过作者自己的经验,向我们展示了粗鲁、轻率、不合适的摩托车修理技术人员的形象,给作者带来了真正的噩梦。因为这个不好的修理体验,作者很痛苦,不是把自己喜欢的摩托车交给别人修理,而是通过不断研究摩托车的表象结构和运行机构,从摩托车的修理手册到各种零件都齐全,在什么样的恶劣条件和突发情况下能够轻松处理事件,不会卡住。

作为软件技术人员,你关心自己的代码,投入了多少热情?当你同意一个人应该关心并投入他最喜欢的工作时,你如何保持这种热情?我相信和我一样的码农读完这本书后,不由得问了自己这样的问题。即使暂时不知道良质,也是佛是学校的终极思考。

如果一个人在工作中能看到良好的质量,感受到它的存在,他就是关心工作的人。如果一个人关心自己看到的东西和手里做的东西,他一定有良好的特性。

P311

前几天做了系统本地缓存的最佳化工作,与新产品线的扩展相比,不一定有多少创造性,也有人认为不是在现有系统中进行的小变更,没有重要性。但是,如果关心自己的工作,实际上总是被良质驱使,集中精力思考和实践,也能实现知识微观的哲学体验。

再次考虑进入计算机的维度

缓存是互联网应用中最常见的组件,几乎所有员工都熟悉。说到缓存,Redis已经成为缓存领域的通用组件,几乎可以在大多数网络产品的结构设计中看到。因此,Cache=Redis的烙印深深植入了所有程序员的心中,Redis当然是解决缓存问题的终极方案,放置Redis屏幕在系统结构中也成为下意识的动作。

经过几年的反复,Redis在我们的系统结构中也成为最重要的信息存储部件,其价值和系统成本当然也成为比例。可是,当我们把目光转向性能提升的时候,才发现Redis竟然成了性能的瓶颈,不得不要继续深入到缓存的密林深处,继续挖掘我们可以利用的机器资源来实现更高效的数据分布、更快的数据访问,进而提升系统的吞吐量和并发数。在这个过程中,你的思考方式需要逐渐从人的直觉体验转化为计算机的直觉体验,那股心流会让你与机器混为一体,你突然发现自己的思考时空尺度进入了一个更微小和高频的世界。

先来看下这个 Latency Numbers Every Programmer Should Know,你能够猜到一个 Redis 的跨网络查询调用和本地缓存的延迟差距吗?目前常见的云服务商同一机房中两台虚拟机之间的延迟在1ms左右,假设Redis的存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存储器存器存储器存器存储器存器存器存器存储器存储器存器存器存储器存储器存储器存器存储器存储器存储器存储器存器存器存储器存器存器存器存储器存储器存器存器存器存储器存储器存储器存器存器存储器存器存器存储器存储器存器存器存储器存储器存器存器存器存器存器存器存器存器存储器存器存器存器存储器存储器存器存器存器存器存器存器存器存储器存器存器存器存器存器存器存器存储器存储器存储器存器存器存器存器存器存储器存器存器存储器存器存储器存储器存器存器存器存器存器存器存器存器存器存储器存器存储器存储器存储器存器存器存储器存储器存器存器存器存器存器存器存器存器存储器存器存器存器存器存器存器存器存器存储器存储器存储器存储器存储器存储器存储器存器存储器存储器存储器存器存器存器存器存器存器存器存储器存器存器存器存器存器存器存器存器存器存器存器存储器存储器存器存器存器存器存器存储器存储器存器存器存器存器存器存器存器存器存器存器存储器存器存储器存储器存器存器存器存器存储器存储器存储器存器存储器存器存储器存储器存储器存储器存用人自己的绝对体验尺度来测量这个1ms的话,那个短的可能不值得。结果,人的眨眼需要100ms的时间。

但是,将两者的相对差异扩大到人的体验时间尺度后,

4分钟:11这意味着,如果你把机器的每一次执行逻辑视为成年人的第一秒,通过当地缓存访问只需要4分钟就可以完成,通过深圳缓存访问需要10个工作日!应该注意的是,这只是缓存访问带来的时间差异,如果缓存访问代码不断被调用的话,时间差异真的会变成天壤之别,以人的时空尺度体验为参考):假设连续调用1000次,相当于下一个月2月:30多年的差异。

缓存技术的本质

除了时间尺度的比较之外,缓存技术的真正挑战是如何在时间、空间、成本之间进行细致的规划,达到最佳化的目标。困难:在计算机结构中,高速数据存储介质(如CPUL1、L2、Cache)越高,计算设备必须受总经济成本的制约设计,因此在整个计算机硬件配置中高速存储不足,大量数据存储介质访问速度最慢。

将缓存的合理使用作为动态计划的问题,系统应具有一定的限制条件和特定的计算问题的最佳解决方案。如何让缓存系统动态的适应不同计算问题,使得数据能够在不同层级缓存中(L1,L2,Memory,Network,Disk,etc.)根据优化目标的要求进行自由的流动、重新部署是缓存架构的终极挑战。

特别是,数据在不同缓存介质中的这种流程应根据数据本身的大小、使用频率、利用价值的存在周期等参数/反馈进行动态计算。理想中的(动态)缓存管理系统应能够自适应,根据起始输入参数/数据集不断进行反馈调整,最终达到动态的最佳分布。

近年来,DynamicheManagement1、2的讨论开始增加,之后也继续关注相关理论和技术的进展。

在机械思维和人类思维之间切换

软件工程师总是用计算机思维来考虑问题。但是,由于我们开发的系统基本上是为人开发者_如何转开发服务的,随着你工作经验的积累,越来越多的业务、产品水平的思考无意识地将你恢复到客户/用户的思考水平,你的结构设计、代码无意识地恢复到人们普遍感知的时空水平。回顾过去几十年软件设计的发展过程,面向对象、领域规范语言、Specificlanguage)、微服务设计(Micro-servicedesign)等,用业务、场景指导我们的编码,我们已经习惯了人类可读性的逻辑、语言指导软件的设计和开发工作。

这一切都不厚,软件、互联网行业多年来的繁荣也证明了其方向基本正确。软件行业会继续沿着机器计算为人类服务的方向不断演进变化。近年来风头正劲的低代码平台、AI Code to Coding等技术也在试图抹平人类和机器思维之间的鸿沟,让普通人也可以通过最善于流畅表达的人类思维模式来指导计算机满足自己的需求。另外,过早的性能优化就是魔鬼这个行业内的格言也告诉我们,优先采用人类思维,根据业务结构来指导软文写作是一个很大的原则。

为了提高软件系统的性能,或者用良好的驱动不断调整软件系统,使所有的计算资源接近终极状态时,不要忘记回到机械思维。在这个独特的机器时空维度上,我们必须比较,计算各字节的存储、访问优化,合理利用各种资源,最大限度地利用各种资源,以达到单位资源更大规模的业务负荷,或者在指定的业务负荷的前提下降低资源的消耗,实现绿色计算的目的。

结语

《禅和摩托车维修艺术》是一本好书,却不是一本容易读懂的书。大道至简,但是作者通过了经年的冥思苦想才悟到了这一真谛,却是费尽了周折,读此书就如同跟作者一起回忆了整个思想形成的过程,虽辛苦但也算是小有收获。如果有机会能进一步研读,随着作者的行文脉络一并了解古今、东西方众多哲学先贤的著作及思想精髓,幸甚!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜