中文字幕无码久久精品,13—14同岁无码A片,99热门精品一区二区三区无码,菠萝菠萝蜜在线观看视频高清1

您當前的位置是:  首頁 > 資訊 > 國內(nèi) >
 首頁 > 資訊 > 國內(nèi) >

環(huán)信CTO:“過早的性能優(yōu)化是魔鬼”

2021-04-20 10:08:13   作者:   來源:CTI論壇   評論:0  點擊:


  以此文致敬“ Zen and the Art of Motorcycle Maintenance — An Inquiry into Values ”(中文名:禪與摩托車維修藝術(shù),另譯名:萬里任禪游)一書。“擦車”一詞,純屬戲謔,只因”cache”一詞的漢語拼音和“擦車”一毛一樣,又意附了原作“摩托車”的主題,實則和擦車沒有任何關(guān)系,權(quán)當是標題黨的又一次苦心積慮吧。禪與摩托車維修藝術(shù) – 經(jīng)典閃回
  這本書寫于上個世紀 70 年代,經(jīng)歷 126 次被各大出版社拒絕后,由一個不抱任何盈利念頭的編輯最終付梓出版,成為那個時代最為暢銷的書籍:
  • 累計銷量已經(jīng)超過 1000 萬冊,相信這一數(shù)據(jù)會持續(xù)攀升
  • 《吉尼斯世界紀錄》稱它是”世界上被拒稿次數(shù)最多的暢銷書”
  • 《時代》周刊評選 20 世紀十本最有影響力的書之一
  • 而最好的名人推介可能就算下面這個了(印在封面上以吸引讀者的目光):
  我因為寫了一部人們把它和 《禪與摩托車維修藝術(shù)》相比較的書而感到甚受恭維。我希望拙作(《時間簡史》)和本書一樣使人們覺得,他們不必自處于偉大的智慧及哲學的問題之外。
  —-著名物理學家 史蒂芬·霍金
  這是一部“哲學小說”,書中內(nèi)容由交替穿插的兩種文體組成,一度讓讀者莫名其妙不知身在何處:一半是游記,記錄了自己和兒子歷經(jīng) 17 天的摩托車之旅,橫穿美國大陸從明尼蘇達州直到加州海岸的行程;另一半則是哲學討論,作者從旁觀者的角度介紹曾經(jīng)的自己(Phaedrus,斐德洛,精神分裂患者)不斷苦苦思索,最終參透“良質(zhì)”(不是良知,英文為“quality/good”)才是一切的源頭和本質(zhì)。
  這絕對不是一本易讀的書,書中的某些段落甚至是一句話,都需要我們反復體會其中深意。全書共分為四個部分,由淺入深,從表象到形而上學層層推進,帶領(lǐng)讀者漸次攀登到思想山峰的最高處。書中的后半部分逐漸趨向于形而上學的討論,要真正的理解還需要做更多的功課;而前半部分僅涉及表象和實用主義層面的討論,對于從事技術(shù)工作的人們卻有著直接的啟發(fā)。本文的下半部分就以此為參照,談?wù)勎覀儜撊绾卧诩夹g(shù)挑戰(zhàn)的過程中更加“投入”,達到“心流”的狀態(tài)。
  對 Cache 的執(zhí)念
  《禪與摩托車維修藝術(shù)》通過作者自己親身的經(jīng)歷,給我們展示了一組“粗魯”、“輕率”、邊聽音樂邊工作的不合格的摩托車維修技師的形象,他們帶給了作者一場真正的噩夢。也是因為這不好的維修體驗,讓作者痛定思痛,再不將自己心愛的摩托交給別人維修,而是通過不斷鉆研摩托車的表象構(gòu)造和運行機理,從摩托車維修手冊到各種零配件一應俱全的配齊,在何種惡劣的條件下和突發(fā)情況下都能游刃有余的處理事件,都不會“卡住”。
  作為一個軟件工程師,你究竟多“關(guān)心”你自己的代碼,又投入了多少的“熱情”在你日常的設(shè)計和編碼工作中呢?當你認同“一個人應該關(guān)心并全情投入自己熱愛的工作”時,又該如何持續(xù)的保持這份熱情呢?相信每一個和我類似的“碼農(nóng)”讀完這本書后,都會情不自禁的問自己這樣的問題。即使暫時還搞不懂“良質(zhì)就是佛陀”這形而上學的終極思辨。
  作為一個軟件工程師,你究竟多“關(guān)心”你自己的代碼,又投入了多少的“熱情”在你日常的設(shè)計和編碼工作中呢?當你認同“一個人應該關(guān)心并全情投入自己熱愛的工作”時,又該如何持續(xù)的保持這份熱情呢?相信每一個和我類似的“碼農(nóng)”讀完這本書后,都會情不自禁的問自己這樣的問題。即使暫時還搞不懂“良質(zhì)就是佛陀”這形而上學的終極思辨。
  如果一個人在工作的時候,能夠看到良質(zhì),而且感覺到它的存在,那么他就是一個關(guān)心工作的人。如果一個人關(guān)心自己所看到的和手中所做的,那么他一定有某些良質(zhì)的特性。
  P311
  前些日子做了一些系統(tǒng)本地緩存的優(yōu)化工作,比起一些新的產(chǎn)品線拓展來說,并不見得有多少創(chuàng)造性,甚至有人會覺得不就是在既有系統(tǒng)上做的一些小小改動,無足輕重。但恰恰從其中讓我體會到:如果你“關(guān)心”自己的工作,其實無時無刻都會被“良質(zhì)”驅(qū)使,不斷去專注的思考和踐行,也能達到知微見著的哲學體驗。
  重新讓思考進入到計算機的維度
  緩存是互聯(lián)網(wǎng)應用中最常見的組件,幾乎每一個從業(yè)人員都耳熟能詳。當大家談?wù)撈鹁彺鏁r,也大都會提到 Redis,它已經(jīng)成為緩存領(lǐng)域的通用組件,你幾乎可以在絕大多數(shù)的互聯(lián)網(wǎng)產(chǎn)品架構(gòu)設(shè)計中看到它的身影。于是,Cache=Redis 的烙印深深植入了每一個程序員的心里,大家也理所當然的認為Redis是解決緩存問題的終極方案,放一個 Redis 在系統(tǒng)架構(gòu)中甚至成了一個下意識的動作。
  當經(jīng)歷過幾年的迭代,我們的系統(tǒng)架構(gòu)中Redis也成為了最重要的信息存儲組件,它的價值和系統(tǒng)的成本自然也成比例的與日俱增?墒牵斘覀儼涯抗廪D(zhuǎn)向性能提升的時候,才發(fā)現(xiàn)Redis竟然成了性能的瓶頸,不得不要繼續(xù)深入到緩存的密林深處,繼續(xù)挖掘我們可以利用的機器資源來實現(xiàn)更高效的數(shù)據(jù)分布、更快的數(shù)據(jù)訪問,進而提升系統(tǒng)的吞吐量和并發(fā)數(shù)。在這個過程中,你的思考方式需要逐漸從人的直覺體驗轉(zhuǎn)化為計算機的直覺體驗,那股“心流”會讓你與機器混為一體,你突然發(fā)現(xiàn)自己的思考時空尺度進入了一個更微小和高頻的世界。
  先來看下這個 Latency Numbers Every Programmer Should Know,你能夠猜到一個 Redis 的跨網(wǎng)絡(luò)查詢調(diào)用和本地緩存的延遲差距嗎?目前常見云服務(wù)商同一個機房中兩個虛擬機之間的延遲為 1ms 左右,假設(shè) Redis 內(nèi)存訪問和本地緩存的內(nèi)存訪問時間一致,均在 100ns 數(shù)量級,因此兩者間的差距主要在于網(wǎng)絡(luò)延遲,也就是 1ms(這個是理論簡化數(shù)字,實際上我們觀測到的 Redis緩存訪問時延在5ms左右),因此兩者之間的數(shù)量級差異=1ms/100ns=1*1000*1000ns/100ns=10000。如果你以人自身的絕對體驗尺度來衡量這1ms,也許它短的不值一提,畢竟人的一次眨眼都要花掉100ms+的時間。
  但當我們將兩者的相對差異放大到人的體驗時間尺度后,就不顯得那么不值一提了:
  4分鐘:11 天!這意味著如果你把機器的每次執(zhí)行邏輯當成人的一秒,那通過本地緩存訪問只需要4分鐘完成的事情,通過 Redis 緩存訪問需要 10 個工作日!要注意的是,這只是一次緩存訪問帶來的時間差異,如果你的緩存訪問代碼不斷的被調(diào)用,那產(chǎn)生的時間差異真的會變成天壤之別(以人的時空尺度體驗為參考):假設(shè)連續(xù)調(diào)用 1000 次,那相當于 2 個月:30 年的差異。
  緩存技術(shù)的本質(zhì)
  除了時間尺度上的比較,緩存技術(shù)真正的挑戰(zhàn)在于如何在時間、空間、成本之間進行仔細的規(guī)劃,達成全局最優(yōu)化的目標。“事難兩全”:在計算機架構(gòu)中,越是高速的數(shù)據(jù)存儲介質(zhì)(如 CPU L1、L2 Cache),單位成本越是高;而計算設(shè)備一定要在總經(jīng)濟成本的約束下來進行設(shè)計,因此整個計算機硬件配置中高速存儲都是稀缺的,而海量數(shù)據(jù)的存儲介質(zhì)一定是訪問速度最慢的。
  如果把緩存的合理使用當成一個動態(tài)規(guī)劃的問題,系統(tǒng)應該存在一定限制約束條件和特定計算問題前提下的最優(yōu)解。如何讓緩存系統(tǒng)動態(tài)的適應不同計算問題,使得數(shù)據(jù)能夠在不同層級緩存中(L1,L2,Memory,Network,Disk,etc.)根據(jù)優(yōu)化目標的要求進行自由的流動、重新部署是緩存架構(gòu)的終極挑戰(zhàn)。
  特別的,數(shù)據(jù)在不同緩存介質(zhì)中的這種流動,是應該基于數(shù)據(jù)本身的大小、被使用的頻度、利用價值的存在周期等參數(shù)/反饋來進行動態(tài)計算的。理想中的(動態(tài))緩存管理系統(tǒng)應該能夠自適應,根據(jù)起始輸入?yún)?shù)/數(shù)據(jù)集不斷進行反饋調(diào)整,最終達到動態(tài)的最優(yōu)分布。
  近年來開始有更多的關(guān)于Dynamic Cache Management1,2的討論,后續(xù)我們也將持續(xù)關(guān)注相關(guān)理論和技術(shù)的進展。
  在機器思維和人類思維間切換
  軟件工程師始終是在以計算機思維考慮問題。但是由于我們開發(fā)的系統(tǒng)基本是為人服務(wù)的,隨著你工作經(jīng)驗的積累,越來越多的業(yè)務(wù)、產(chǎn)品層面的思考會不自覺的將你重新拉回到客戶/用戶的思考維度,這會讓你的架構(gòu)設(shè)計、代碼實現(xiàn)不自覺的又回升到人普遍感知的時空尺度。回看過去幾十年軟件設(shè)計的發(fā)展過程,面向?qū)ο螅∣bject Oriented Design)、軟件重用(Software Reuse)、領(lǐng)域規(guī)范語言(Domain Specific Language)、微服務(wù)設(shè)計(Micro-service Design)等等,都是在用業(yè)務(wù)、場景來引導我們的編碼,我們早已習慣了用人類可讀(Human Readable)的邏輯、語言來指導軟件的設(shè)計和開發(fā)工作。
  這一切都無可厚非,軟件、互聯(lián)網(wǎng)行業(yè)多年以來的蓬勃發(fā)展也證明了它的方向大致正確。軟件行業(yè)會繼續(xù)沿著“機器計算為人類服務(wù)”的方向不斷演進變化。近年來風頭正勁的“低代碼”平臺、AI Code to Coding等技術(shù)也在試圖抹平人類和機器思維之間的鴻溝,讓普通人也可以通過最善于流暢表達的人類思維模式來指導計算機滿足自己的需求。另外,“過早的性能優(yōu)化是魔鬼”這句業(yè)內(nèi)格言也告訴我們,優(yōu)先采用人類的思維,基于業(yè)務(wù)的結(jié)構(gòu)來指導軟件的編寫是大的原則。
  當我們?yōu)榱颂嵘浖到y(tǒng)的性能時,或靠著“良質(zhì)”的驅(qū)使去不斷調(diào)整軟件系統(tǒng)以使所有的計算資源都不斷逼近它們的極致狀態(tài)時,不要忘了重新回到機器思維。在這個特有的機器時空維度上,我們會“錙銖必較”,算計每一個字節(jié)的存儲、訪問優(yōu)化,每一類資源的合理利用和全局最優(yōu),以達到單位資源上更大規(guī)模的業(yè)務(wù)負載或者在指定業(yè)務(wù)負載前提下不斷降低對資源的消耗,實現(xiàn)“綠色計算”的目的。
  結(jié)語
  《禪和摩托車維修藝術(shù)》是一本好書,卻不是一本容易讀懂的書。大道至簡,但是作者通過了經(jīng)年的冥思苦想才悟到了這一真諦,卻是費盡了周折,讀此書就如同跟作者一起回憶了整個思想形成的過程,雖辛苦但也算是小有收獲。如果有機會能進一步研讀,隨著作者的行文脈絡(luò)一并了解古今、東西方眾多哲學先賢的著作及思想精髓,幸甚!

【免責聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

相關(guān)閱讀:

專題

CTI論壇會員企業(yè)