淺談容器、微服務和網際網路架構

隨著雲服務的興起,企業應用正在從分層式架構逐步遷移到互聯網架構。傳統的企業應用架構通常是單一架構(Monolithic),即典型的MVC三層架構。以一個主流的J2EE企業應用而言,其按照模型(數據層)——控制器(服務層)——視圖(訪問層)進行構建,然後打包為一個war包,部署運行於J2EE應用服務器上,例如Tomcat、JBoss、WebLogic等。

淺談容器、微服務和互聯網架構

然而,經過多年應用,Monolithic架構也逐漸老化,越來越不適應技術的發展。首先,隨著加入的應用功能增多,產生了代碼堆積現象,系統越來越龐大和複雜。尤其是引入敏捷開發後,產生了較多問題。例如應用持續集成方法時,自動加載、編譯、加載、測試整個應用代碼的時間過長,不能快速形成正反饋。其次,組件與組件之間的耦合性太強,所有應用都運行在服務器上的相同進程中。應用規模增大後,只有同時增加應用的副本,將多個副本部署到多個服務器上,無法實現彈性伸縮。最後,開發團隊之間,工作交集複雜,協調耗散大。

從長期實踐看,Monolithic架構天然的不具備健壯性,因為一旦某個組件出現問題,整個服務基本上就掛了。自身不具備分佈式服務能力,通常需要依賴於負載均衡器、數據庫HA等來實現服務的分佈化和負載分擔。相對而言,互聯網架構優勢在於分佈式、去中心化,支持彈性伸縮。其核心是輕應用、微服務。微服務架構也是從Monolithic架構演進來的。Monolithic應用中按照職責的不同,拆分解耦成一個個的單獨微服務(Micro Services),每個微服務都對應了一個獨立的業務功能,也只定義了該功必須的一些操作。從下圖可以形象的說明。

淺談容器、微服務和互聯網架構

微服務獨自或者共同部署在多臺應用服務器上,微服務之間通過標準的Restful接口實現訪問。這樣當一個微服務出現問題時,並不會影響到其他的服務。而且,微服務可以基於資源的需求進行獨立擴展,可以被部署在更小的主機上。各個微服務使用的開發語言也可以不同,只要保持接口協議統一。

隨著移動互聯網的爆發,越來越多的採用前端手機APP(Native或HTML5)+後端應用(Java、NodeJS等)的開發/部署模式,兩者之間通常採用Restful方式實現通訊,天然的實現了前臺和後臺的解耦,這也為微服務的流行提供了根本動力。

然而,不容忽視的是,微服務同樣存在一些劣勢。因為微服務通常部署在多個主機上,所以大量微服務的管理也成為一個難題。如果微服務使用不同的編程語言將開發,這就意味著每個服務的部署都需要完全不同的庫和框架,從而服務的部署會非常複雜。

幸運的是,Linux容器技術的使用可以很大程度上緩解微服務架構所帶來的問題。Linux容器技術使用了類似cnames和namespaces這樣的內核接口,它允許不同容器共享相同的內核,同時容器之間還進行了完全的隔離。

目前流行的Linux容器主要有Docker和Rocket。以Docker為例,Docker執行環境使用了一個被稱為libcontainer的模塊,它標準化了這些接口。Docker同樣為容器鏡像提供了一個類GitHub的資源庫DockerHub,讓容器的共享和發佈非常簡單,也正是這種相同主機上的容器隔離簡易了不同語言開發的微服務代碼部署。使用Docker,我們可以創建一個DockerFile來描述所有用到的語言、框架和服務間庫的依賴性。

將微服務應用放置在容器中,帶來了快速與可移植性。從開發、測試、上線,實現了“一次編寫,到處運行”。

總之,通過容器、微服務的有效結合應用,最終幫助企業應用演進到互聯網架構,實現IT投資和收益的最優化。

那如何學習才能快速入門並精通呢?

當真正開始學習的時候難免不知道從哪入手,導致效率低下影響繼續學習的信心。

但最重要的是不知道哪些技術需要重點掌握,學習時頻繁踩坑,最終浪費大量時間,所以有一套實用的視頻課程用來跟著學習是非常有必要的。

為了讓學習變得輕鬆、高效,今天給大家免費分享一套阿里架構師傳授的一套教學資源。幫助大家在成為架構師的道路上披荊斬棘。

這套視頻課程詳細講解了(Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構)等這些成為架構師必備的內容!

而且還把框架需要用到的各種程序進行了打包,根據基礎視頻可以讓你輕鬆搭建分佈式框架環境,像在企業生產環境一樣進行學習和實踐。

淺談容器、微服務和互聯網架構

後臺私信回覆 “ 架構 ” 就可以馬上免費獲得這套價值一萬八的內部教材!


分享到:


相關文章: