<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Uber 使用 Go 的規(guī)模這么大?!都自己定制的 Go 編譯器了

          共 1529字,需瀏覽 4分鐘

           ·

          2021-05-13 23:05

          閱讀本文大概需要 4 分鐘。

          大家好,我是站長(zhǎng) polarisxu。

          今天看到 Uber 使用 Go 的情況,挺吃驚的,給大家分享下情況。

          01 Uber 使用 Go 的情況

          Uber 有數(shù)千個(gè)后端服務(wù)是使用 Go 實(shí)現(xiàn)的,它們運(yùn)行在數(shù)百萬(wàn)個(gè) CPU 內(nèi)核上。因此,對(duì)于 Uber 來(lái)說(shuō),詳細(xì)準(zhǔn)確掌握 CPU 瓶頸至關(guān)重要。這不僅為了減少服務(wù)延遲,同時(shí)也能提高計(jì)算機(jī)運(yùn)行效率。Uber 這個(gè)量級(jí)的規(guī)模,要求對(duì)代碼和微觀結(jié)構(gòu)的影響有深入的了解。

          02 定制 Go 編譯器

          其實(shí)說(shuō)定制 Go 編譯器有點(diǎn)不準(zhǔn)確。主要是基于以上規(guī)模和要求,雖然 Go 內(nèi)置了 Profiler,但這個(gè) CPU Profiler 在基于 Linux 的系統(tǒng)上有嚴(yán)重的限制(也許在其他操作系統(tǒng)也有此問題,但 Uber 使用的是 Linux,其他機(jī)器并沒有測(cè)試驗(yàn)證),同時(shí)內(nèi)置的 Profiler 缺少掌握 CPU 瓶頸所需要的許多細(xì)節(jié)。

          基于這些問題,Uber fork 了一份 github.com/golang/go 代碼,在其上建立一個(gè)定制的 Go Profiler,以便更符合 Uber 的需求和 Uber 的商業(yè)運(yùn)營(yíng)規(guī)模。

          具體來(lái)說(shuō),Uber 通過(guò)將豐富的硬件性能監(jiān)視特性集成到 Go 的缺省 pprof 分析器中來(lái)增強(qiáng)它。這提供了幾個(gè)關(guān)鍵好處:

          • 能夠獲得更準(zhǔn)確和精確的 Go 程序分析文件(profiles);
          • 監(jiān)控各種 CPU 事件的能力,比如緩存丟失、套接字間(NUMA)通信、 CPU 分支錯(cuò)誤預(yù)測(cè)等等;
          • 能夠以非常高的采樣頻率(最高可達(dá) 10 微秒)監(jiān)控 Go 程序;

          所以,Uber 定制的「Go 編譯器」其實(shí)只是增強(qiáng)了 Profiler。注意,對(duì) Profiler 的使用并不需要改變,也就是說(shuō),對(duì)外的接口、使用的工具和分析都沒有變(比如堆棧屬性、調(diào)用圖和火焰圖等),只是增加了更多的數(shù)據(jù)。

          增強(qiáng)版的 Profiler,Uber 稱之為 pprof++,這是帶有硬件性能計(jì)數(shù)器的解決方案。

          具體增加了哪些 CPU 事件,Uber 給了一張圖,公開了最常見的一些事件。

          關(guān)于這些事件的使用,以及 pprof++ 的更詳細(xì)信息可以參考:https://eng.uber.com/pprof-go-profiler/。

          Uber fork 的 Go 倉(cāng)庫(kù)地址:https://github.com/uber-research/go。

          03 感想

          看到這個(gè)消息,驚嘆 Uber 對(duì) Go 的使用和研究之深,也證明了 Go 被大公司的規(guī)模使用,看好 Go 的前途。

          不知道 Uber 開發(fā)的 pprof++,有沒有和 Go Team 溝通,嘗試合入 Go 官方倉(cāng)庫(kù),畢竟既然開源出來(lái)了,如果能夠在官方中使用,可以讓更多人收益。當(dāng)然,因?yàn)槟壳爸恢С?Linux 系統(tǒng),可能不太適合合入。至少,不希望 Go 出現(xiàn)分裂!




          往期推薦


          我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語(yǔ)言并創(chuàng)建了 Go 語(yǔ)言中文網(wǎng)!著有《Go語(yǔ)言編程之旅》、開源圖書《Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)》等。


          堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長(zhǎng)!也歡迎加我微信好友交流:gopherstudio

          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天色天天日天天射 | 五月天亚洲丁香无码 | 日韩成人AV电影 | c逼视频香蕉视频 | 国产黄色电影在线播放 |