Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
關注△的架構筆記△,十余年BAT架構經驗傾囊相授
大家好,我是。
軟件架構是架構師進階的必備技能,而且阿里等大廠面試都會重點考察你的架構能力,本篇我就全面來給大家詳解軟件架構@
最新原創超30萬字《阿里架構師進階專題合集》和《最全大廠Java面試題答案合集》,請關注本公眾號【的架構筆記】,后臺回復:資料,即可領取。
軟件架構
軟件架構是一個隱喻,類似于建筑物的架構,建筑學研究建筑的規劃、設計和實施,而軟件架構則是研究軟件的規劃、設計和實施。
軟件架構貫穿系統實現的整個過程,軟件架構就是軟件的基本結構,是軟件系統實現的主要參考,是軟件系統實現的藍圖。
為什么要學習軟件架構
軟件架構的設計顯得尤其重要,系統架構設計通過以下方式來解決上面的軟件難題:
1.抽象系統
抽象是將復雜的概念簡單化,在最高層次上,將軟件系統抽象為對象和過程,使具象的事物概念化,易于理解,易于交流。
對象可以是系統、組件、接口、類、方法等等不同層次的概念,過程是系統運行的方式和流程。
2.復雜性
軟件可以說是人類創造的最復雜的系統類,軟件的各個模塊之間有各種顯性或隱性的依賴關系,隨著系統的成長和模塊的增多,這些關系的數量往往以幾何級數的速度增長。
特別是現在流行的微服務架構,更需要解決服務之間的依賴性,所以,這個時候我們需要從更高的架構視角來解決以上這些問題。
軟件架構的本質就是要管理復雜性。
3.交流性
軟件架構會形成一套:設計文檔,描述說明,流程圖,架構圖,這些會讓復雜的軟件系統以更易于理解和易于交流的方式展示。
有哪些軟件架構
架構模式雖多,但常用的也就那么幾種。
1.分層架構
分層架構,英文名layered ,是最常見的軟件架構,也是事實上的軟件標準架構。
分層架構將軟件分成若干個水平層,每一層都有清晰的角色和分工,層與層之間通過接口通信。
分層架構,最常見的就是是四層結構,如下圖所示:
第一層:表現層:負責用戶界面;
第二層:業務層:負責實現業務邏輯;
第三層:持久層:負責提供數據,比如:SQL 語句就放在這一層;
第四層:數據庫:負責保存數據,持久化重要的數據;
分層架構的優點
1)分工明確
不同技能的程序員可以分工,負責不同的層,天然適合大多數軟件公司的組織架構。
2)降解系統復雜度
分層的核心目的還是為了降解系統復雜度,提高系統的健壯性和可維護性,這也就是為什么需要分層的原因。
分層架構的缺點
每一層都可以獨立測試,其他層的接口通過模擬解決然而分層架構固然很好,但前提是分層合理。
擴展性差,增加需求必須依次擴展每一層,由于每一層內部是耦合的,擴展會很困難。
2.事件驅動架構
事件驅動架構,英文名Event Driven ,是一個流行的分布式異步架構模式,可以用來設計規模很大的應用程序。
事件驅動架構是一種基于發布/訂閱模式的消息異步通信的架構,你可以把它理解為架構層面的觀察者模式。
事件驅動架構
通常,架構主要包含4種組件,如下圖所示:
1)事件隊列(event queue)
負責:接收事件的入口。
2)分發器(event )
負責:將不同的事件分發到不同的業務邏輯單元。
是一個事件中樞處理單元,知道事件的處理流程,但不執行具體的事件業務處理邏輯,根據事件的特征對初始事件進行拆分編排為處理事件并進行分發。
3)事件通道(event channel)
負責:分發器與處理器之間的聯系渠道。
是一組各自獨立的組件,彼此之間沒有依賴,自包含,不依賴于其他 的處理結果。
4)事件處理器(event )
負責:實現業務邏輯,處理完成后會發出事件,觸發下一步操作。
事件驅動架構工作流程
第一步:客戶端發送一個事件到事件隊列event queues中,它用來將事件傳送給event ;
第二步:Event 收到初始的事件后,會發送額外的一些異步事件給event 來執行處理的每個步驟;
第三步:Event 既可以是消息隊列,也可以是消息topic,大部分是消息topic,這樣可以由多個消息處理器(event )處理同一個消息。
第四步:Event 監聽event ,接收事件并處理一些業務邏輯。
事件驅動架構應用場景
典型的場景:比如在交易系統中,每個請求流程必須經過特定的步驟,如驗證、訂單、配送,以及通知買家等。
3.MVC架構
MVC架構是軟件工程中的一種軟件架構模式,它把軟件系統分為三個基本的部分。
分別為:
主要為以上三大部分組成,如下圖所示:
1.模型(Model)
模型封裝了數據及對數據的操作,可以直接對數據庫進行訪問。
簡要的講:就是一個或多個對象,用于存儲數據和業務邏輯。
2.視圖(View)
視圖負責展示,沒有具體的程序邏輯,比如:一個JSP頁面想控制器提交數據和為模型提供數據顯示,JSP頁面主要使用HTML標記和標記來顯示數據。
3.控制器()
控制器用于控制程序的流程,將模型中的數據展示到視圖中。
比如:Servlet對象根據視圖提交的請求進行控制,即將請求轉發給業務邏輯的,并將處理記過存放到實體模型中,輸出給視圖顯示。
MVC架構優點
1)多個視圖共享一個模型,大大提高代碼的可重用性;
2)三個模塊相互獨立,改變其中一個不會影響其他兩,所以依據這種設計模式,能構建良好的松耦合性的組件;
3)控制器提高了應用程序的靈活性和可控制性:控制器可以用來連接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構造應用程序提高強有力的手段。
MVC架構缺點
1)增加了系統結構和實現的復雜性
對于簡單頁面,嚴格遵循mvc,會增加結構的復雜性。
2)視圖與控制器過于緊密的連接
視圖與控制器是相互分離,但確實聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的。
3)視圖對模型數據的低效率訪問
依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據,對未變化數據的不必要的頻繁訪問,也將損害操作性能。
4.微服務架構
最早一個系統業務量很小的時候,大部分Web工程的Java應用程序,打包為War包部署在一臺服務器上。
比如:你正在構建一個在線商店系統,包含功能:用戶、商品、下訂單等功能,整體架構如下圖所示:
隨著業務訪問量越來越大,單體應用就會出現巨大的瓶頸。
比如:
所以后期就會出現,按照業務為單位進行拆分,出現的微服務架構。
微服務優點
微服務缺點
5.云架構
云架構,英文名cloud ,是指各項技術如何整合在一起以創建云,云是指能夠抽象、匯集和共享整個網絡中的可擴展資源的 IT 環境。
云被視為平臺即服務(Pass),因為云提供商為用戶提供了平臺以及底層IT基礎架構。
云架構主要解決擴展性和并發的問題,是最容易擴展的架構。
這個模式主要分成兩部分:
虛擬中間件又包含四個組件:
消息中間件( Grid):管理用戶請求和session,當一個請求進來以后,決定分配給哪一個處理單元;
數據中間件(Data Grid):將數據復制到每一個處理單元,即數據同步。保證某個處理單元都得到同樣的數據;
處理中間件( Grid):如果一個請求涉及不同類型的處理單元,該中間件負責協調處理單元;
部署中間件( Manager):負責處理單元的啟動和關閉,監控負載和響應時間,當負載增加,就新啟動處理單元,負載減少,就關閉處理單
云架構的優點:
高負載,高擴展,動態部署。
云架構的缺點
1)實現復雜,成本較高;
2)數據隱私問題:由于隱私問題,一些法律法規以及一些公司政策不允許將數據存儲在云環境中。
3)嚴重依賴互聯網連接:通常云服務是通過互聯網提供的,如果您處于互聯網連接較差的地區,或者更糟糕的是,根本沒有互聯網,這可能是一個問題。
以上
最后送大家一個福利:
送大家一份我原創超30萬字的,非常的全面。
以及給大家整理了一份非常全面的,包含:Java、多線程、JVM、Spring、MySQL、Redis、Dubbo、中間件…等最全大廠必考題及答案詳解。
需要以上架構&面試&答案&合集的同學,加我微信即可領取!
添加時備注:資料
*請認真填寫需求信息,我們會在24小時內與您取得聯系。