<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                作者 臧秀濤 2015年3月,趙海平回到中國,[加入阿里巴巴技術保障部](http://www.infoq.com/cn/news/2015/03/haipingzhao-join-alibaba),任職研究員,將重點攻克阿里巴巴在軟件性能以及Java使用過程中遇到的技術問題。 InfoQ已經邀請他在4月23日~25日舉行的[QCon北京2015大會](http://www.qconbeijing.com/)上做主題演講,分享[《異步處理在分布式系統中的優化作用》](http://www.qconbeijing.com/speakers/201831)。是什么吸引他加入了一家中國的互聯網公司呢?InfoQ對他進行了專訪。 **InfoQ****:首先歡迎您回到中國。可以介紹一下您加入阿里巴巴的初衷嗎,阿里巴巴最吸引您的地方在哪里? ** > **趙海平:**去年機緣巧合,我和阿里巴巴的同事有了交流的機會。當時我們聊了很多技術細節,發現阿里巴巴的規模非常之大,很多技術上的難題是美國公司都沒有的。比如說雙十一這個問題,沒有哪家美國公司單天有這么大的交易量,這是很特殊的一個問題。這個技術問題對我特別有吸引力。 > 當規模大到一定程度,簡單的問題也會變得復雜。有的時候軟件就是這個樣子,在一臺或者幾臺機器上執行是一個情況,當機器多到一定程度時,對軟件的要求就特別高了。在多臺機器上,怎么才能保持很快的速度,并且節省機器,又不出問題,這是一個很難的技術問題。 > 單天的資源需求是平時的好多倍,怎么計劃機器,讓峰值最高的那天不出現問題,平時又要做到很好的利用,這是很不容易的。我特別希望自己能夠有這么一個經歷,去阿里巴巴解決這個問題,這是在其他公司找不到的技術問題,而且跟我很對口,我一直在做的都是怎么提高大規模系統的性能、穩定性,所以這正是我的興趣所在。 **InfoQ****:您在阿里巴巴的新角色就是解決這些基礎設施的性能問題?** > **趙海平:**基本上是幾個方面,性能、穩定性、容量、架構,還有運維,恰恰就是我現在這個團隊——技術保障部——的工作。性能提升上去,容量就增加了,隨著我們監控系統的改進,系統的穩定性也會提高,運維也會更方便。如果發現架構上的問題,我們也會做些調整。 **InfoQ****:談到性能問題,定位是很關鍵的一點。像這種規模的分布式系統,如何實現全系統的監控,準確定位問題就非常重要,您會在這方面發力嗎?** > **趙海平:**Profiling特別重要。如果能有一個特別強大的Profiling系統,就知道整個系統在哪個地方,哪臺機器上,花了多少CPU、內存、磁盤IO或者網絡帶寬等資源,才能知道優化什么地方效益最大。 > 所以我的第一步工作就是幫助完善阿里巴巴的監控和Profiling系統,希望能夠很清楚地把軟件的整個性能展現給大家,做到實時監控,同時讓研發人員看到自己的代碼在線上的運行情況,了解這些代碼花掉了多少資源,這樣有問題的話他們可以自己解決。 **InfoQ****:大家對您的最初印象多是來自HipHop for PHP這個項目。像淘寶之前就從PHP切換到了Java,而Facebook選擇了自己改進PHP。可以談一下這個項目嗎,當時的出發點是什么樣的?** > **趙海平:**HipHop也是一步步慢慢建立起來的。最初是我遇到了一個PHP的函數,在C++里也想用。當時想,重寫一下就可以。不過那個PHP函數不斷在變,我就想寫一個簡單的工具,把這個函數轉換成C++,這樣就可以跟上PHP代碼的變化。那時正好機器開始吃緊,大家意識到PHP的速度問題,CPU消耗很大。大家就開始討論如何提高PHP的性能。當時想法很多,有人想改變PHP本身,有人想干脆用Python或Java重寫網站。 > 當時也重寫過,有三四個人在做這件事情,但這些人改的速度遠遠趕不上另外二三十人寫新PHP業務代碼的速度。所以我們就想到寫一個工具,來轉換這些新寫的代碼,既不干擾既有的開發節奏,又能大幅優化性能,跟上變化。 > 當時我也讀了下Zend Engine的代碼,研究PHP為什么會慢。發現PHP速度之所以慢,是因為有很多的函數調用是動態的,而像C和C++里,很多函數是靜態調用,不需要在執行的過程中去查詢函數指針在什么地方,所以速度才快。 > 所以我們做了很大的調整,一定要改變這種方式,爭取讓所有的函數調用都能盡快實現,在編譯的時候靜態處理,執行的過程中就不需要再查詢,指針已經在那兒了,這是最主要的加速思路。 > 那時候就萌芽了一個想法,如果能夠把PHP直接轉換成C++,也許這個性能問題就解決了。然后就花了很多時間去做原型。我們做了很多工作,把底層的PHP實現都改變了,有一個自己的Runtime Library,再就是一個PHP的擴展庫,這個實際上是很大的一塊代碼。在這個上面,我們又寫了一個把PHP轉換成C++的一個編譯器。先將PHP編譯成C++,然后靠底下的這個庫實現功能。這是最早期的工作。 > 不過這在當時只是一個副業,因為不知道這個東西到底有沒有意義,是不是能提高性能。大概能拿出30%~40%的時間做這個。做完之后發現效果很好,就加入了其他同事一起做。后來速度不斷提高,第一年提高了2倍,第二年又提高了2倍,后來提高到5~6倍的樣子。 > 現在回頭看,如果當時雇很多人把網站改成Java的,也是可以做到的,但Facebook的發展可能要停半年到一年時間,甚至更久,就有可能對Facebook的發展帶來不可預期的影響。這件事情主要還是業務推動的。 **InfoQ****:后來HipHop發展成HHVM,從原來的靜態編譯變成了動態的JIT機制,您也參與了這方面的工作嗎?** > **趙海平:**引入HipHop之后,我們也有自己本身的一些問題,比如產品環境和開發環境就是不一樣的,這樣多多少少會存在一些問題,也就容易出現bug。再就是Facebook的代碼量非常龐大,編譯時間非常長,另外生成的二進制文件也非常大(超過1G),發布也很困難。 > 這時就出現了HHVM。HHVM不再是把PHP轉換成C++,而是采用了一種新方法,把PHP轉換成一個中間碼,這個中間碼在執行過程中再轉換成機器碼,不過調用的還是我們原來為HipHop寫的底層庫,它取代的主要是把PHP編譯為C++的過程。 > 我并沒有參與HHVM的編寫,當時我已經離開這個小組了,另外一件事情吸引了我,這就是異步處理在分布式系統中的優化作用。 > 之所以離開這個小組,原因大概有幾個方面:一個是,個人認為HHVM不再能把性能提高更多了,后來也確實如此,兩三年之后HHVM出來,速度并沒有更大的提高,最高只比原來靜態編譯機制快10%~15%,而且是因為靜態編譯這一塊不再開發了。再就是新的課題特別有意思,具體我會在QCon北京上分享。 > 這就是為什么去GitHub上看,HHVM里面會有我的代碼,主要是底層的代碼還是基于HipHop的。HHVM的頭兩個字母就是來自HipHop,引擎還是原來的,不過上面做了很多工作,把PHP轉換成中間代碼,這個有點像Java的JVM。這樣的好處就是研發過程和產品過程其實是一樣的,而且不會有原來說的那種超大二進制文件的問題。中間代碼很小,PHP可以直接發布到線上系統上。 **InfoQ****:國外一些著名的互聯網公司,在性能調整和優化的過程中,慢慢都發展出了自己的編程語言,像Facebook設計了Hack語言,Google有Go和Dart等語言,Apple有Swift等。這方面您有什么感想嗎,Facebook的Hack語言您是不是參與設計了?** > **趙海平:**Google的Go語言挺有意思的,寫得非常好。Hack語言我沒有太多的參與。 > PHP是弱類型的,這是性能提高的一個瓶頸,而強類型的話就可以做很多優化。最初我們是想增強PHP的類型系統。強化數據類型,這是引入Hack的一個主要因素。 **InfoQ****:PHP7最近也有很多改變,性能提高也比較大。** > **趙海平:**這也是我臨來之前剛剛聽到的。PHP核心開發組的力量是很強的。我也跟他們的人員交流過,他們對整個PHP的優化有自己的思路和想法,也做了很多工作。這是件好事。其實重要的并不是說哪個團隊或小組把PHP優化到什么樣的地步,有幾個小組都在做這個事情,彼此競爭,會促進整個PHP生態系統的發展。這種競爭也恰恰說明了PHP的重要,所以會有很多人關注它的性能優化。 **InfoQ****:您對公司發明創造自己的編程語言怎么看?** > **趙海平:**編程語言這個問題,我說兩點。第一,不能把語言當成一個特別神圣、至高無上的東西。語言也是整個軟件系統的一部分,只是它分割的很好,獨立出來了,可以執行更多的功能,我們可以用它實現我們的功能,可是在整體架構上看,語言也只不過是軟件系統的一部分,而這一部分我們完全可以做一些調整,使其更適合我們的系統。而設計語言時一般考慮的是比較通用的目標,我們拿來用,只是因為它的絕大部分特性都是我們想用的。比如我們用C和C++寫程序的時候,每次都要思考內存的模式是什么,是不是用share pointer,是不是用自己寫的Object,內存的allocation/deallocation怎么做,一個語言幫我們把這些事情都做好了,這就是它的好處。它提供了一個很大的庫,提供了一個軟件執行的環境和范圍,而這正是我們選擇語言的初衷。 > 第二,作為一個公司來講,不能說為了研發一個語言而去研發一個語言。這是沒有意義的。一定要根據自己想要做的事情,在現有的軟件架構當中,我們發現當前所用的語言提供的環境和范圍不太適合,或者說這個語言的很多假設和假想,和我們所期待的東西并不一樣,只有在這個時候,我們怎么也找不到一個合適語言的時候,我們才會創造一個新的語言,讓這個語言更適合公司的事情。如果可以通用化,提煉出來,那就是語言,否則設計成軟件庫就可以了。 > 這是水到渠成的,不要強求。像Google開發Go語言,我認為它有自己的考量,可能在開發很多分布式系統的時候,現在的語言寫法上不太直觀,或者速度不夠快,所以才創造了這么一個東西。Go應該能解決公司內部的很多問題,否則是很難存活的。 **InfoQ:****您可以結合自己這些年的經驗,給中國開發者的成長一些建議嗎?** > **趙海平:**在美國的時候,我跟Facebook的中國員工聊的很多。我給他們最多的建議就幾條。 > 第一,一定要提高交流能力。咱們中國人,尤其是中國搞計算機的人,很多人有個不該有的特點,就是喜歡把自己鎖在黑屋子里埋頭干活,跟機器交流特別擅長,跟人的交流一竅不通。這樣不行,我相信在中國也是這樣的,你不但要把自己的工作,技術活要做得特別好,而且要擅長表達自己的想法,擅長在工作當中講述做的是什么,怎么樣能夠說服別人,怎么樣能夠跟別人在不傷和氣的情況下,把問題解決好,這是很強的一個能力,而這個能力不是在學校里能學會的,是我們走向社會之后慢慢學到的東西,這個我恰恰認為中國的員工,尤其是在美國那樣的環境,因為不是母語,可能處理得就不是特別好,有時說出來的話比較生硬,給對方的感覺不是特別好。 > 第二,中國人比較謙虛、內斂,講究內涵,自己心里有的東西不表達出來。但是在工作中,可以適度強勢一點,勇敢表達自己的想法。當然這個建議是基于美國多元文化的背景,在國內大家的文化背景一致,也許可以探討最合適的溝通方式。 > 第三,掌握好英語,開拓眼界。我覺得在計算機這個技術里邊能夠非常了解英語,把英語的這個隔閡給去掉還是非常重要的。 > 我回來的時間還不長,等和大家接觸多了,可能會有新的想法,目前就這幾點吧。 **InfoQ****:好,感謝您接受我們的采訪。期待您在QCon上的分享。** ### 受訪者介紹 **趙海平**,2007年加入只有不到50個軟件工程師的Facebook,致力于軟件性能和架構分析,在此期間創建了HipHop項目,重新編寫和實現PHP語言,使其速度提高5到6倍,為公司節約數十億美元。HipHop項目之后,致力于“用異步處理來優化分布式系統”的設計理念中,并為此做了多項分布式數據庫的優化研究,在PHP語言中加入了yield和generator的新功能,來幫助日趨復雜的Facebook 網頁設計。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看