務(wù)實(shí)的架構(gòu)師更可能討論諸如內(nèi)存使用情況、CPU的需求、帶寬的需求,以及超線程和CPU綁定的優(yōu)缺點(diǎn)等問(wèn)題
![]()
1. 系統(tǒng)“應(yīng)該”做什么
1.1. 添加所需特性
2. 系統(tǒng)“不應(yīng)該”做什么
2.1. 崩潰
2.2. 停止響應(yīng)
2.3. 丟失數(shù)據(jù)
2.4. 侵犯隱私
2.5. 損失金錢(qián)
2.6. 摧毀公司
2.7. “殺死”客戶(hù)
3. QA部門(mén)的測(cè)試
3.1. 團(tuán)隊(duì)的大部分工作是想方設(shè)法地通過(guò)測(cè)試
3.2. 做了敏捷、務(wù)實(shí)和自動(dòng)化的測(cè)試,也不足以證明軟件已經(jīng)為面對(duì)現(xiàn)實(shí)世界準(zhǔn)備就緒
3.3. 僅通過(guò)QA測(cè)試并不能證明系統(tǒng)在未來(lái)3~10年的適用性
3.4. 幾天甚至幾周的測(cè)試,不可能說(shuō)明系統(tǒng)未來(lái)幾年會(huì)怎樣
3.5. 項(xiàng)目團(tuán)隊(duì)的目標(biāo)往往是通過(guò)QA部門(mén)的測(cè)試,而不是通過(guò)生產(chǎn)環(huán)境的生存考驗(yàn)
4. 軟件行業(yè)的“可制造性設(shè)計(jì)”
4.1. 為生產(chǎn)環(huán)境而設(shè)計(jì)
4.1.1. 以低成本和高質(zhì)量的方式進(jìn)行運(yùn)維工作
4.2. 忙碌的軟件開(kāi)發(fā)項(xiàng)目中,很容易做出優(yōu)化開(kāi)發(fā)成本而忽視運(yùn)維成本的決策
4.2.1. 運(yùn)維時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)開(kāi)發(fā)時(shí)間
4.2.2. 為了節(jié)省一次性的開(kāi)發(fā)成本,卻耗費(fèi)無(wú)盡的運(yùn)維成本,這樣做沒(méi)有意義
5. 計(jì)劃再周詳,仍會(huì)出狀況
5.1. 誤以為自己已經(jīng)預(yù)見(jiàn)和消除了所有可能的不良事件并能萬(wàn)事大吉,這是最要命的
5.2. 要采取行動(dòng)以預(yù)防那些能夠預(yù)防的事情
5.3. 要確保系統(tǒng)在整體上能夠從任何未曾預(yù)料到的重創(chuàng)中恢復(fù)過(guò)來(lái)
6. 缺陷的容忍度
6.1. 隨著用戶(hù)的增加和系統(tǒng)規(guī)模的擴(kuò)大,系統(tǒng)遭到破壞的方式也會(huì)翻新,環(huán)境會(huì)變得更加惡劣,人們對(duì)缺陷的容忍度會(huì)變得更低
6.2. 把適用于小型WordPress網(wǎng)站的設(shè)計(jì),應(yīng)用于大規(guī)模的分布式事務(wù)系統(tǒng)時(shí),會(huì)出現(xiàn)重大系統(tǒng)故障
7. 早期決策會(huì)對(duì)系統(tǒng)的最終形態(tài)產(chǎn)生巨大的影響
7.1. 早期決策恰恰是在信息最不完備的時(shí)候做出的
7.1.1. 團(tuán)隊(duì)在啟動(dòng)項(xiàng)目時(shí),往往最不了解軟件的最終架構(gòu)
7.2. 雖然不同的設(shè)計(jì)方案通常具有相近的實(shí)施成本,但這些方案在整個(gè)軟件生命周期中的總成本截然不同
7.3. 在選擇時(shí),必須著眼于實(shí)施成本和下游成本,從技術(shù)和財(cái)務(wù)的視角綜合看問(wèn)題
7.3.1. 投資5萬(wàn)美元來(lái)創(chuàng)建不停機(jī)發(fā)布的構(gòu)建流水線和部署過(guò)程
7.3.2. 至少可以避免100萬(wàn)美元的損失,而且大有可能提高系統(tǒng)部署頻率,占領(lǐng)更多市場(chǎng)份額,但是目前階段的直接收益尚不足以體現(xiàn)
8. 設(shè)計(jì)務(wù)實(shí)的架構(gòu)
8.1. 對(duì)系統(tǒng)更高層次的抽象,以便于跨平臺(tái)移植,并且基本不會(huì)與諸如硬件、網(wǎng)絡(luò)、電子和光子這些難以處理的細(xì)節(jié)產(chǎn)生聯(lián)系
8.1.1. 當(dāng)系統(tǒng)崩潰時(shí),用戶(hù)會(huì)為此歡呼,因?yàn)橹辽偎麄兛梢杂幸欢螘r(shí)間不必使用它了
8.2. 務(wù)實(shí)的架構(gòu)師更可能討論諸如內(nèi)存使用情況、CPU的需求、帶寬的需求,以及超線程和CPU綁定的優(yōu)缺點(diǎn)等問(wèn)題
8.2.1. 其中每個(gè)組件都足以滿(mǎn)足當(dāng)前的負(fù)荷
8.2.2. 當(dāng)負(fù)荷隨著時(shí)間的推移發(fā)生變化時(shí),架構(gòu)師知道要替換哪些組件
8.3. 以產(chǎn)品化為歸宿
8.3.1. 軟件、硬件和用戶(hù)三者之間至關(guān)重要的交集
8.3.2. 當(dāng)系統(tǒng)最終發(fā)布時(shí),架構(gòu)師、用戶(hù)和公司都將會(huì)更加快樂(lè)