天天看點

深入了解Java-技術架構知識詳解

架構的分類

對于“架構”來講,理論上劃分了5種架構視圖,分别是:邏輯架構、開發架構、運作架構、實體架構、資料架構。根據名字,大家都可能大概能猜到其側重點和含義。這裡先用通俗的文字簡單介紹下,便于大家了解,大家可以不必糾結概念和這些理論。

邏輯架構:

邏輯架構關注的是功能,包含使用者直接可見的功能,還有系統中隐含的功能。或者更加通俗來描述,邏輯架構更偏向我們日常所了解的“分層”,把一個項目分為“表示層、業務邏輯層、資料通路層”這樣經典的“三層架構”。

開發架構:

開發架構則更關注程式包,不僅僅是我們自己寫的程式,還包括應用程式依賴的SDK、第三方類庫、中間價等。尤其是像目前主流的Java、.NET等依靠虛拟機的語言和平台,以及主流的基于資料庫的應用,都會比較關注。和邏輯架構有緊密的關聯。

運作架構:

顧名思義,更關注的是應用程式運作中可能出現的一些問題。例如并發帶來的問題,比較常見的“線程同步”問題、死鎖問題、對象建立和銷毀(生命周期管理)問題等等。開發架構,更關注的是飛機起飛之前的一些準備工作,在靜止狀态下就能規劃好做好的,而運作架構,更多考慮的是飛機起飛之後可能發生的一些問題。

實體架構:

實體架構,更關注的系統、網絡、伺服器等基礎設施。例如:如何通過伺服器部署和配置網絡環境,來實作應用程式的“可伸縮性、高可用性”。或者舉一個實際的例子,如何通過設計基礎設施的架構,來保障網站能支援同時10W人線上、7*24小時提供服務,當超過10W人或者低于10W人線上時,可以很友善的調整部署架構來支撐。

資料架構:

資料架構,更關注的是資料持久化和存儲層面的問題,也可能會包括資料的分布、複制、同步等問題。更貼切來講,如何選擇需要的關系型資料庫、流行的NOSQL,如何保障資料存儲層面的性能、高可用性、災備等等。很多時候,和實體架構是有緊密聯系的,但它更關注資料存儲層面的,實體架構更關注整個基礎設施部署層面。

上面講了那麼多,相信國内很少有公司是嚴格按照這五種視圖去分工和設計的。其實在筆者眼中,架構大緻分為兩種:軟體架構、系統架構。前三種視圖,可以歸納為軟體架構,而後兩種架構,則歸為系統架構。這也比較符合國内大部分中小型網際網路公司的現狀。

根據應用特性的不同,關注側重點可能不同。例如,某些門戶類的網際網路應用,讀多寫少而且業務相對比較簡單,則更加關注“高性能、可伸縮性、可用性”等方面。對于更加複雜的應用,例如電商類大規模交易型的應用,對每個層面和每個環節都會比較關注。對于業務型的系統,例如一些生産型企業使用的ERP,或者僅供企業内部使用的一些MIS、OA應用,通常更關注功能和複雜的業務和實作和擴充,而對性能等方面又可能不要太高,這類應用則更關注純軟體架構層面。這裡,不展開做具體讨論。是以很多時候,架構師也需要是一個團隊,而不是一個人“全棧”。

架構設計到底是什麼

在長期的技術招聘面試中,我發現在很多人眼中,架構就是分層,架構設計就是“三層架構”(或者四層、五層...反正分層越多就說明項目越複雜而且架構就越牛),或許是受到諸如PetShop之類的示例項目的影響,這裡暫時不去追究原因了。

軟體架構就是實用而且優雅的設計,它不在于分多少層,或者應用了多少種設計模式/架構模式等。它應該是以滿足實作使用者需求為前提,以開發人員普遍可接受為根本的,而且要符合系統特性和業務發展需要的,從軟體設計的角度,能夠達到層次清晰、可維護、可重用、可擴充...就非常優秀了,無需刻意去糾結分了多少層,是否使用了什麼模式,有多麼抽象等。以面向對象設計為例,基本目标是“高内聚、低耦合”,為此我們可能會遵循一些常見的設計原則(例如經典的SOLID設計原則)。最後糾正一點,通常我們所說的模式,其實又分為很多種,并不是僅僅指的是“設計模式”(設計模式也有千千萬,并不是隻有常見的GOF 23種設計模式)。通常包括:企業架構模式、設計模式、SOA模式、企業內建模式等等。

