如果有人讓你介紹你們做的系統(tǒng)架構(gòu)是什么樣子的 你會(huì)從哪說起? 每個(gè)人都會(huì)有自己的架構(gòu)認(rèn)知,根據(jù)自己的接觸的內(nèi)容來總結(jié)。系統(tǒng)分為用戶中心、營銷中心、商品中心…… 這是產(chǎn)品經(jīng)理說的;我們的系統(tǒng)用了三層架構(gòu),用了SSM框架…… 這是程序員說的;用戶說 我們系統(tǒng)有后臺(tái),前臺(tái),商品上下架功能,用戶管理功能。 在實(shí)際工作中架構(gòu)師架構(gòu)出來的系統(tǒng)不僅要考慮用戶的功能實(shí)現(xiàn),而且也要平衡系統(tǒng)的易用性、高性能、擴(kuò)展性、可伸縮性等方面,這里面是要綜合業(yè)務(wù)目標(biāo)、當(dāng)前開發(fā)人數(shù)、開發(fā)人員的綜合能力、上線時(shí)間、項(xiàng)目預(yù)算等來選擇開發(fā)語言、開發(fā)框架和功能開發(fā)的順序。有些公司求時(shí)間、有些公司求質(zhì)量,但最終說明架構(gòu)是實(shí)時(shí)變化的,不是一上來就來個(gè)完美的架構(gòu),是要根據(jù)當(dāng)前的業(yè)務(wù)需求變化的,但你的架構(gòu)必須要支持這種變化 達(dá)到上面所說的要求。 一個(gè)復(fù)雜的系統(tǒng)需要不同角色的人來參與,因此架構(gòu)師必須考慮到讓不同的參與者理解你的架構(gòu) 知道他們自己該做什么事,如用戶為你提供原始需求,項(xiàng)目經(jīng)理需要制定計(jì)劃 在不同小組間溝通 落地你的架構(gòu),開發(fā)人員拿到你的設(shè)計(jì)實(shí)現(xiàn)功能。所以架構(gòu)涵蓋的內(nèi)容和決策太多了,需要從不同視角分別設(shè)計(jì) ,也是為了架構(gòu)方便理解、交流和歸檔的方便。 最常用的架構(gòu)分為:邏輯架構(gòu)和物理架構(gòu)視圖邏輯架構(gòu)邏輯架構(gòu)規(guī)定了由哪些邏輯元素組成以及這些邏輯元素間的關(guān)系,邏輯元素可以是邏輯層、功能子系統(tǒng)、模塊。 物理架構(gòu)展示模塊間的部署邏輯,數(shù)據(jù)如何產(chǎn)生、哪塊計(jì)算、怎么存儲(chǔ)、共享等在計(jì)算機(jī)中的情況。
這里暫時(shí)先列出概念,架構(gòu)設(shè)計(jì)之初避免涉及太多具體的技術(shù)細(xì)節(jié),需要看透需求,尋找出實(shí)現(xiàn)的難點(diǎn)、以質(zhì)量還是時(shí)間優(yōu)先。 5視圖法:邏輯架構(gòu)、物理架構(gòu)、數(shù)據(jù)架構(gòu)、開發(fā)架構(gòu)、運(yùn)行架構(gòu)面對(duì)不同的角色需要用不同的思維來表達(dá),對(duì)領(lǐng)導(dǎo)匯報(bào)用業(yè)務(wù)圖而不能講技術(shù)架構(gòu),對(duì)開發(fā)則可講具體開發(fā)架構(gòu),對(duì)運(yùn)維講運(yùn)行架構(gòu)、物理架構(gòu),因此需要不同的架構(gòu)設(shè)計(jì)來表達(dá)。 邏輯架構(gòu)邏輯架構(gòu)= 模塊劃分+接口定義(統(tǒng)一接口規(guī)范)+領(lǐng)域模型 物理架構(gòu)物理架構(gòu)=硬件分布+軟件部署+方案優(yōu)化(可伸縮性、高性能、易維護(hù)性,監(jiān)控) 物理架構(gòu),更關(guān)注的系統(tǒng)、網(wǎng)絡(luò)、服務(wù)器等基礎(chǔ)設(shè)施。例如:如何通過服務(wù)器部署和配置網(wǎng)絡(luò)環(huán)境,來實(shí)現(xiàn)應(yīng)用程序的“可伸縮性、高可用性”。或者舉一個(gè)實(shí)際的例子,如何通過設(shè)計(jì)基礎(chǔ)設(shè)施的架構(gòu),來保障網(wǎng)站能支持同時(shí)10W人在線、7*24小時(shí)提供服務(wù),當(dāng)超過10W人或者低于10W人在線時(shí),可以很方便的調(diào)整部署架構(gòu)來支撐。 數(shù)據(jù)架構(gòu)數(shù)據(jù)架構(gòu)=存儲(chǔ)方式+數(shù)據(jù)分布 數(shù)據(jù)架構(gòu),更關(guān)注的是數(shù)據(jù)持久化和存儲(chǔ)層面的問題,也可能會(huì)包括數(shù)據(jù)的分布、復(fù)制、同步等問題。更貼切來講,如何選擇需要的關(guān)系型數(shù)據(jù)庫、流行的NOSQL,如何保障數(shù)據(jù)存儲(chǔ)層面的性能、高可用性、災(zāi)備等等。很多時(shí)候,和物理架構(gòu)是有緊密聯(lián)系的,但它更關(guān)注數(shù)據(jù)存儲(chǔ)層面的,物理架構(gòu)更關(guān)注整個(gè)基礎(chǔ)設(shè)施部署層面。 開發(fā)架構(gòu)開發(fā)架構(gòu)=技術(shù)選型+文件劃分+編譯關(guān)系(模塊依賴關(guān)系) 開發(fā)架構(gòu)則更關(guān)注程序包,不僅僅是我們自己寫的程序,還包括應(yīng)用程序依賴的SDK、第三方類庫、中間價(jià)等。尤其是像目前主流的Java、.NET等依靠虛擬機(jī)的語言和平臺(tái),以及主流的基于數(shù)據(jù)庫的應(yīng)用,都會(huì)比較關(guān)注。和邏輯架構(gòu)有緊密的關(guān)聯(lián)。 運(yùn)行架構(gòu)運(yùn)行架構(gòu)=物理架構(gòu)+數(shù)據(jù)流的控制(系統(tǒng)運(yùn)行中的數(shù)據(jù)流向關(guān)系) 顧名思義,更關(guān)注的是應(yīng)用程序運(yùn)行中可能出現(xiàn)的一些問題。例如并發(fā)帶來的問題,比較常見的“線程同步”問題、死鎖問題、對(duì)象創(chuàng)建和銷毀(生命周期管理)問題等等。開發(fā)架構(gòu),更關(guān)注的是飛機(jī)起飛之前的一些準(zhǔn)備工作,在靜止?fàn)顟B(tài)下就能規(guī)劃好做好的,而運(yùn)行架構(gòu),更多考慮的是飛機(jī)起飛之后可能發(fā)生的一些問題。 實(shí)現(xiàn)架構(gòu)設(shè)計(jì)的6個(gè)步驟需求分析根據(jù)系統(tǒng)使用人、客戶等收集而來的業(yè)務(wù)實(shí)現(xiàn)的背景要求組成的原始需求文檔分析,包括了功能要求、質(zhì)量(性能要求)、約束(時(shí)間、預(yù)算、可行性分析、風(fēng)險(xiǎn)評(píng)估、是否需要對(duì)接三方)。這里要輸出一份整理過后的需求文檔,包含了要做什么(功能范圍、非功能性需求),能不能做,能做到的前提要求和要面臨的問題,怎么做(進(jìn)入系統(tǒng)分析實(shí)現(xiàn)階段)。 確定關(guān)鍵需求不僅要對(duì)功能需求(如用例)進(jìn)行篩選,還要對(duì)非功能需求進(jìn)行權(quán)衡,最終確定對(duì)架構(gòu)起關(guān)鍵作用的需求。如需求是以高性能并發(fā)度為關(guān)鍵還是以可擴(kuò)展性為要求或同時(shí)滿足,因?yàn)榭紤]到成本、上線時(shí)間和現(xiàn)有系統(tǒng)的影響會(huì)舍棄一部分需求,需要確定關(guān)鍵需求:核心功能、高風(fēng)險(xiǎn)功能。 概念架構(gòu)設(shè)計(jì)1個(gè)決定4個(gè)選型:決定如何劃分頂級(jí)子系統(tǒng);架構(gòu)風(fēng)格選型(C/S還是B/S架構(gòu));開發(fā)技術(shù)選型(java);集成技術(shù)選型(API);二次開發(fā)技術(shù)選型(API)。 細(xì)化架構(gòu)設(shè)計(jì)5視圖法:分別從邏輯架構(gòu)、物理架構(gòu)、數(shù)據(jù)架構(gòu)、開發(fā)架構(gòu)、運(yùn)行架構(gòu)進(jìn)行設(shè)計(jì),每一塊的關(guān)注點(diǎn)不一樣,可細(xì)化粗粒度。 領(lǐng)域建模領(lǐng)域建模的精髓是 業(yè)務(wù)決定功能,功能決定模型。將需求業(yè)務(wù)轉(zhuǎn)化為抽象的模型對(duì)象之間的流轉(zhuǎn)關(guān)系。 常用的表達(dá)方式是類圖 表達(dá)模型之間的關(guān)系,聽得最多的是“建?!?。模型的建立也是逐步完善的,還包含了狀態(tài)(流程圖)、特性要求等文字說明。 關(guān)于如何領(lǐng)域建模 有專門的 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) 方面的書可以參考。 架構(gòu)驗(yàn)證可快速開發(fā)一個(gè)統(tǒng)一框架(一個(gè)原型、一個(gè)技術(shù)難點(diǎn))來貫徹架構(gòu)的設(shè)計(jì),再對(duì)原型進(jìn)行測試評(píng)審 再對(duì)架構(gòu)進(jìn)行補(bǔ)充。 最后可以總結(jié)為可以用5視圖法從各方面來描述系統(tǒng)的架構(gòu),然后用6步驟來描述怎么實(shí)現(xiàn)架構(gòu)。不過現(xiàn)在還流行一種就是將業(yè)務(wù)邏輯與物理架構(gòu)放一起 忽略其中的實(shí)現(xiàn)細(xì)節(jié)。 軟件架構(gòu)就是實(shí)用而且優(yōu)雅的設(shè)計(jì),它不在于分多少層,或者應(yīng)用了多少種設(shè)計(jì)模式/架構(gòu)模式等。它應(yīng)該是以滿足實(shí)現(xiàn)用戶需求為前提,以開發(fā)人員普遍可接受為根本的,而且要符合系統(tǒng)特性和業(yè)務(wù)發(fā)展需要的,從軟件設(shè)計(jì)的角度,能夠達(dá)到層次清晰、可維護(hù)、可重用、可擴(kuò)展…就非常優(yōu)秀了,無需刻意去糾結(jié)分了多少層,是否使用了什么模式,有多么抽象等。以面向?qū)ο笤O(shè)計(jì)為例,基本目標(biāo)是“高內(nèi)聚、低耦合”,為此我們可能會(huì)遵循一些常見的設(shè)計(jì)原則(例如經(jīng)典的SOLID設(shè)計(jì)原則)。 通常我們所說的模式,其實(shí)又分為很多種,并不是僅僅指的是“設(shè)計(jì)模式”(設(shè)計(jì)模式也有千千萬,并不是只有常見的GOF 23種設(shè)計(jì)模式)。通常包括:企業(yè)架構(gòu)模式、設(shè)計(jì)模式、SOA模式、企業(yè)集成模式等等。 強(qiáng)調(diào)一下,架構(gòu)要講求“實(shí)用”,而且開發(fā)人員普遍可接受,要符合現(xiàn)狀的。否則,再“優(yōu)雅”的設(shè)計(jì),都會(huì)淪為高成本的“花架子”,生搬硬套和過度設(shè)計(jì)只會(huì)讓項(xiàng)目“流產(chǎn)”。
|
|