記得自己在2003年參與的項目,使用了JSP、Servlet、JavaBeans和JDBC所組合的最原始的Web應用框架。 對于一位牛逼的資深級程序員來講,這種原始的應用框架能寫出最整齊、簡潔與極致高性能的代碼。 但是軟件工程需要更多人參與進來,原始的框架容易變得混亂,原因就在于太多純粹性的技術問題束縛了開發團隊,那么參與者越多,代碼堆積的熵增就越顯著,項目也逐漸陷入泥潭。 因此,各種Web架構總是被頂尖的工程師們不斷更新迭代、推陳出新,引導工程師們去關注業務本身,而非瑣碎的技術問題。 從這我們就能一窺應用架構設計不斷演進的本質——要讓開發者掙脫技術復雜性所帶來的枷鎖,尋求更為靈活的規則與約定的設計,實現有序與自由的最大兼顧。 開發者能靈活地應對需求,專注于業務的構建,擺脫復雜與混亂,這也是我們尋求自由之美的意義。 在那個年代,工程師們對科技生產力提升的嘗試遠遠超出了我們的想象,比較典型的例子就是EJB(Enterprise Java Beans)技術。 什么是EJB呢?封裝業務邏輯的組件,解放了開發者的生產力,使開發人員無須再操心數據庫訪問、分布式事務處理、安全性、多線程并發問題等瑣碎任務的編程技術。 這是在1998年提出了的架構設計,這種技術目標就算放到現在也一點都不過時。 EJB作為超越時代的分布式應用架構設計,在20年前就被廣泛應用與嘗試,盡管它的嘗試最終失敗了,也催生出了更多偉大且流行的開源技術框架,例如:Spring框架生態。 但是我們重新翻看那一段歷史,只是為了去欣賞EJB的分布式架構所帶來的自由之美,欽佩天才般的科學家和IT工程師們的創造力以及對于未知領域的勇敢嘗試。 如下圖1 - 1 EJB 3.x應用架構示例所示: 圖1 - 1 EJB 3.x應用架構示例 來自于我在2010年參與的一個電商項目,使用了分布式應用架構的部分應用案例。 主要應用EJB 3.0架構,部署在云端跨區域的兩臺Amazon EC2虛擬節點,分別管理著各自的Amazon RDS MySQL數據庫。 這種分布式架構中,每個EJB業務組件都是獨立部署在一個上下文容器中運行,通過網絡互相通訊與協作,組件可在本地與遠程復用,甚至實現了分布式事務。 對比原始框架,業務模塊被分布式組件化后,就遏制了工程無節制的代碼堆積,開發者不用去操心復雜的事務問題、實例管理問題和并發安全問題,就能極大提升團隊協作分工的組織效率。 這就是EJB利用分布式的組件化技術,在尋求自由靈活的開發方式上,為開發者帶來了開山祖師般的全新體驗。 上圖中的EJB應用架構示例難道不夠優雅嗎? 為什么最終還是無法成為行業主流而逐漸沒落呢?這其實是我們思考的關鍵。 EJB自身在部署方面的臃腫,分布式架構的復雜性在當時是非常重要的原因,但我認為更關鍵的原因在于使用中間件服務造成的依賴性遠大于后來居上的Spring框架生態。 開發者對這些中間件服務的依賴嚴重,實際上就加重了對自身的限制。 對于開發者來講,希望整個開發過程更為靈活與自由,這是一種近乎本能性的向往;同時希望團隊協作過程有序且清晰,這是社會分工的內驅力。 自由與限制需要一種權衡,優秀的平臺框架能通過精妙絕倫的技術設計,在兼顧兩者的情況下,側重開發自由,降低平臺限制,實現具有美感的開發方式,這對于我們都是至關重要的事情。 從這里我們就能看到一種流行的趨勢:Serverless(無服務器技術),本質上就是在不斷解放開發者的生產力。 例如:亞馬遜云科技于2014年率先推出的事件驅動無服務器(event-driven serverless)計算服務 Amazon Lambda. 開發者不必再操心服務器與后端基礎架構的瑣碎技術,而是借助觸發器、不同編程語言的功能函數,專注于業務代碼的構建。 在文件處理、實時流、Web應用程序、物聯網IoT、移動應用等各個關鍵領域,結合Amazon Lambda,可以構建出伸縮性很強的基于Serverless的分布式應用系統。 當今微服務、分布式和容器技術的演進融合之美 傳統部署架構逐漸被云平臺所替代,在云平臺之上則是更為輕量化的微服務架構與容器化技術,承載了主流的云應用項目。 然而隨著互聯網用戶規模化,高并發、大規模數據所引發的問題往往會更致命,高可用、并行提升性能的需求愈發強烈。 另外,項目中軟件系統的開發規模也在不斷膨脹,單體架構的工程化組織管理必然會隨著長期維護而走向臃腫與混亂。 面對這些難題,微服務架構為開發者打開了一個更為適度、自由、靈活的新局面,并且在微服務項目具體實施的過程中,又與分布式架構緊密結合在了一起。 微服務架構的自由之美 前幾年,我曾負責互聯網醫療微服務平臺的架構設計。 這個項目的特點在于將醫療信息化的肌體裝進互聯網的外殼中,因此,醫療業務的復雜性與互聯網的技術平臺性需要同時兼容。 如下圖1 - 2 互聯網醫療微服務與分布式架構示例所示: 圖1 - 2 互聯網醫療微服務與分布式架構示例 網關與微服務之間、微服務與微服務之間、微服務與各個Amazon RDS數據分庫之間就形成了一種分布式的拓撲結構,另外承載高并發的關鍵微服務也可以由多實例副本形成均衡負載。 微服務模型單元要比過去EJB模型單元更粗粒度,是以服務為基準而非組件,這樣就給予了架構師更為靈活的自由度。 按需劃分適合大小的服務粒度并進行適當的分布,也就不會對開發者硬性規定底層需要依賴什么樣的服務,這就保證了輸出的軟件具有平臺無關性。 微服務架構之所以能形成如此強大的一股潮流,其原因就在于面對互聯網規模化的時代,可以讓應用架構呈現出自由、靈活與開放的一面,同時又能對軟件易于混亂的特征分而治之。 這與我們前面所說的兼顧有序與自由的應用架構設計的本質形成了很好的印證,它為開發者應對客戶需求的軟件應用設計,提供了一種自由的張力,這也是工程師們不斷追求自由之美的關鍵價值。 容器技術的靈活之美 軟件應用架構發展到了微服務這個階段看起來應該很不錯,可是現在又面臨一個問題,微服務架構必然需要用掉更多的計算資源,而且更適合于分布式架構環境,在采用更多機器組成的分布式網絡節點的情況下,如何才能優化計算資源的使用? 這時候容器化技術的價值與作用就體現出來了,例如:Docker引擎管理的容器作為操作系統上的一個進程,保證了容器之間互不影響,并且可以針對容器的CPU、內存等計算資源進行預先分配,容器鏡像對程序的封裝讓發布過程簡單到一條命令就能正常運行。 這樣就極大簡化了服務在云服務器上的部署難度,提升了更高的效率,甚至我們可以同時部署多個版本的服務,形成生產與測試環境的并存。 當我們感受到容器技術帶來的自由與靈活,可是如何讓開發者忘卻容器管理引擎、分布式架構部署的復雜性問題呢? 其實在上面的微服務案例中已經給出了答案,整個微服務實例全部由早期Amazon EC2 + Docker容器引擎的部署模式,遷移到了Amazon ECS平臺之上。 通過Amazon Fargate實現了Serverless部署,不用考慮容器的分布式部署問題;在項目前期完全不需要考量計算資源的規劃問題,因為在業務不斷增長的情況下,Amazon ECS可以實現計算資源的動態伸縮,實在是太靈活了。 接下來我們就展開聊聊在云服務架構環境下,Amazon ECS與Serverless技術為開發者擺脫底層環境束縛,到底帶來了哪些服務支撐。 Amazon云容器與Serverless技術的支撐之美Amazon云容器的整體之美 當我們擁有了微服務、分布式架構與容器技術,那么云廠商又為此提供了怎樣的支撐呢? 我還是比較看好Amazon領導的這種云服務理念,因為Amazon云技術正在朝著Serverless的方向進行發展,尤其是充分利用了容器技術的出現,加快了這一步伐。 前述案例中的Amazon ECS全稱是(Amazon Elastic Container Service),它是針對容器技術高度彈性的管理服務。 Amazon ECS希望用戶直接面對容器,而不是面對操作系統,也就是說Amazon云平臺提供給用戶購買的計算單元粒度更細致了。 那么這又帶來了什么好處呢? 其實是兩方面: 優勢一:我們沒必要就為了部署一個服務,就得先占用一臺虛擬機OS,現在Amazon ECS給了一個新方案,部署維護一個Docker容器就夠了,它會自己維護計算資源的基礎設施。 由于資源占用少了,自然我們充值就少了; 優勢二:現在的云服務大趨勢是分布式,這樣我們的應用可以形成集群,以便增強系統高可靠性以及對服務性能的彈性伸縮管理。 Amazon ECS默認提供的Serverless模式就讓開發者不再顧慮運行服務的集群分布問題。我們只考慮要上多少Docker容器,至于放置在什么地方,哪個機房,哪臺服務器,那都是Amazon ECS的Serverless技術考慮的事情。 那么我們就用一個整體上較低的綜合成本,實現了一個真正強大的面向服務的集群環境。 而Amazon的ECS、EFS 、EC2、ECR是什么關系呢? 如下圖1 - 3 Amazon ECS、EC2架構體系示意圖所示: 圖1 - 3 Amazon ECS、EC2架構體系示意圖 Amazon EC2是Amazon提供的虛擬機,它與Amazon ECS共享基礎設施,形成相互協作。 通過Amazon EFS就可以將Amazon ECS任務的容器目錄掛載到EFS上,那么Amazon EC2實例就可以通過網絡文件系統(NFS)掛載到本地目錄的方式,去訪問EFS中ECS容器的內部文件。 Amazon ECR是Amazon提供的Registry倉庫,為Amazon ECS提供容器鏡像服務,不僅使用方便,私密性也很好,而且比建立私有Registry倉庫的維護成本要低得多。 從上述架構介紹中,我們就可以看到Amazon云平臺是系統化地提供了整套云容器化解決方案。 Amazon ECS的Serverless架構之美 對于Amazon ECS的管理核心就是Amazon Fargate(Amazon的Serverless技術),它可以將Amazon ECS任務(本質上就是容器實例)放置在集群的不同位置,形成高可靠的分布式系統,至于服務到底放置在分布式網絡中的哪個計算節點之上,是不需要開發者操心的。 如下圖1 - 4 Amazon ECS和Fargate技術結構體系示意圖所示: 圖1 - 4 Amazon ECS和Fargate技術結構體系示意圖 我們只需要詳細地對容器任務和服務進行配置描述,然后將配置提交給Amazon ECS。 Amazon Fargate會創建任務實例,每個任務都是獨立運行的一個服務,每個服務并不獨占一臺計算節點資源,但又能通過資源配額的自動擴展來應對更大的外部請求吞吐量。 另外針對Amazon ECS的應用服務是基于界面配置,并不利于自動化發布運維服務,Amazon又進一步提供了命令模式的Amazon Copilot,進一步實現完全自動化的CI/CD管道。 如下圖1 - 5 Copilot顯示服務狀態示例所示: 圖1 - 5 Copilot顯示服務狀態示例 我們可以通過終端命令:"copilot svc status",就能拿到"ecsdemo-frontend"這個容器服務的狀態信息,通過捕獲的狀態信息。 我們可以進行程序級的二次分析,應用在我們的日志、運維監控等功能當中。 因此Amazon ECS最大的優勢還是在于提供了特別強大的圖形界面配置功能和命令運維的工具集合功能,不僅包括了Amazon Copilot,還有Amazon ECS CLI、Amazon CDK等。 這些功能可以通過非圖形界面的終端命令方式、編程的方式(TypeScrpit、JavaScrpit、Python、Java、C#) 更全面且細粒度的創建與維護Amazon ECS基礎設施,控制和優化Amazon ECS集群與任務。 展望云服務架構的未來 通過上述各章節的描述,我們可以看到應用服務架構的進步,二十年前還需要重度依賴中間件及底層服務,如今逐漸演進到了Serverless的時代,這是無數工程師、開源社區以及像亞馬遜云科技(Amazon Web Services)這樣的商業公司所共同努力的成果。 那么我們暢想一下云服務架構的未來,我認為基于云平臺的Serverless架構應該會成為主流模式,Serverless會讓開發者更加關注業務本身,而非基礎設施與瑣碎的基礎技術。 但是對于開發者來講,Serverless的優勢在于分布式計算資源的自動調度,但是分布式架構的復雜特性又會讓很多開發者難以理解。 因此,云服務廠商必然會在這個方面的基礎設施層進行發力,例如Amazon EKS就是在云環境下創建和運行K8s集群提供了整套解決方案,目標就是讓開發者不用關注復雜的分布式問題。 我相信這種去分布式復雜化的基礎設施必將對應用軟件架構起到越來越重要的作用,也會變得越來越流行。 開發者可以在這樣的平臺之上,既能獲得更大的自由與靈活度,專注于自己的業務功能改善,又能充分利用分布式技術優勢,讓更多的開發者在Serverless時代充分感受到自由之美。 報名開啟 | 自由構建 探索無限 亞馬遜云科技2022 Dev Day 重磅來襲,不容錯過! 多位大咖現身說法 如何用充滿“技術美感”的方式 幫助開發者 實現更簡單、自由、高效的開發 此外,還有大量專家觀點碰撞 技術展、創新賽、動手實操等環節 精彩不斷,干貨滿滿 攜手大家一起“自由構建,探索無限” 點擊 https://marketing.csdn.net/p/0556be2dd6345bd277eb660eed38f11c,發現更多美~ |