paulwong

          My Links

          Blog Stats

          常用鏈接

          留言簿(67)

          隨筆分類(1390)

          隨筆檔案(1148)

          文章分類(7)

          文章檔案(10)

          相冊

          收藏夾(2)

          AI

          Develop

          E-BOOK

          Other

          養(yǎng)生

          微服務(wù)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          60天內(nèi)閱讀排行

          聊聊架構(gòu)

          什么是系統(tǒng)架構(gòu)?

          從字面上理解,系統(tǒng)架構(gòu)是系統(tǒng)的框架結(jié)構(gòu),是系統(tǒng)進(jìn)行抽象之后的一個草圖。它包含了系統(tǒng)中各個抽象組件的協(xié)作方式。


          為什么需要架構(gòu)?

          好的架構(gòu)能夠降低系統(tǒng)的創(chuàng)造和維護(hù)成本,特別是維護(hù)成本。一個系統(tǒng)的創(chuàng)造成本低,而維護(hù)的成本大,特別是互聯(lián)網(wǎng)應(yīng)用,一般情況下把一個系統(tǒng)搞上線只需要一個月,但是有的系統(tǒng)搞下線缺需要幾個月,而維護(hù)則需要數(shù)年。好的設(shè)計師不會在系統(tǒng)上線后對系統(tǒng)進(jìn)行大的修改,從而減少系統(tǒng)的維護(hù)成本。

          如果區(qū)分創(chuàng)造和維護(hù)兩個階段的話,架構(gòu)師分為系統(tǒng)架構(gòu)師和維護(hù)架構(gòu)師,架構(gòu)新的系統(tǒng)的是系統(tǒng)架構(gòu)師,而維護(hù)老系統(tǒng)的則是維護(hù)架構(gòu)師,程序員大多數(shù)愿意做新系統(tǒng)不愿意維護(hù)老系統(tǒng),因為感覺沒什么技術(shù)含量,但是維護(hù)老的系統(tǒng)反而更難,因為老系統(tǒng)的重構(gòu)和改進(jìn)更加復(fù)雜,維護(hù)架構(gòu)師不僅需要讀懂老系統(tǒng)架構(gòu)設(shè)計,還要在不影響老系統(tǒng)功能的情況下,進(jìn)行功能新增和重構(gòu)。我的一位同事在對一個舊的系統(tǒng)進(jìn)行重構(gòu)之前,讀了幾個星期的代碼,然后才開始設(shè)計改進(jìn)方案。

          架構(gòu)設(shè)計的目標(biāo)

          設(shè)計的目標(biāo)圍繞著降低成本這個需求進(jìn)行。設(shè)計的目標(biāo)非常多,不同的系統(tǒng)架構(gòu)目標(biāo)也不一致,但是我覺得比較重要的架構(gòu)目標(biāo)有以下幾個,可擴(kuò)展性,靈活性和可插入性。

          可擴(kuò)展性,新的功能容易加入到系統(tǒng)里,降低創(chuàng)造成本。
          靈活性,一處修改不會波及其他的地方,降低維護(hù)成本。
          可插入性,同樣的功能可方便的替換,降低創(chuàng)造和維護(hù)成本。
          那么如何實現(xiàn)這三個目標(biāo)

          提高可擴(kuò)展性:把不易變的抽象出來。抽象層要比實現(xiàn)層要更穩(wěn)定,抽象層的變化要少。把變化的集中起來,比如把容易變化的功能放在單獨一個系統(tǒng)或者一個模塊里。
          靈活性:模塊化,每個模塊相互獨立,減少模塊之間的藕合度,修改不會互相傳遞。
          提高可插入性:模塊化,服務(wù)化。
          如何開始架構(gòu)

          當(dāng)一塊新業(yè)務(wù)放在你面前時,如何進(jìn)行系統(tǒng)架構(gòu)?我覺得需要進(jìn)行以下幾個步驟的思考:

          業(yè)務(wù)分析:輸出業(yè)務(wù)架構(gòu)圖,這個系統(tǒng)里有多少個業(yè)務(wù)模塊,從前臺用戶到底層一共有多少層。
          系統(tǒng)劃分:根據(jù)業(yè)務(wù)架構(gòu)圖輸出系統(tǒng)架構(gòu)圖,需要思考的是這塊業(yè)務(wù)劃分成多少個系統(tǒng),可能一個系統(tǒng)能支持多個業(yè)務(wù)。基于什么原則將一個系統(tǒng)拆分成多個系統(tǒng)?又基于什么原則將兩個系統(tǒng)合并成一個系統(tǒng)?
          系統(tǒng)分層:系統(tǒng)是幾層架構(gòu),基于什么原則將一個系統(tǒng)進(jìn)行分層,分成多少層?
          模塊化:系統(tǒng)里有多少個模塊,哪些需要模塊化?基于什么原則將一類代碼變成一個模塊。

          posted on 2014-11-28 23:06 paulwong 閱讀(338) 評論(0)  編輯  收藏 所屬分類: SOFTWARE ARCHITECTURE

          主站蜘蛛池模板: 元朗区| 辽源市| 郎溪县| 彰化县| 余干县| 洪洞县| 綦江县| 乌兰浩特市| 修水县| 长岛县| 南安市| 鸡西市| 灌南县| 玉环县| 江阴市| 绥江县| 石棉县| 自治县| 长宁县| 资兴市| 辉县市| 遂川县| 游戏| 织金县| 资源县| 咸阳市| 汕头市| 大宁县| 徐闻县| 洪泽县| 河池市| 社会| 双辽市| 武鸣县| 天津市| 江都市| 新建县| 鄱阳县| 绩溪县| 连云港市| 永泰县|