《聖經》中有一個通天塔的故事,大體是說,上帝爲了阻止人類聯合起來,就讓人類說不一樣的語言。人類無法兒溝通,達不成「協議」,通天塔的計劃就失敗了。 可是千年之後,有一種叫「程序猿」的物種,敲着一種這個羣體通用的語言,鏈接着全世界全部的人,打造這互聯網世界的通天塔。現在的世界,正是由於互聯網,才鏈接在一塊兒。 當 "Hello World!" 從顯示器打印出來的時候,還記得你激動的心情嗎? java
若是你是程序員,必定看得懂上面這一段文字。這是每個程序員向計算機世界說「你好,世界」的方式。可是,你不必定知道,這段文字也是一種協議,是人類和計算機溝通的協議,只有經過這種協議,計算機才知道咱們想讓它作什麼。程序員
協議三要素 固然,這種協議仍是更接近人類語言,機器不能直接讀懂,須要進行翻譯,翻譯的工做教給編譯器,也就是程序員常說的compile。這個過程比較複雜,其中的編譯原理很是複雜,我在這裏不進行詳述。 數據庫
曾幾什麼時候,我混跡於電商、珠寶行業4年多,爲這兩個行業開發過兩套大型業務系統(ERP)。做爲一個ERP系統,系統主要功能模塊無非是訂單管理、商品管理、生產採購、倉庫管理、物流管理、財務管理等等。做爲一個管理系統,你們的通常開發習慣就是使用.Net或Java技術,創建一個單塊(單進程)架構的應用,只有一個SQLServer或MySql數據庫。而後在項目文件中分一下各個模塊,三層結構方式組織代碼編寫開發。最後測試,交付上線。瀏覽器
起初,由於數據量不大,系統性能還不錯,各類列表查詢,報表查詢,Excel數據導出功能等用的都很流暢。可是隨着公司業務發展,訂單量日積月累,後期各類業務部門的報表查詢、數據導出需求不斷增多,咱們漸漸就感受系統運行愈來愈慢。因而咱們可能最早想到的解決方案就是,優化系統瓶頸數據庫這個大頭。咱們可能的一種嘗試就是將數據庫單獨放置到一個服務器,實現數據庫和應用程序分離,或者是創建各類數據庫表索引,優化程序代碼等方法。通過這樣一番研究優化,系統某些功能可能性能的確大大提升,可是咱們仍是發現某些功能列表的數據查詢導出依然很慢,或者隨着數據量繼續積累,原來較快的列表導出功能,也越來越變得緩慢了。咱們用盡各類辦法,最後也達不到理想的系統性能速度。性能優化
爲了提升系統性能,咱們也許會主動學習一些互聯網公司的技術經驗,什麼高併發、高性能、大數據、讀寫分離等方案,發現本身根本無從下手。咱們會以爲由於系統業務特色不同。ERP系統併發量不高,主要是業務複雜,各類業務耦合度遠高於那些互聯網應用,很差作拆分,數據查詢邏輯要遠比互聯網系統複雜,一個列表頁查詢出來的數據,每每須要關聯四、5張表才能獲得結果。有些報表類的甚至更多。加上各類業務操做事務性、數據一致性要求很高,不少時候致使咱們措不及手,沒法進一步優化系統。拆分應用層服務器
拆分應用層微信
是踐行「微服務」架構的理念。將原來大而全的單進程架構按照業務模塊拆分紅可獨立部署的應用程序,以此來達到平滑系統更新、升級、方便負載擴展的目的。具體來講,技術上可使用restfull風格的接口,也可使用像java中dubbo框架方式來簡化開發複雜度。ERPWeb端或其餘移動端也是一個單獨的應用充當表現層。很是薄,只是簡單的接受參數,調取後臺其餘各類微服務程序的接口獲取所需展現的數據。微服務充當業務邏輯層,每一個微服務都是可獨立部署上線的程序,對外提供數據訪問接口。restful
微服務可使用流行的各類RPC框架,好比dubbo,能夠支持多種調用協議Http、TCP等,這些框架使得編碼比較容易,框架封裝底層數據通訊細節,使得客戶端執行遠程方法如同執行本地方法同樣簡單。網絡
dubbo微服務架構,還支持服務治理,負載均衡等功能。這樣不只能夠提升系統的可用性,還能動態提高系統應用層的性能。好比倉庫管理中入庫業務很是繁忙,佔用很是多的CPU和內存資源,咱們能夠另外加一臺機器,單獨再部署一個倉庫管理服務上去。這樣使得整個系統,有兩個倉庫管理服務在同時工做,平衡負載。而這一切都是在服務註冊中心,好比Zookeeper下自動完成的。架構
微服務結構,天生很好的支持系統更新升級操做。好比財務模塊有個新需求須要上線,咱們只須要替換財務模塊的服務重啓便可。這對已經登陸系統的用戶來講,沒有多少影響,不用從新登錄系統,其餘模塊服務使用也不受影響。
順便給你們推薦一下個人Java架構方面的大牛微信:dongnaobest20,會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化這些成爲架構師必備的知識體系,主要針對Java開發人員提高本身,突破瓶頸。 最後附上領取java資料的二維碼: