我對微服務的一些idea

pm45e 9年前發布 | 10K 次閱讀 微服務

Docker成功了,帶動了微服務的興起,讓我也聯想到了很多年前我讀書時候的一些人和事,其中讓我印象最深刻的是楊芙清院士在軟件構件方面的先驅性的研 究。其實很多時候一個事情失敗或者做得不盡人意,不是因為事情或者想法不好,而是時候未到。我覺得服務器的未來屬于微服務,屬于Docker,屬于構件化 的軟件開發方法!

微服務microservice,中心思想是將構架打散,切分成粒度最小的功能模塊,用容器也好,進程也好單獨運行這些模塊,并使用網絡將這些分 解的模塊連接起來通過協調服務來完成特定的工作;這樣做可能是將分布式進行到極致的結果。那么微服務的核心就是切分了,用一個字就是——分。

劃分,切分問題是現在不管是學術界還是工程界解決復雜問題,協調復雜問題的一般方法,也是最重要的一個方法。比如:框架式的建筑方法可以10幾天 就建成一棟高樓,得益于框架式,功能劃分的建筑構件的拼接;美國最新的布什號尼米茲級航母就是將功能不同的部分分別在不同地方制造完成,然后統一拼裝完成 的。

 我對微服務的一些idea

 我對微服務的一些idea

將復雜的問題劃分為不同大小的子問題,然后各個擊破,最后歸納,總結成一個問題的解的過程在分布式領域叫做Map-Reduce;在程序領域叫做面向對象;在工程領域叫做構件化;在算法領域叫做分治或者動態規劃——總之,它其實已經相當普遍了。

我記得我讀研究生的時候,第一天入學就是聽楊芙清院士的講座,印象很深刻,題目就是軟件構件技術的未來(外面挺的最多的就是北大青鳥計劃,后來怎 么就跟計算機教育聯系在一起我不是很清楚)。它的核心我想就是現在說的利用微內核或者微服務的方法,將操作系統這么復雜的系統工程切分成若干個小的模塊或 者說構件,然后通過調度,協調這些模塊或者構件的運行時狀態來共同完成一個特定的任務。這個思想其實是非常超前的,至少在將近10年前的中國;我也聽得云 里霧里,我想Linux通過單一內核的設計減少IPC,來提高效率,節約內存,為啥還要搞個純微內核的系統,Mix已經是個失敗的案例了,我覺得可能噱頭 的成分更多一些。后來我專門選修了“軟件構件”這門課,講的都是理論上的東西,我也沒大聽明白,后來上課的老師居然也上不下去,跑了…… 好吧,好在那個時候開始流行WebService與SOA,我就轉修WS與SOA了,講課的老師都是從國外回來的,比較有個性,講授WS的是個日立公司的 高級研究員,女老師;SOA的老師是一個海歸,在研究“動態互聯網”——當初我花了很長的時間才弄明白他要干什么(基于P2P技術的自發現互聯網模式,就 是人們在分享信息的時候不需要通過輸入網站,或者通過搜索引擎,就能通過你的喜好推送給你。想想還是蠻智能的,他帶著學生寫了很多代碼,包括新的瀏覽器, 路由模式,還帶著學生打了不少架,后來怎么樣我就不知道了……),畢竟太超前,但是由此可見,國外的早在10幾年前就在搞的東西,可能我們現在都還停留在 炒作的階段。總之,那幾年大家都在談論SOA與WebServices(這里注意,Webservices后面一定要帶s,不然就不對),但是真正明白中 間道理的并不多,都是在炒作而已,基本也就是在用一些現成的工具CFX,微軟的傻瓜工具搭建一些系統,生搬硬套罷了;后來直到 Steve Y對Google的吐槽才使我重新了解到了WebServices與SOA的價值。當然,后來就是云計算的橫空出世了。

總之,那幾年對于分布式、軟件構件的理解是碎片的,不系統也不真實。后來,Docker出來了,后來微服務被廣泛的認同了,我想,國外已經把這套 研究成熟了,開始傳播,我們只要吃下就行了。這很自然讓我聯想到2006年聽到楊芙清所提出的軟件構件理論,微服務其實就是當年楊教授所提到的軟件構件, 只是現在改了個名字,叫微服務,而且很多人都是通過Docker引出的微服務,所以有種故事人非的感覺。不管怎么樣,有一點是值得留意的,當我們對一個事 物認識越深刻,就越能把事情剖析得越細分越清楚。比如:西方科學誕生自宗教,開始是天文學,為了證明上帝的存在,地心說等等而設立的,后來發現事情越來越 復雜,也得到了很多觀測數據,為了處理與分析這些數據,誕生了數學;通過數學的演繹,我們總結出了一些物體與物體的運動規律,于是有了物理學諸如此類;隨 著我們對事物本質認識越來越深刻,逐步誕生了很多學科,這些學科就是對問題的分類,有些科學家終其一生都是在一個很狹小的分類學科里面耕耘;而將這些科學 研究成果匯聚在一起就是一個偉大的工程。再比如,面向對象的編程方式,它的價值在于對事物的分類處理的思維方式第一次被引入到程序設計中來了。不管多么復 雜的系統,只要使用面向對象思維去構建,仿佛事情就會容易很多;因為你在分析業務構成的時候,隨著對問題本身的研究會不斷的將問題分解、細化最后形成模 塊,最終構建出龐大的系統;而面向對象的語言則能很自然的教你,或者引導你去將問題細化,分類,然后用通用的設計模式將不同的分類協調好,處理好,就能得 到問題在程序上的一個解;所以,基本所有的OO語言都把類叫做——Class,即分類。這個思考問題的過程就像一個公式一樣,只要你能夠將Class構建 出來,不管怎么構建它,就能形成問題的一個解。這就是劃分問題的力量所在。

我想,對于微服務,對于Docker,我想后面幾年將會有很大的發展,集中在:
1、對于現在程序研發與部署方面的改革。之所以叫改革,我想會顛覆很多以往的思考問題的方式,就像OO出現改變了人們編程時的思維方式一樣。到時候,人們 會常常想我需要什么,而不是我要構建什么;比如我需要一個數據庫,我需要一個登陸模塊,我需要一個分析模塊;基于這些會出現一些更高級的編程語言;通過編 譯這個語言;就能完成服務的構建,就像之前我翻譯的一篇文章: 兩年之后,再思考Docker的價值,一個基于服務的鏈接器會代替現在基于本地代碼的鏈接器;服務的獲取與部署全部都會定義在編程語言里面,人們寫好了程序,那么在運行時程序會自動的查找,生成程序的容器,并通過程序的邏輯將其鏈接,編排在一起;
2、對于服務的獲取。就像幾年前大家還在炒作域名,這幾年大家發現域名不值錢了,反而APP與公眾號成為了服務的入口一樣。程序、算法、模塊會構件化,程 序的編譯器會將不同的業務邏輯,算法編譯成一個容器通用的二進制格式,就像ELF一樣低層;操作系統,或者說容器的編排工具會根據容器的格式動態或者靜態 的去加載,執行這些構件,讓它們能夠協調運行。

容器是微服務很好的載體,而且他的出現并沒有傷害到現有操作系統的構架,但是我覺得容器要發展,必須要有統一的低層二進制格式,統一的服務規范與統一的通信協議的支持。我很期待軟件構件化時代的到來的!

來自:http://dockone.io/article/555

 本文由用戶 pm45e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!