幾千年來,巴別塔的故事一直是人類面對的一個核心的困境。爲了交流和溝通咱們人類創造出語言,但溝通與交流仍然存在障礙……相同語言之間的溝通依語境的不一樣,尚且存在巨大的鴻溝,不一樣語言之間更是讓人坐困愁城。程序員
在物質文明高度發達、人工智能都已觸手可及的今天,程序員同樣在面對這樣的困境。咱們的先輩基於那時的技術條件,基於那時的業務需求,映射性地逐步發展出FORTRAN/COBOL這樣命令式的程序設計、C/PASCAL這樣過程式的程序設計,到C++/JAVA這樣的面向對象的程序設計,再到今天WebService這樣面向服務的程序設計。因而各式各樣的異構性層出不窮無所不在,硬件(CPU和指令集、硬件結構、驅動程序)、操做系統(不一樣操做系統的API和開發環境)、數據庫(不一樣的存儲及訪問格式)都不盡相同,高級語言更是依賴於特定的編譯器和操做系統API編程,它們彼此互不兼容,須要開發和運行環境的支撐。這樣的異構性使得各類不一樣軟硬件之間在不一樣平臺不能互聯互通,再加上網絡協議和通訊機制的不一樣,系統之間還不能有效地相互集成,如同不一樣族羣之間互相比劃着溝通。很難協同組織去面對挑戰。數據庫
雖然語言不一樣,但人類須要表達的內核是類似相通的,同理,各類應用系統之間的許多基礎功能和結構是有類似性的,它們提供的服務和功能是類似的。若是每次開發都從零開始,就像每次造一款汽車都去從新發明一次輪子,那無疑是好笑的。編程
因而,屏蔽各類異構性,實現某種標準的互操做,以實現複用(而不用每次都去發明輪子),經過鬆耦合,經過將具體的業務抽象,經過服務的表達和業務過程的原子化去架構規劃整個業務流程,這個架構就是SOA。windows
——SOA就是這樣的一個範式,用於組織和利用可能處於不一樣全部權範圍控制下的分佈式系統。
打一個形象的比喻,一個企業的最終服務就像是要安排各國大廚準備一桌頂級的菜餚,須要日本的生魚片、清酒,法國的鵝肝、生蠔,德國的啤酒、肘子,中國的爆炒、佛跳牆,在這種狀況下,你並不用再去學習各類語言和大廚們交流,只須要本身編排好上菜的順序,在他們製做好的菜餚照片下寫好交付時間,交給大廚,互相點頭確認,而後按時間點去取菜上菜便可。每一個大廚後面自成體系,如同API後面的那個應用。而你編排的上菜順序,就是流程驅動。網絡
實際上,中國古代的四大發明中的印刷術,就是SOA思想應用的典範。沒有印刷術以前,書籍須要手工抄寫,所以效率低下,質量也不穩定,沒法保證一致性。有了印刷術,出版效率和內容一致性提升了數量級!最初的印刷是刻板,這就是「複用」,如同軟件經過組件的封裝,達到重複和在不一樣場合使用的「複用」效果。可是,刻板印刷就是一個緊耦合,一塊刻板只能印某一本書的某一頁,其中具體的「字」沒法複用,就如同軟件技術中微軟VB開發的com+組件就只能在windows環境中使用,沒法與JAVA開發的EJB組件進行復用和編排,由於他們與開發環境和運行環境是緊耦合的,要在UNIX環境下使用,必須從新開發,至關於換書就得換版。然後的活字印刷就完全解決了這個問題,文字和版面之間是鬆耦合,經過排版來實現一本書的印刷版面…….這又是數量級的躍升——如同咱們能夠封裝服務,造成一個個API,經過服務編排的API聯動來實現業務流程。架構
如今流行的所謂微服務,就是單個的活字,經過SOA串聯成爲文章(應用)。講到這裏,就必須提到schema。分佈式
schema就像是活字印刷裏每一個字,都應該有的固定規範,好比字體、大小、線條寬度等等,沒有這個規範,有的字大、有的字小,印出來亂七八糟,而這偏偏是目前微服務領域的現狀:不少號稱SOA的解決方案沒有提供schema數據規範約束,這樣的解決方案並無系統化地解決問題,而僅僅是山寨SOA。微服務
綜上所述,SOA是把複雜的業務系統切分紅一塊塊小的獨立系統,每一個系統都叫一個服務,對外提供一組獨立的API,而後經過API聯動組織起完整的業務來。在每家企業發展的初期,一般一個或幾個數據庫表格就完成了業務,像大多數小企業那樣。但當企業的業務系統複雜性膨脹到必定規模後,就必須考慮如何將各個子系統按照彼此獨立的服務切分開來,否則之後會亂成一團麻,根本就沒法管理。學習
這種聯動,按照業務流程的要求是能夠一步步串起來,提供無限的複雜度。這是企業內部的狀況。那麼,在外部呢?如今各類雲服務廠商也有着無數的API,每個均可以當作一個獨立的服務。但若是把這些獨立的服務也串起來呢,那就能夠創造出一個個全新的應用。好比:有三個獨立的單位,第一個單位是地方衛生系統,他的數據庫保存的是該地某我的的醫療保險記錄;第二個單位是某個醫院,他的數據庫中保存的是某我的在該醫院全部的就診記錄;第三個單位是保險公司,他的數據庫裏保存的是某我的的參保記錄。原本他們的系統互不相干,經過SOA的API聯動,就能夠很方便地根據必定條件從上述幾個子系統中分別獲取數據後,組織起一個完整的新業務流程。好比,若是某人之前參加過社保醫療保險,而且去年就診次數很少於5次,同時前三年沒有在保險公司購買過任何醫療保險,那麼就能夠給這我的提供50萬的醫療保險,否則就少一點或者拒接保險申請,等等。字體
……可見,API聯動的想象空間是無限的,但前提是開放!由於每個API就如同一個單獨的音符,你稍微聯動一下,它就能造成一個曲調;若是你是一個大師,你就能寫成一個恢弘的交響樂章;若是......你登錄 www.apemesh.com 體驗!