軟件架構(gòu)師的首要關(guān)注點(diǎn)不是系統(tǒng)的功能偿荷。
拿到系統(tǒng)需求時(shí)首先考慮的不是頁(yè)面布局或?qū)Ш綐洌且紤]誰提供的服務(wù)器况芒?運(yùn)行在winserver還是linux惜纸?想支持多少用戶并發(fā)?應(yīng)用需要什么樣的安全性绝骚?應(yīng)用運(yùn)行在公網(wǎng)還是內(nèi)網(wǎng)耐版?
成功架構(gòu)師的兩項(xiàng)關(guān)鍵實(shí)踐:讓利益相關(guān)人參與以及同時(shí)關(guān)注功能和品質(zhì)允华。
功能性:產(chǎn)品向他的用戶提供哪些功能掘譬?
可變性:軟件將來可能需要哪些變化?哪些改變不太可能發(fā)生赢织,不需要特別容易進(jìn)行這些改變止剖?
性能:產(chǎn)品將打到怎么樣的性能
容量:多少用戶將并發(fā)使用系統(tǒng)腺阳?系統(tǒng)為用戶存儲(chǔ)多少數(shù)據(jù)?
生態(tài)系統(tǒng):在部署環(huán)境時(shí)穿香,系統(tǒng)將與其他系統(tǒng)進(jìn)行哪些交互舌狗?
模塊化:如何編寫軟件的任務(wù)分解為工作指派,特別是這些模塊可以獨(dú)立開發(fā)扔水,并能夠準(zhǔn)確而容易的滿足彼此需要?
可構(gòu)建性:如何將軟件構(gòu)建為一組組件朝氓,并能夠獨(dú)立實(shí)現(xiàn)和驗(yàn)證這些組件魔市?哪些組件應(yīng)該復(fù)用其他產(chǎn)品,哪些用過從外部供應(yīng)商獲得赵哲?
產(chǎn)品化:如果產(chǎn)品將以幾種變體的形式存在待德,如何開發(fā)一個(gè)產(chǎn)品線,并利用這些變體的共性枫夺?產(chǎn)品線中的產(chǎn)品以怎樣的步驟開發(fā)将宪,在創(chuàng)建一條產(chǎn)品線時(shí),要進(jìn)行哪些投資?開發(fā)產(chǎn)品線中不同變體的選擇较坛,預(yù)期會(huì)得到怎樣的回報(bào)印蔗?特別是是否可能先開發(fā)最小的有用產(chǎn)品再進(jìn)行擴(kuò)展?
安全性:產(chǎn)品是否需要用戶認(rèn)證或必須限制對(duì)數(shù)據(jù)的訪問丑勤?數(shù)據(jù)安全性如何保證华嘹?如何抵擋DDOS攻擊或其他攻擊?
架構(gòu)師玩的是折中游戲法竞,對(duì)于一組給定的功能需求和品質(zhì)要求耙厚,沒有唯一的正確架構(gòu)和唯一的正確答案。
架構(gòu)評(píng)估的兩種方式
第一種通過性能建模來評(píng)估吞吐量和伸縮性岔霸,通過失效樹模型來評(píng)估可靠性和可訪問性薛躬。其他類型的模型包括復(fù)雜性和耦合指標(biāo),用于評(píng)估可變性和可維護(hù)性呆细。
第二種就是通過對(duì)架構(gòu)師提出質(zhì)詢來評(píng)估架構(gòu)型宝,質(zhì)詢方法的另一種變體是架構(gòu)折中分析方法,它尋找架構(gòu)不能滿足品質(zhì)關(guān)注點(diǎn)的風(fēng)險(xiǎn)侦鹏。
在設(shè)計(jì)系統(tǒng)架構(gòu)時(shí)要確保系統(tǒng)在伸縮時(shí)的彈性诡曙。總體架構(gòu)必須是一個(gè)分布式系統(tǒng)略水,可以隨著請(qǐng)求增長(zhǎng)而添加機(jī)器价卤,當(dāng)請(qǐng)求下降時(shí)移走機(jī)器。
企業(yè)中的一般經(jīng)驗(yàn)法則是90%的數(shù)據(jù)訪問都是只讀的渊涝,大多數(shù)任務(wù)會(huì)讀取大量數(shù)據(jù)慎璧,然后再改寫少量數(shù)據(jù)。在MMO和虛擬世界的環(huán)境中跨释,大多數(shù)任務(wù)只訪問服務(wù)器上少量的狀態(tài)數(shù)據(jù)胸私,但在他訪問的數(shù)據(jù)中,大約一半會(huì)被改寫鳖谈。
企業(yè)環(huán)境中岁疼,目標(biāo)是任務(wù)管理,如果總吞吐量得到改進(jìn)缆娃,在處理中有一點(diǎn)延遲是可以接受的捷绒。MMO和虛擬世界環(huán)境中延遲則是最大的敵人。
MMO應(yīng)對(duì)數(shù)量巨大的用戶方法目前有兩大類贯要。
第一類是基于地理位置實(shí)現(xiàn)暖侨,設(shè)計(jì)成包含一組不同的區(qū)域,每個(gè)區(qū)域運(yùn)行在一臺(tái)服務(wù)器上崇渗。例如虛擬世界中的某個(gè)主城在一臺(tái)服務(wù)器上字逗,一個(gè)小鎮(zhèn)在另一臺(tái)服務(wù)器上京郑。游戲設(shè)計(jì)視圖讓每個(gè)區(qū)域無關(guān),限定地理區(qū)域能實(shí)現(xiàn)自我限制葫掉,主城延遲的時(shí)候玩家就會(huì)到小鎮(zhèn)中體驗(yàn)游戲些举。將不同地理區(qū)域分配給不同服務(wù)器來實(shí)現(xiàn)伸縮的方法有一個(gè)問題,就是必須在編寫時(shí)決定哪些區(qū)域放在哪些服務(wù)器上挖息。添加容易修改則可能需要改動(dòng)代碼金拒。猜測(cè)魔獸世界就是使用這種方式解決并發(fā)量。
第二類是用分區(qū)的方法處理游戲中用的擁塞區(qū)域套腹。一個(gè)分區(qū)是該區(qū)域的一個(gè)副本绪抛,運(yùn)行在自己的服務(wù)器上,獨(dú)立于其他的分區(qū)电禀,它代表游戲中相同的部分幢码。缺點(diǎn)是不允許處在不同分區(qū)的玩家彼此之間進(jìn)行交互。游戲不同線路平行分區(qū)就是這種方式尖飞。