• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 資訊 > 國內 >
     首頁(yè) > 資訊 > 國內 >

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

    2021-04-20 10:08:13   作者:   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


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

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

    相關(guān)閱讀:

    專(zhuān)題

    CTI論壇會(huì )員企業(yè)

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 保山市| 耒阳市| 高邑县| 来宾市| 安丘市| 大埔县| 乌鲁木齐市| 尉氏县| 商河县| 榆林市| 长宁县| 衡阳县| 抚顺县| 奇台县| 都匀市| 舞钢市| 梓潼县| 建德市| 金平| 无棣县| 靖西县| 沈丘县| 富平县| 慈溪市| 贡嘎县| 达拉特旗| 沐川县| 东乌| 仲巴县| 板桥市| 科尔| 布尔津县| 隆化县| 久治县| 宝兴县| 洞口县| 长泰县| 漠河县| 平舆县| 大余县| 武安市| http://444 http://444 http://444 http://444 http://444 http://444