騰訊雲首席架構師黃希彤:雲時代的編程模式

【CSDN現場報道】5月13日-15日,由全球最大中文IT社區CSDN主辦的“2016中國雲計算技術大會”(Cloud Computing Technology Conference 2016,簡稱CCTC 2016)在北京新雲南皇冠假日酒店隆重舉行。本次大會以“技術與應用、趨勢與實踐”爲主題,聚焦最純粹的技術乾貨分享,和最接地氣的深度行業案例實踐,匯聚國內外頂尖技術專家,共論最新的雲計算技術實踐與發展趨勢。

騰訊雲首席架構師黃希彤帶來的分享是《雲時代的編程模式》。編程語言從最初的0101機器碼到彙編語言再到面向對象的編程,不斷的發展,整個發展趨勢呈現高內聚、低耦合、可重用、可理解的特點。他認爲微服務不應該是僅僅幾個名詞的堆砌,其精髓是在面對一個問題時,能否通過幾個完全自治的子系統去治理。演講中,他強調雲時代的微服務,是要將整個系統拆分成幾個通用的微服務,然後將這些微服務再變成開放的雲服務,實現整個生態圈內的可重用。

照片

騰訊雲首席架構師 黃希彤

以下爲演講實錄:

大家好,我是來自騰訊雲的黃希彤,我最早是CSDN論壇上面一個小開發,今天來到CSDN這樣一個大會上面的時,有一種回孃家的感覺。在此我更想不是以一個騰訊人來打廣告的方式,而是以開發者的身份跟大家聊一下關於開發的事情。

今天要聊的題目會有一點大,先從雲時代前的編程模式講起,最早編程是用機器碼,人的大腦不像電腦,無法處理0101;後來彙編語言還是太費解,又出現了高級語言;然後因爲我們需要更加接近人類語言的方式描述問題,開始出現結構化編程或者模塊化編程的方式;但我們要面對的問題還是太複雜,所以就需要把他切割成小問題,即模塊化;模塊化出現之後,我們又開始追求高內聚低耦合,因人腦仍然沒有辦法思考太多的模塊之間錯綜複雜的關係,所以需要高內聚低耦合,分層次的看待這些問題;但就算把這些功能都充分的去模塊化、高內聚低耦合,發現數據流還是太複雜了,所以需要把數據也給高內聚低耦合,這個時候我們開始去做面向對象的編程,當面向一個對象的時候編程就會比較高效。面向對象就是幫助我們把數據對數據的操作分裝到模塊裏面,同時提供新的思考問題的方式,這樣子我們本來只是比較簡單的大腦,居然一下子就可以駕馭非常複雜的業務邏輯,做很龐大的軟件系統。

人類是不會滿足的,永遠都試圖駕馭更大更復雜的系統,目前我們發展出了23種設計模式,發展出CS、BS、MVC、MVP各種各樣神奇的架構模式之後,開始用這些概念“吵架”,或者做成面試題。整個發展的路線很明顯的趨勢是:不斷地追求更好的高內聚低耦合。相信可預見的未來仍然會繼續去尋找更好的一個高內聚低耦合的編程模式,我們總是在追求更好的可重用性,儘量地減少重複的工作。但最重要的一個本質化的趨勢是,我們總是試圖追求一個更容易被理解的編程模式。近幾年大家都在討論微服務,朋友圈經常被各種微服務實踐刷屏,但是我並不完全認同大家講的微服務的實踐,在我看來這些微服務的實踐是各種各樣的新的技術名詞的堆砌,不應該講到微服務就想怎樣去實現分幾層架構,有沒有什麼高端大氣上檔次的技術和運用,能不能夠快速開發持續交付等。

微服務應該是:面對系統的時候,能不能用很多重複自治的子系統來完成。這些子系統應該可以獨立於大系統獨立存在,每一個子系統應該可以管理好自己、保證自己是健壯的、可處理好異常情況、面對壓力時候擴容負載均衡、沒有壓力時應該縮容。同時子系統無需擔心被用,被越多的使用方使用,越說明該子系統有很好的可重用性,使用量越大越說明可能會產生規模效應,那就可用更低的平均成本來提供更好的服務。

討論微服務時,之前我們僅僅是在討論一個系統怎麼被拆成幾個微服務,然後再用新形式來做新的系統。但這樣做與以前做的模塊化編程毫無區別。在雲時代之前,本人是做QQ空間,做了10年,那時候也有很多類似於今天微服務在講的這些,其中有獨立的相冊服務、留言板服務等等。但我不認爲是真正在雲時代講的微服務,因爲從未嘗試過能不能把QQ空間的留言板拿出來獨立於QQ空間。在雲的時代我們需要的是一種編程模式:原來設計的系統可以拆分成幾個通用的微服務,進而再將其變成一種雲服務,不但原來的系統可以使用它,而且微服務在其他有類似需求的系統都可以重用,不只是我的項目,不只是我的公司的效率會得到提升,而是所有需要這個能力的項目都可以從中獲益。未來的軟件開發纔有可能像今天的實體製造業一樣,在全球範圍內進行充分地分工合作,然後最大限度的提高人類的生產效率,而不僅只是我今天開發的項目的生產效率。

