2.2. 應用架構(剖面架構,也叫邏輯架構圖):
硬件到應用的抽象,包括抽象層和編程接口。應用架構和業務架構是相輔相成的關系。業務架構的每一部分都有應用架構。
類似:
應用架構:應用作為獨立可部署的單元,為系統劃分了明確的邊界,深刻影響系統功能組織、代碼開發、部署和運維等各方面. 應用架構定義系統有哪些應用、以及應用之間如何分工和合作。這里所謂應用就是各個邏輯模塊或者子系統。
應用架構圖關鍵有2點:
①. 職責劃分: 明確應用(各個邏輯模塊或者子系統)邊界
②. 職責之間的協作:
應用分層有兩種方式:
應用的合反映應用之間如何協作,共同完成復雜的業務case,主要體現在應用之間的通訊機制和數據格式,通訊機制可以是同步調用/異步消息/共享DB訪問等,數據格式可以是文本/XML/JSON/二進制等。
應用的分偏向于業務,反映業務架構,應用的合偏向于技術,影響技術架構。分降低了業務復雜度,系統更有序,合增加了技術復雜度,系統更無序。
應用架構的本質是通過系統拆分,平衡業務和技術復雜性,保證系統形散神不散。
系統采用什么樣的應用架構,受業務復雜性影響,包括企業發展階段和業務特點;同時受技術復雜性影響,包括IT技術發展階段和內部技術人員水平。業務復雜性(包括業務量大)必然帶來技術復雜性,應用架構目標是解決業務復雜性的同時,避免技術太復雜,確保業務架構落地。
2.3. 數據架構
數據架構指導數據庫的設計. 不僅僅要考慮開發中涉及到的數據庫,實體模型,也要考慮物理架構中數據存儲的設計。
2.4. 代碼架構(也叫開發架構):
子系統代碼架構主要為開發人員提供切實可行的指導,如果代碼架構設計不足,就會造成影響全局的架構設計。比如公司內不同的開發團隊使用不同的技術棧或者組件,結果公司整體架構設計就會失控。
代碼架構主要定義:
①. 代碼單元:
②. 代碼單元組織:
2.5. 技術架構
技術架構:確定組成應用系統的實際運行組件(lvs,nginx,tomcat,php-fpm等),這些運行組件之間的關系,以及部署到硬件的策略。
技術架構主要考慮系統的非功能性特征,對系統的高可用、高性能、擴展、安全、伸縮性、簡潔等做系統級的把握。
系統架構的設計要求架構師具備軟件和硬件的功能和性能的過硬知識,這也是架構設計工作中最為困難的工作。
2.6. 部署拓撲架構圖(實際物理架構圖):
拓撲架構,包括架構部署了幾個節點,節點之間的關系,服務器的高可用,網路接口和協議等,決定了應用如何運行,運行的性能,可維護性,可擴展性,是所有架構的基礎。這個圖主要是運維工程師主要關注的對象。
物理架構主要考慮硬件選擇和拓撲結構,軟件到硬件的映射,軟硬件的相互影響。
三. 架構級別
我們使用金字塔的架構級別來說明,上層級別包含下層:
戰略設計與戰術設計
基于架構金字塔,我們有了系統架構的戰略設計與戰術設計的完美結合:
四. 應用架構演進
業務架構是生產力,應用架構是生產關系,技術架構是生產工具。業務架構決定應用架構,應用架構需要適配業務架構,并隨著業務架構不斷進化,同時應用架構依托技術架構最終落地。
架構演進路程:單體應用→分布式應用服務化→微服務
4.1. 單體應用
企業一開始業務比較簡單,只應用某個簡單場景,應用服務支持數據增刪改查和簡單的邏輯即可,單體應用可以滿足要求。
典型的三級架構,前端(Web/手機端)+中間業務邏輯層+數據庫層。這是一種典型的Java Spring MVC或者Python Django框架的應用。其架構圖如下所示:
針對單體應用,非功能性需求的做法:
單體架構的應用比較容易部署、測試, 在項目的初期,單體應用可以很好地運行。然而,隨著需求的不斷增加, 越來越多的人加入開發團隊,代碼庫也在飛速地膨脹。慢慢地,單體應用變得越來越臃腫,可維護性、靈活性逐漸降低,維護成本越來越高。下面是單體架構應用的一些缺點:
4.2. 分布式
隨著業務深入,業務要求的產品功能越來越多,每個業務模塊邏輯也都變得更加復雜,業務的深度和廣度都增加,使得單體應用變得越來越臃腫,可維護性、靈活性逐漸降低,增加新功能開發周期越來越長,維護成本越來越高。
這時需要對系統按照業務功能模塊拆分,將各個模塊服務化,變成一個分布式系統。業務模塊分別部署在不同的服務器上,各個業務模塊之間通過接口進行數據交互。
該架構相對于單體架構來說,這種架構提供了負載均衡的能力,大大提高了系統負載能力,解決了網站高并發的需求。另外還有以下特點:
4.3. 微服務
緊接著業務模式越來越復雜,訂單、商品、庫存、價格等各個模塊都很深入,比如價格區分會員等級,訪問渠道(app還是PC),銷售方式(團購還是普通)等,還有大量的價格促銷,這些規則很復雜,容易相互沖突,需要把分散到各個業務的價格邏輯進行統一管理,以基礎價格服務的方式透明地提供給上層應用,變成一個微內核的服務化架構,即微服務。
微服務的特點:
微服務雖然有很多吸引人的地方,但它并不是免費的午餐,使用它是有代價的。使用微服務架構面臨的挑戰。
五. 衡量架構的合理性
架構為業務服務,沒有最優的架構,只有最合適的架構,架構始終以高效,穩定,安全為目標來衡量其合理性。
合理的架構設計:
5.1. 業務需求角度
5.2. 非業務需求角度
①. 穩定性。指標:
②. 高效指標:
③. 安全指標
六. 常見架構誤區
開高走落不到實處
常見誤區
七. 架構知識體系
7.1. 架構演進
7.2. 架構模式
分層:橫向分層:應用層,服務層,數據層
分割:縱向分割:拆分功能和服務
分布式
集群:提高并發和可用性
緩存:優化系統性能
異步:降低系統的耦合性
冗余:冷備和熱備,保證系統的可用性
自動化:發布,測試,部署,監控,報警,失效轉移,故障恢復
安全:
7.3. 架構核心要素
高性能:網站的靈魂
可用性:保證服務器不宕機,一般通過冗余部署備份服務器來完成
伸縮性:建集群,是否快速應對大規模增長的流量,容易添加新的機器
集群
可擴展性:主要關注功能需求,應對業務的擴展,快速響應業務的變化。是否做法開閉原則,系統耦合依賴
安全性:網站的各種攻擊,各種漏洞是否堵住,架構是否可以做到限流作用,防止ddos攻擊。
八. 架構書籍推薦
1. 《大型網站技術架構:核心原理與案例分析》
這是比較早,比較系統介紹大型網站技術架構的書,通俗易懂又充滿智慧,即便你之前完全沒接觸過網站開發,通讀前幾章,也能快速獲取到常見的網站技術架構及其應用場景。非常贊。
2. 《億級流量網站架構核心技術》
相比《大型網站技術架構》的高屋建瓴,開濤的這本《億級流量網站架構核心技術》則落實到細節,網站架構中常見的各種技術,比如緩存、隊列、線程池、代理……,統統都講到了,而且配有核心代碼。甚至連 Nginx 的配置都有!
如果你想在實現大流量網站時找參考技術和代碼,這本書最合適啦。
3. 《架構即未來》
這是一本“神書”啦,超越具體技術層面,著重剖析架構問題的根源,幫助我們弄清楚應該以何種方式管理、領導、組織和配置團隊。
4. 《分布式服務架構:原理、設計與實戰》
這本書全面介紹了分布式服務架構的原理與設計,并結合作者在實施微服務架構過程中的實踐經驗,總結了保障線上服務健康、可靠的最佳方案,是一本架構級、實戰型的重量級著作。
5. 《聊聊架構》
這算是架構方面的一本神書了,從架構的原初談起,從業務的拆分談起,談到架構的目的,架構師的角色,架構師如何將架構落地……強烈推薦。
不過,對于沒有架構實踐經驗的小伙伴來講,可能會覺得這本書比較虛,概念多,實戰少。但如果你有過一兩個項目的架構經驗,就會深深認同書中追本溯源探討的架構理念。
6. 《軟件架構師的12項修煉》
大多數時候所謂的“技術之玻璃天花板”其實只是缺乏軟技能而已。這些技能可以學到,缺乏的知識可以通過決定改變的努力來彌補。
作者 |規速
來源丨/hguisu/article/details/
*請認真填寫需求信息,我們會在24小時內與您取得聯系。