架構設計(1)- 談談架構
1、什麼是架構和架構本質
在軟體行業,對於什麼是架構,都有很多的爭論,每個人都有自己的理解。 此君說的架構和彼君理解的架構未必是一回事。
我們主要針對網際網路服server系統(類似網站)來定義架構:架構是系統的骨架,支撐和連結各個部分,包括元件、連線件、約束規範,以及指導這些內容設計與演化的原理。
元件:類似應用服務,獨立模組、資料庫、nginx等等)、
連線件:分散式呼叫、程序間呼叫、呼叫使用http協議還是tcp協議、元件之間的互動關係、
約束規範: 設計原則、編碼規範等等。
即架構=元件+互動。
這類似建築設計規劃,城市總體規劃等,其實就是架構,只是應用的場景不同。
架構的本質就是對系統進行有序化地重構以致符合當前業務的發展,並可以快速擴充套件。
那什麼樣的系統要考慮做架構設計?
1. 需求相對複雜.
2. 非功能性需求在整個系統佔據重要位置.
3. 系統生命週期長,有擴充套件性需求.
4.系統基於元件或者整合的需要.
5.業務流程再造的需要.
2、架構分類
架構可細分為業務架構、應用架構、技術架構, 程式碼架構, 部署架構,.
業務架構是戰略,應用架構是戰術,技術架構是裝備。其中應用架構承上啟下,一方面承接業務架構的落地,另一方面影響技術選型。
熟悉業務,形成業務架構,根據業務架構,做出相應的應用架構,最後技術架構落地實施。
如何針對當前需求,選擇合適的應用架構,如何面向未來,保證架構平滑過渡,這個是軟體開發者,特別是架構師,都需要深入思考的問題。
一、業務架構(俯視架構):
包括業務規劃,業務模組、業務流程,對整個系統的業務進行拆分,對領域模型進行設計,把現實的業務轉化成抽象物件。
看看京東業務架構(網上分享圖):
二、應用架構(剖面架構,也叫邏輯架構圖):
硬體到應用的抽象,包括抽象層和程式設計介面。應用架構和業務架構是相輔相成的關係。業務架構的每一部分都有應用架構。
類似:
應用架構:應用作為獨立可部署的單元,為系統劃分了明確的邊界,深刻影響系統功能組織、程式碼開發、部署和運維等各方面. 應用架構定義系統有哪些應用、以及應用之間如何分工和合作。這裡所謂應用就是各個邏輯模組或者子系統。
應用架構圖關鍵有2點:
1、職責劃分: 明確應用(各個邏輯模組或者子系統)邊界
1)邏輯分層
2)子系統、模組定義。
3)關鍵類。
2、職責之間的協作:
1)介面協議:應用對外輸出的介面。
2)協作關係:應用之間的呼叫關係。
應用分層有兩種方式:
一種是水平分(橫向),按照功能處理順序劃分應用,比如把系統分為web前端/中間服務/後臺任務,這是面向業務深度的劃分。
另一種是垂直分(縱向),按照不同的業務型別劃分應用,比如進銷存系統可以劃分為三個獨立的應用,這是面向業務廣度的劃分。
應用的合反映應用之間如何協作,共同完成複雜的業務case,主要體現在應用之間的通訊機制和資料格式,通訊機制可以是同步呼叫/非同步訊息/共享DB訪問等,資料格式可以是文字/XML/JSON/二進位制等。
應用的分偏向於業務,反映業務架構,應用的合偏向於技術,影響技術架構。分降低了業務複雜度,系統更有序,合增加了技術複雜度,系統更無序。
應用架構的本質是通過系統拆分,平衡業務和技術複雜性,保證系統形散神不散。
系統採用什麼樣的應用架構,受業務複雜性影響,包括企業發展階段和業務特點;同時受技術複雜性影響,包括IT技術發展階段和內部技術人員水平。業務複雜性(包括業務量大)必然帶來技術複雜性,應用架構目標是解決業務複雜性的同時,避免技術太複雜,確保業務架構落地。
三、程式碼架構(也叫開發架構):
子系統程式碼架構主要為開發人員提供切實可行的指導,如果程式碼架構設計不足,就會造成影響全域性的架構設計。比如公司內不同的開發團隊使用不同的技術棧或者元件,結果公司整體架構設計就會失控。
程式碼架構主要定義:
一、程式碼單元:
1、配置設計
2、框架、類庫。
二、程式碼單元組織:
1、編碼規範,編碼的慣例。
2、專案模組劃分
3、頂層檔案結構設計,比如mvc設計。
4、依賴關係
四、技術架構,也可以叫系統架構
技術架構:確定組成應用系統的實際執行元件(lvs,nginx,tomcat,php-fpm等),這些執行元件之間的關係,以及部署到硬體的策略。
技術架構主要考慮系統的非功能性特徵,對系統的高可用、高效能、擴充套件、安全、伸縮性、簡潔等做系統級的把握。
系統架構的設計要求架構師具備軟體和硬體的功能和效能的過硬知識,這也是架構設計工作中最為困難的工作。
五、部署拓撲架構圖(實際物理架構圖):
拓撲架構,包括架構部署了幾個節點,節點之間的關係,伺服器的高可用,網路介面和協議等,決定了應用如何執行,執行的效能,可維護性,可擴充套件性,是所有架構的基礎。這個圖主要是運維工程師主要關注的物件。
3、應用架構
架構演進路程:
->初始階段:LAMP,部署在一臺伺服器
->應用伺服器和資料伺服器分離
->使用快取改善效能
->使用叢集改善併發
->資料庫地讀寫分離
->使用反向代理和cdn加速
->使用分散式檔案和分散式資料庫
->業務拆分
->分散式服務
業務架構是生產力,應用架構是生產關係,技術架構是生產工具。業務架構決定應用架構,應用架構需要適配業務架構,並隨著業務架構不斷進化,同時應用架構依託技術架構最終落地。
企業一開始業務比較簡單,比如進銷存,此時面向內部使用者,提供簡單的資訊管理系統(MIS),支援資料增刪改查即可,單體應用可以滿足要求。
隨著業務深入,進銷存每塊業務都變複雜,同時新增客戶關係管理,以更好支援營銷,業務的深度和廣度都增加,這時需要對系統按照業務拆分,變成一個分散式系統。
更進一步,企業轉向網際網路+戰略,拓展線上交易,線上系統和內部系統業務類似,沒必要重做一套,此時把內部系統的邏輯做服務化改造,同時供線上線下系統使用,變成一個簡單的SOA架構。
緊接著業務模式越來越複雜,訂單、商品、庫存、價格每塊玩法都很深入,比如價格區分會員等級,訪問渠道(無線還是PC),銷售方式(團購還是普通)等,還有大量的價格促銷,這些規則很複雜,容易相互衝突,需要把分散到各個業務的價格邏輯進行統一管理,以基礎價格服務的方式透明地提供給上層應用,變成一個微核心的SOA架構。
同時不管是企業內部使用者,還是外部顧客所需要的功能,都由很多細分的應用提供支援,需要提供portal,整合相關應用,為不同使用者提供統一檢視,頂層變成一個AOA的架構(application orientated architecture)。
4、架構知識體系
架構演進- 初始階段:LAMP,部署在一臺伺服器
- 應用伺服器和資料伺服器分離
- 使用快取改善效能
- 使用叢集改善併發
- 資料庫地讀寫分離
- 使用反向代理和cdn加速
- 使用分散式檔案和分散式資料庫
- 業務拆分
- 分散式服務
- 分層:橫向分層:應用層,服務層,資料層
- 分割:縱向分割:拆分功能和服務
- 分散式
- 分散式應用和服務
- 分散式靜態資源
- 分散式資料和儲存
- 分散式計算
- 叢集:提高併發和可用性
- 快取:優化系統性能
- cdn
- 方向代理訪問資源
- 本地快取
- 分散式快取
- 非同步:降低系統的耦合性
- 提供系統的可用性
- 加快響應速度
- 冗餘:冷備和熱備,保證系統的可用性
- 自動化:釋出,測試,部署,監控,報警,失效轉移,故障恢復
- 安全:
- 高效能:網站的靈魂
- 效能測試
- 前端優化
- 應用優化
- 資料庫優化
- 可用性:保證伺服器不宕機,一般通過冗餘部署備份伺服器來完成
- 負載均衡
- 資料備份
- 自動釋出
- 灰度釋出
- 監控報警
- 伸縮性:建叢集,是否快速應對大規模增長的流量,容易新增新的機器
- 叢集
- 負載均衡
- 快取負載均衡
- 可擴充套件性:主要關注功能需求,應對業務的擴充套件,快速響應業務的變化。是否做法開閉原則,系統耦合依賴
- 分散式訊息
- 服務化
- 安全性:網站的各種攻擊,各種漏洞是否堵住,架構是否可以做到限流作用,防止ddos攻擊。
- xss攻擊
- sql注入
- csr攻擊
- web防火牆漏洞
- 安全漏洞
- ssl
5、架構書籍推薦
1. 《大型網站技術架構:核心原理與案例分析》
這是比較早,比較系統介紹大型網站技術架構的書,通俗易懂又充滿智慧,即便你之前完全沒接觸過網站開發,通讀前幾章,也能快速獲取到常見的網站技術架構及其應用場景。非常贊。
2. 《億級流量網站架構核心技術》
相比《大型網站技術架構》的高屋建瓴,開濤的這本《億級流量網站架構核心技術》則落實到細節,網站架構中常見的各種技術,比如快取、佇列、執行緒池、代理……,統統都講到了,而且配有核心程式碼。甚至連 Nginx 的配置都有!
如果你想在實現大流量網站時找參考技術和程式碼,這本書最合適啦。
3. 《架構即未來》
這是一本“神書”啦,超越具體技術層面,著重剖析架構問題的根源,幫助我們弄清楚應該以何種方式管理、領導、組織和配置團隊。
4. 《分散式服務架構:原理、設計與實戰》
這本書全面介紹了分散式服務架構的原理與設計,並結合作者在實施微服務架構過程中的實踐經驗,總結了保障線上服務健康、可靠的最佳方案,是一本架構級、實戰型的重量級著作。
5. 《聊聊架構》
這算是架構方面的一本神書了,從架構的原初談起,從業務的拆分談起,談到架構的目的,架構師的角色,架構師如何將架構落地……強烈推薦。
不過,對於沒有架構實踐經驗的小夥伴來講,可能會覺得這本書比較虛,概念多,實戰少。但如果你有過一兩個專案的架構經驗,就會深深認同書中追本溯源探討的架構理念。
6. 《軟體架構師的12項修煉》
大多數時候所謂的“技術之玻璃天花板”其實只是缺乏軟技能而已。這些技能可以學到,缺乏的知識可以通過決定改變的努力來彌補。
總結參考:
《大型網站技術架構》、《軟體架構師設計》
http://www.rowkey.me/blog/2017/08/24/arch/
https://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=2650992472&idx=1&sn=ab1234fff936fda3e5cf1f6780cb733d&mpshare=1&scene=23&srcid=1017To1tEophZ2h3McPAESCO##
總結參考:
《大型網站技術架構》
轉載自:https://blog.csdn.net/hguisu/article/details/78258430
相關推薦
架構設計(1)- 談談架構
1、什麼是架構和架構本質在軟體行業,對於什麼是架構,都有很多的爭論,每個人都有自己的理解。 此君說的架構和彼君理解的架構未必是一回事。 我們主要針對網際網路服server系統(類似網站)來定義架構:架構是系統的骨架,支撐和連結各個部分,包括元件、連線件、約束規範,
C#.架構設計(三)MVVM架構模式(用在WPF或Silverlight)、MVC架構模式(用在java開發)、MVP架構模式(用在安卓開發)的原理與區別
轉發https://blog.csdn.net/victoryzn/article/details/78392128 本文將詳細闡述以下MVC、MVP、MVVM三種理念的定義及區別還有他們的適用場合。 MVC MVC模式最初生根於伺服器端的Web開發,後來漸漸能夠勝任客戶端Web開發,能
架構設計(6)---Web架構師究竟都要學些什麼?
Web架構師究竟都要學些什麼?具備哪些能力呢?先網上查查架構師的大概的定義,參見架構師修煉之道這篇文章,寫的還不錯,再查查公司招聘Web架構師的要求。 總結起來大概有下面幾點技能要求:一、 架構師有優秀的編碼能力,解決開發人員無法解決的難題。二、 架構師對系統的大資料容量高效能高併發高容錯的網站有架構設計
架構設計(2)---分散式架構的演進過程
一.分散式架構的發展歷史1946年,世界上第一臺電子計算機在美國的賓夕法尼亞大學誕生,它的名字是:ENICAC ,這臺計算機的體重比較大,計算速度也不快,但是而代表了計算機時代的到來,再以後的網際網路的發展中也有基礎性的意義。計算機的組成是有五部分完成的,分別是:輸入裝置,輸出裝置,儲存器,儲存器裡面由運算器
播放器技術分享(1):架構設計
搞音視訊開發好些年,分享過許多部落格文章,比如:前幾年釋出的《FFmpeg Tips》系列,《Android 音訊開發》系列,《直播疑難雜症排查》系列等等。最近想把多年來開發和優化播放器的經驗也分享出來,同時也考慮把自己業餘時間開發的基於 ffmpeg 的播放器核心開源出來,希望能幫助到音視訊領域的初學者
Java系列(1) JavaEE架構
javaeeJavaEE是開發分布式應用的工業標準,Weblogic,BES,Tomcat等是比較常見的JavaEE服務器,嚴格來說Tomcat沒有實現全部的JavaEE規範,只能算是Servlet容器。我們從一幅Spec文檔上的架構圖,粗略了解JavaEE的基本結構。該結構圖表達了JavaEE各元素的邏輯關
MEF學習總結(1)---總體架構
attr 總結 技術分享 dir target get gre round 管理 用了很久的MEF框架來做依賴註入,最近想把它的原理和機構總結一下,主要包括如下幾個方面: 1. 總體架構 2. .Net Composition Primitive 3. Attribu
wifi驅動的理解(1)——驅動架構
轉載請註明出處:http://blog.csdn.net/Righthek 謝謝! 在分析WIFI驅動前,分享一下個人對Linux驅動的一些瞭解,其實縱觀Linux眾多的裝置驅動,幾乎都是以匯流排為
基於Maven的SSM總體架構設計(一)
基於Maven的SSM總體架構設計(一) 1 概述 1.1 編寫目的 1.2 讀者物件 1.3 引用檔案 1.4 術語表 2 相關技術介紹 2.1 Spring框架介紹 2.1.1
MySQL效能管理及架構設計(一):什麼影響了資料庫查詢速度、什麼影響了MySQL效能
一、什麼影響了資料庫查詢速度 1.1 影響資料庫查詢速度的四個因素 1.2 風險分析 QPS: Queries Per Second意思是“每秒查詢率”,是一臺伺服器每秒能夠相應的查詢次數,是對一個特定的查詢伺服
MySQL效能管理及架構設計(三):SQL查詢優化、分庫分表 - 完結篇
一、SQL查詢優化(重要) 1.1 獲取有效能問題SQL的三種方式 通過使用者反饋獲取存在效能問題的SQL; 通過慢查日誌獲取存在效能問題的SQL; 實時獲取存在效能問題的SQL; 1.1.2 慢查日誌分析工具 相關配置引數: slow
軟考架構師(8)——軟體架構設計
一:架構模型 軟體架構可歸納為 (1)結構模型:這是一個最直觀、最普遍的建模方法。這種方法以架構的構件、連線件(connector)和其他概念來刻畫結構,併力圖通過結構來反映系統的重要語義內容,包括系統的配置、約束、隱含的假設條件、風格、性質等。研究結構模型的核心是架構描述語言。 (2)框架模型
基於Maven的SSM總體架構設計(二)
3 總體設計 3.1 約定 3.1.1 基於Maven的工程結構 為了便於本團隊對新建Java專案的工程結構及依賴庫(jar)的版本統一,降低團隊成員之間的溝通成本,減少因依賴庫版本不一致導致的異常,我們約定建立標準的Maven工程。即在MyE
spring cloud微服務架構搭建(1)
一、搭建Eureka服務 1、利用maven構建工具,快速搭建spring boot專案 1.1:(輸入相關專案名稱,選擇相關依賴等) 將壓縮包解壓到順手的盤,用編輯器開啟。 1.2:完善相關pom檔案和配置檔案application.propertie
C#.架構設計(一)敏捷開發:敏捷開發聯盟、開發工具、開發方法、C#敏捷開發
一、什麼是敏捷開發? 敏捷開發就是一種辦事流程,加快產品等研發。敏捷就是少文件,多迭代,多交流,更多的責任放到了工程師、專案管理者身上,從而加快產品的研發週期。說白了,就是如何在Team中,組織大家更快更好地做事情,不過其主要應用在軟體專案管
2016全球大資料戰略版圖剖析(1):架構篇
本文為數盟原創文章,轉載時請註明出處為“數盟社群”。 上圖是2016大資料版圖英文完整版。 為了更好的使大家瞭解行業現狀,我們整理出了對應公司的中文介紹,以饗讀者。 本次介紹的公司為如圖所示的部分公司,請悉知: 基礎設施 1.基於Hadoop Cloud
經典遊戲伺服器端架構概述 (1)
架構的分析模型 一. 討論的背景 現代電子遊戲,基本上都會使用一定的網路功能。從驗證正版,到多人互動等等,都需要架設一些專用的伺服器,以及編寫在伺服器上的程式。因此,遊戲伺服器端軟體的架構,本質上也是遊戲伺服器這個特定領域的軟體架構。 軟體架構的分析,可以通過不同的
高併發訂單系統架構設計(二)
高併發下單主要包括以下幾個方面: 分庫分表 多應用例項全域性唯一訂單號 資料庫連線 買家查詢訂單 賣家查詢訂單 擴容問題 業務拆分 一、分庫分表 隨著訂單量的增長,資料庫的發展主要經歷以下幾個步驟: - 1主-1從架構 - 雙主-多從架構,讀寫
淺談12306核心模型設計思路和架構設計(轉載)
前言 春節期間,無意中看到一篇文章,文章中講到12306的業務複雜度遠遠比淘寶天貓這種電商網站要複雜。後來自己想想,也確實如此。所以,很想挑戰一下12306這個系統的核心領域模型的設計。一般的電商網站,購買都是基於商品的概念,每個商品有一定量的庫存,使用者的購買行為是針對商品的。當用戶發起購買行
Android ALSA音訊系統架構分析(1)----從Loopback瞭解Audio
/************************************ Author:劉江明 * Environment:MTK Android 6.0* Date:2017年05月25日***********************************/