舉一個製造業的例子,大家都知道中國一年生產400億支圓珠筆卻造不出圓珠筆的筆珠,就有人說這是中國作爲一個制筆大國的悲哀。今年在總理的關懷下有關部門撥了六千萬去研製這個小球怎麼做,真的做出來了,這從打破市場壟斷格局上面可能是有道理的,但是拋開國家主義,全球分工角度看,圓珠筆的筆珠其他很多國家都不造,還有很多東西中國造美國不造,全球只有一個國家甚至只有一家工廠可以生產,其他的國家就不需要造,這不就是微服務的理想境界嗎?現在需要開發一個新系統,和開一個新的圓珠筆廠一樣,把圓珠筆的設計分成幾個模塊設計生產每一個組件,這不一定是有必要的,可能我們的創新點是在於這個筆的外形或者把這個筆頭伸進來縮進去的節能系統的設計,如果這個系統設計的特別好,在其的基礎上去設計更好的圓珠筆,只要跟我購買這個設計專利,然後授權合法的使用,我就不會吃虧;與此類似,今天如果要開發一個社交產品,結構與創新點就是新的社交形態,但是要做社交系統的時,需要的一個筆珠可能就是圖片上傳、下載、裁減、縮放甚至人臉識別這樣的能力,這些我們都可以做,因爲我們自己是碼農。如果產品形態真的很創新,很多用戶喜歡你的系統的時候,你的筆珠反過來就有可能成爲制約你發展的命門,很多人下載圖片的時候你的系統架構可能會出問題,甚至有可能你用了這樣的一個處理圖片,然後前兩天被黑客脫庫,中國有些公司已經把這個打造的無比精緻,還把這個服務變成雲服務開放出來,那我們爲什麼非要自己去造這麼一個筆珠呢?

回到雲時代的編程模式上面,在雲時代基於微服務的設計理念開發軟件,首先要考慮的是有沒有一個現成優秀的雲服務可以作爲一個系統需要的微服務,直接可用,比如剛剛講的圖片上傳、下載、裁剪、縮放等功能;如果沒有,那系統需要的服務,把它開發出來有沒有可能變成一個通用的服務,然後開放出去,這樣的話除了有可能去交付系統之外,還可能通過售賣我的微服務獲利,其他相同的需求的開發者也可以用很低的成本去跟我購買這個筆珠去造他自己的圓珠筆。這個社會的軟件開發效率因此也就可以得到提升,創新的成本也就可以得到降低。但這個開發出來售賣的微服務應該是充分自治的,很多人使用的時候可以自己擴容,很少人使用的時候應該只使用很少的計算資源,所以很明顯,它應該運行在雲上面。

把它獨立成一個充分自治的服務之後,可以在交付系統之外的其他系統上存活,去發揮價值,來爲我們帶來新的機會的。

總結,軟件開發歷史上走過了結構化、面向對象,還有各種各樣的開發模式,這些所有的發展模式共同的發展方向是越來越高的高內聚低耦合,越來越好的可重用性,越來越容易被我們的大腦理解。在雲時代,微服務是符合這三個大方向的全新軟件開發模式,所以個人認爲下一代流行的軟件開發模式應該就是微服務。但是我不認爲微服務應該是在目前經常做的在一個大系統裏面用微服務的思想去架構設計開發完成大的系統,否則開發出來只是對我們的系統有用。微服務不是原來的組件換個面目出現,它應該被設計成爲跟使用者無關的,一個微服務設計出來之後應該追求被更多的項目、更多的公司重用;甚至在與我們基於微服務架構設計出來大的系統消亡之後,還可以繼續的爲更多的系統發光發熱,不會跟着大的系統一起死掉。

未來我們基於微服務開發的軟件系統交付後,這些微服務不但有可能被更多的系統去重用,還有可能成爲軟件公司或者程序員新的創業項目或者新的獲取收入甚至財務自由的機會。現在在開發軟件系統和改造舊系統,除了要考慮用微服務這樣的一個理念去重新設計,還應該更加多的去考慮這個微服務能不能夠被更多的人重用,有沒有可能開放出來,然後去造福更多的項目和更多的程序員。

更多精彩內容,請關注直播專題2016中國雲計算技術大會(CCTC),新浪微博@CSDN雲計算,訂閱CSDN雲計算官方微信公衆號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章