有些做開發的朋友容易把Tier和Layer混淆,或者認為兩者是一樣的。其實這兩個概念并不相同,最簡單的解釋就是:Layer往往是指系統的邏輯結構,而Tier則是指系統的實體部署結構,不同的Layer可以在同一Tier上;不同的Tier上面可以有相同的Layer。這兩個概念一般在分層的系統中提得最多。

如下圖所示:

順便再糾正一點,很多人問“到底什麼是web伺服器,什麼是應用伺服器”。這個恐怕沒有标準答案的。有些人可能覺得,處理靜态資源的就是web伺服器,處理動态請求的就是應用伺服器,這其實是不準确的。以網際網路領域典型的SOA架構為例,上層Web應用所在的伺服器,可以叫web伺服器,web應用僅僅負責處理輸入/輸出,而提供服務宿主的伺服器可以稱為應用伺服器(也包含對業務邏輯和資料通路的處理)。當然,服務的宿主方式可以有很多中,可以是系統服務,是可執行程式,是web應用,是Socket網絡服務...

邏輯分層VS實體分層

Layer 和Tier都是層,但是他們所表現的含義不同,Tier指的是軟體系統中實體上的軟體和硬體,具體指部署在某伺服器上,而Layer(邏輯層)指軟體系統中完成特定功能的邏輯子產品,邏輯概念。

Layer是邏輯上 組織代碼的形式。比如邏輯分層中表現層,服務層,業務層,領域層,他們是軟體功能來劃分的。并不指代部署在那台具體的伺服器上或者,實體位置。

Tier這指代碼運作部署的具體位置,是一個實體層次上的劃為,Tier就是指邏輯層Layer具體的運作位置。是以邏輯層可以部署或者遷移在不同實體層,一個實體層可以部署運作多個邏輯層。

從Layer和Tier就會延伸到邏輯架構和實體架構。我們一個邏輯分層(N-Layer)的部署運作環境可以在一台或者是多台伺服器,由于實體環境的多樣性,邏輯層次的部署也具有多樣性。這就需要我們必須了解實體架構和邏輯架構。

大多數情況下我們所說的N層應用系統指的是實體模型,具體子產品的分布實體位置。用戶端,服務層,邏輯層,資料庫伺服器,與我們的邏輯模型之間并不是一對一的關系。邏輯上的分層架構與實體位置上的伺服器數量和網絡邊界多少無關,邏輯架構層次隻與我們的功能劃分相關,是按照功能劃分。經典的3-Layer架構:表現層,業務層,資料通路層,他們可能運作在同一實體位置上。也可以是3台計算機上,這并不是邏輯架構所關注的。邏輯層次和實體分層數量關系為:邏輯層數必須不小于實體層數,因為一個實體層可以部署一個或者多個邏輯層次,邏輯層次隻能遷移在不同的實體環境。

架構師的分類

架構師往往是很多開發人員向往的職業,也不是像很多人想象中的那樣(畫一下PPT或者UML草圖,然後交給程式員們去實作,然後自己就自由玩耍了)。國内很多公司,是沒有架構師這種崗位定義的,通常是由技術優秀和經驗比較豐富的開發人員擔任,身兼多職的情況也并不少見。值得糾正的就是,架構師和系統分析師不同,系統分析師更側重在項目早期的需求分析。而架構師,一般貫穿整個軟體開發周期,與項目經理也是相輔相成的。微軟對于架構師,又分為:軟體架構師、系統架構師、解決方案架構師、企業架構師等。而其它一些廠商,可能又會劃分:技術架構師、業務架構師、網絡架構師、安全架構師、SOA架構師......

總結

到這裡,關于Java技術架構知識總結就結束了,,不足之處還望大家多多包涵!!希望大家可以了解什麼是Java技術架構知識

下面和大家交流幾點程式設計的方法:

總結。覺得收獲的話可以點個關注收藏轉發一波喔,謝謝大佬們支援。(吹一波,233~~)

1、多寫多敲代碼,好的代碼與紮實的基礎知識一定是實踐出來的

2、可以去騰訊課堂的圖靈學院學習一下java架構實戰案例,還挺不錯的。

最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望在成為一名更優秀的Java程式員的道路上,我們可以一起學習、一起進步。

想了解和學習以上課程可加群514790886

轉載于:https://juejin.im/post/5a0d38395188252964213e5e