關于標題,我也開始附庸文雅了。哈哈!話說軟件架構是本人這些年的一些積累,在此做一點分享,希望對即將做架構或者是正在架構的 ITer 一些參考,也許見解淺薄,還望大家多多包涵,如有異議,可私聊,禁止拍磚。
說起架構可不是一件簡單的事情,他是一個很龐大的系統骨架,但是面對到手的軟件需求,你是如何設計一個合理的架構呢?原來架構這玩意也是分第一步、第二步、第三步 ........ 以此類推,不能急于求成,這樣容易扯著蛋。要做到手中無劍,心中有劍的境界,并非一朝一夕的努力,需要長期項目的實踐,經歷無數次的失敗與重構之后再能叩開“軟件架構”這個大門的一絲門縫,從來一窺汪洋。
拿到一個軟件的合同或者是用戶的最原始的需求,很多架構師的第一直覺就是關注軟件本身的功能,有哪些功能,適合采用哪些技術選型。這對于大多數人而言,的確是沒有錯誤。但是在這之前還一點需要去做的事情 ...... 不知道大家想到了嗎?架構是基于什么環境呢?這一點在架構之前不知道讀者現在是否思考過這個問題。所謂的架構首先要了解軟件運行的軟硬件以及網絡環境。之后明確了這一點才能考慮下一步的事情,否則就有點閉門造車的感覺了。
好了,說到運行環境,這是就要從硬件環境與軟件環境分別對待了,例如:
1、硬件是采用幾層架構啊,是采用集群還是單機部署呢? 典型的網絡架構是Http服務器 + Web服務器 + 數據庫服務器 。比較厲害的就是這些都放在一個機器上 哈哈~~~
2、軟件運行的網絡環境如何,是基于局域網還是公網呢?是否存在隔離的情況
3、硬件是什么機器呢?IBM刀片 還是 AIX系列呢
4、系統的災備設備是什么,如何運作
......... 等等諸如此類的硬件環境首先要了解。
硬件明確了,下來考慮軟件環境
1、軟件運行的環境是 Window 、Linux、Unix ,是32位 /還是 64位
2、軟件運行的Web服務器神碼 WebSphere?Weblogic、Jboss、Tomcat、GlashFish還是別的?版本號是多少,支持的J2EE規范是多少。
3、JVM是什么版本,是全新部署 還是復用甲方已經存在的軟件環境呢?
4、軟件是否與其他軟件有數據交互,交互采用什么介質
5、采用什么數據庫,版本是多少?
.......... 這些是作為軟件環境需要考慮的一些基礎性的問題
通過上述簡單的文字,好像大家有點明白了吧,其實這種事情,很簡單的,只要平時多注意點就OK了,否則等開發后去現場實施才發現什么都不配套啊。如果在架構開始之前,你已經關注這一點了,恭喜了 說明你已經具備作為架構師最起碼的嗅覺了。
上述的那些問題或多或少影響架構本身,架構是基于單機還是基于集群,這是兩種迥然不同的架構模式,很多天真的童鞋認為 單機與集群架構差不多,復制一套在部署一臺機器就OK了。其實則不然。二者存在太多的不同了,我舉一些簡單的例子哈:
在Java行業,很多開源軟件使用很頻繁,這些開源軟件本身集成了Cache,用于提高性能,單系統是單機運行的時候,一切都正常,做了集群出現問題了。Cache 惹得禍,因為你的集群并沒有把框架內部自帶的緩存集群化,還是保持各自獨立的狀態,一用戶通過A服務器修改了內容,并且刷新了Cache,但是作為集群的B服務器感知不到A對Cache的變化,依舊從自身的緩存中獲取“臟數據”,這時其他用訪問B服務器讀到的值,其實是A用戶通過A服務器修改之前的值。很繞吧。希望能理解。瓦咔咔~~~這是架構如果采用cache 需要重寫自己的Cache框架,必須屏蔽開源項目中自帶的Cached,否則出了問題都讓你莫名其妙?
數據庫部署是單機還是雙機,是熱備還是冷備,數據訪問需要讀寫分離嗎?如果硬件不支持數據庫熱切換,如何采用程序實現數據庫的熱切換?這些都是架構層次的需要直接面對的問題? 架構師們 你們心里有底嗎?
與甲方內部的其他系統是采用什么通信方式?Socket、WS、RMI,訪問的系統之間是否有防火墻隔離,采用什么技術可以穿透防火墻阻攔呢?
以后的系統如何快速部署到對甲方的真實環境中,是手動部署還是Ant自動部署?如何做到持續集成?發送錯誤如何回退?
......................... 現在是不是覺得有點復雜呢?其實沒關系,成長有兩種,一種是汲取別人成功的經驗轉為為自己的能力,另外一種是嘗試失敗,從經歷失敗中成長,本人呢二者兼有,前幾年都是從失敗中成長,但是隨著時間的推移,發現這樣的代價真的是很大。開始虛心學習前人的經驗,從而轉化為自己的知識。
掌握軟件運行的軟硬件環境是作為架構的第一步,切記切記!
上述文字,僅僅是作為軟件架構之前需要考慮的一些大概,還有很多細節其實我也不是很了解,如有補充請回帖瓦咔咔~~~~ 軟件架構 是一件藝術品~~~ 這是我對架構的感性認識。
每次架構完我都會在一段時間把它當作是完美的藝術品去欣賞,過了新鮮期后,發現很多問題,直接重構 這樣循環不已 ............. 每次的迭代 都讓自己收獲很多!