設(shè)計(jì)一個(gè)高可用性的互聯(lián)網(wǎng)軟件系統(tǒng)需要考慮哪些因素

導(dǎo)語:IT領(lǐng)域的5個(gè)9是啥?

寫下這個(gè)題目時(shí)感覺是給自己挖了一個(gè)大坑,就像是在嘗試回答前段時(shí)間在知乎上很火的一個(gè)討論“為什么很多看起來不是很復(fù)雜的網(wǎng)站,比如Facebook需要大量頂尖高手來開發(fā)?”。人們可能已經(jīng)習(xí)慣于生活中的很多事情,比如你隨手拿起手機(jī)就可以打一個(gè)電話出去,打開一個(gè)APP就可以買一件心儀的商品,但是你可曾想過這背后對應(yīng)的電信領(lǐng)域/IT領(lǐng)域的5個(gè)9的要求?那么問題來了什么是5個(gè)9?通俗的講就是一年中有99.999%的時(shí)間服務(wù)都是必須可用的,也就是意味這一年中只允許最多只有5.26分鐘服務(wù)是不可用的,這中間還包括系統(tǒng)升級的時(shí)間。在飛機(jī)系統(tǒng)領(lǐng)域這個(gè)要求則達(dá)到了9個(gè)9,這也是為什么飛機(jī)依然是世界上最安全的交通工具。

1、軟件系統(tǒng)的非功能性需求

那么設(shè)計(jì)一個(gè)這樣高可靠高可用的互聯(lián)網(wǎng)軟件系統(tǒng)到底需要哪些因素呢?本文不會討論互聯(lián)網(wǎng)世界紛繁復(fù)雜的功能性需求比如電商的購物車如何設(shè)計(jì),P2P行業(yè)的買賣標(biāo)如何實(shí)現(xiàn);而是試圖探討在這些看起來完全不同的系統(tǒng)背后所需要的通用的需求,IT領(lǐng)域有個(gè)專有的名詞來概括這些需求叫做非功能性需求:Non-functional Requirements. 什么是非功能性需求呢,維基上的定義如下是指依一些條件判斷系統(tǒng)運(yùn)作情形或其特性,而不是針對系統(tǒng)特定行為的需求。非功能性需求是一個(gè)系統(tǒng)能夠達(dá)到的高質(zhì)量,高穩(wěn)定,高可靠,高性能,高可用的程度。

非功能性需求相對于功能性需求不為大多數(shù)人知道,但是并不代表不重要。按筆者理解它也屬于用戶體驗(yàn)的一部分;試想你打開一個(gè)電商網(wǎng)站,數(shù)據(jù)加載花了1分鐘你還有興趣在這家網(wǎng)站買東西么?那么衡量這個(gè)非功能性需求的指標(biāo)就是系統(tǒng)響應(yīng)時(shí)間-Reponse Time 。再或者一個(gè)在線旅游網(wǎng)站連續(xù)幾個(gè)小時(shí)網(wǎng)站打不開,損失的不只是幾個(gè)小時(shí)的訂單,還有用戶的信任度和對品牌的負(fù)面影響,衡量這個(gè)非功能性需求的指標(biāo)就是系統(tǒng)的高可用性-High Availability。

非功能性需求聽起來是幾個(gè)簡單的指標(biāo)和衡量標(biāo)準(zhǔn),可是為了達(dá)到一定的性能指標(biāo)后面所涉及到的技術(shù)和系統(tǒng)規(guī)模都是常人無法想像的,后面凝聚著無數(shù)工程師團(tuán)隊(duì)的智慧和勞動(dòng)。下面的章節(jié)筆者會簡單介紹一下這幾個(gè)非功能性需求指標(biāo)和它們背后對應(yīng)的一些可能的技術(shù)方案。

2、非功能性需求的幾個(gè)重要指標(biāo)

2.1高可用性-High Availability

高可用性是一個(gè)系統(tǒng)的重要特征,是指一個(gè)系統(tǒng)可以連續(xù)服務(wù)的時(shí)間,就是本文開篇提到的5個(gè)9,對于5個(gè)9的系統(tǒng)來說一年宕機(jī)時(shí)間不能超過5.26分鐘。也許您可能不覺得這個(gè)時(shí)間算什么,但是如果你知道這里的需求是針對任何可抗和不可抗的情況下都需要滿足的需求時(shí)就不一樣了。不可抗是指發(fā)生火災(zāi),地震時(shí)你的系統(tǒng)依然能夠正常服務(wù)。這就意味著你可能不只是需要在上海的機(jī)房擁有你的系統(tǒng)還要在北京也擁有一套同樣的系統(tǒng),而且兩個(gè)系統(tǒng)的數(shù)據(jù)還必須時(shí)同步的,這樣才能保證作為一個(gè)用戶當(dāng)你使用網(wǎng)上系統(tǒng)時(shí)絲毫感受不了任何問題的影響而且連數(shù)據(jù)都是準(zhǔn)確無誤的!為了這5.26分鐘,攻城獅們需要搭建高可靠的系統(tǒng),不能有單點(diǎn)故障,建立本地冗余,異活,錯(cuò)誤檢測和無縫切換,考慮各種極端的情況下如何做數(shù)據(jù)同步,系統(tǒng)升級時(shí)如何做到服務(wù)不間斷。

2.2性能和可擴(kuò)展性-Performance and Scalability

性能是指整個(gè)軟件系統(tǒng)在訪問高峰時(shí)段能夠支持的高峰并發(fā)會話數(shù),而可擴(kuò)展性是指基于單臺服務(wù)器可支持的會話數(shù)基礎(chǔ)上是否只是單純增加服務(wù)器數(shù)量就能支持成倍增長的會話數(shù)。這兩年互聯(lián)網(wǎng)行業(yè)蓬勃發(fā)展,每天會冒出無數(shù)的APP,最初一些小的APP因?yàn)榭蛻羧后w比較小同時(shí)在線也不多對系統(tǒng)性能要求和可擴(kuò)展性也不高,但是如果突然某天APP火起來,用戶量激增,那么系統(tǒng)能夠快速擴(kuò)容就是挑戰(zhàn)一款應(yīng)用成敗的關(guān)鍵了。因此在設(shè)計(jì)的初期就把單臺服務(wù)器的性能調(diào)優(yōu)考慮進(jìn)去,并且考慮系統(tǒng)是否可以近似線性的擴(kuò)容是應(yīng)對這個(gè)問題的關(guān)鍵。提高了性能和可擴(kuò)展性是隱性的節(jié)約成本,節(jié)省的不僅僅是服務(wù)器/IDC和運(yùn)營成本,還有最重要的是時(shí)間成本。

2.3系統(tǒng)的特性-Characteristic

顧名思義,系統(tǒng)的特性是指作為一個(gè)獨(dú)立的系統(tǒng)需要支持的獨(dú)特特殊非功能性需求。不同的軟件系統(tǒng)所需要支持的特性是不同的,比如視頻網(wǎng)站需要的低延時(shí),保證視頻能夠被流暢的播放;P2P網(wǎng)站要求的是數(shù)據(jù)精準(zhǔn),以保證任何時(shí)候用戶投資收益是正確的。而無論是視頻網(wǎng)站還是P2P系統(tǒng)又都要求系統(tǒng)的響應(yīng)時(shí)間盡量的短,以保證良好的用戶體驗(yàn)。因此針對不同的互聯(lián)網(wǎng)系統(tǒng),我們需要制定不同的系統(tǒng)特性參數(shù)以提高用戶的滿意度。

2.4系統(tǒng)的可維護(hù)性-Maintainability

系統(tǒng)的可維護(hù)性在互聯(lián)網(wǎng)產(chǎn)品初期階段可能并不能引起很高的重視,因?yàn)槌跗陔A段最重要的痛點(diǎn)是快速占領(lǐng)市場。但是等到產(chǎn)品發(fā)展到一定階段,一個(gè)系統(tǒng)的可維護(hù)性又會成為繼續(xù)發(fā)展壯大的瓶頸??删S護(hù)性主要考慮下面幾個(gè)因素:

3、結(jié)束語

軟件系統(tǒng)的非功能性需求是一個(gè)很大的題目,如果要展開說可能不是這樣的篇幅能夠涵蓋的。在所有的非功能性需求中用戶體驗(yàn)是已經(jīng)被廣大互聯(lián)網(wǎng)用戶所了解的,而文中所提到的幾個(gè)非功能性需求背后對應(yīng)的都是一個(gè)龐大的解決方案需要無數(shù)的軟硬件系統(tǒng)協(xié)作來完成。

套用Fenng所說的:技術(shù)的作用從短期來看往往都被高估,但是從長期來看又往往被低估。

本文作者:陳琨(點(diǎn)融黑幫),現(xiàn)任點(diǎn)融網(wǎng)資深軟件開發(fā)工程師,曾就職于愛立信,華為,關(guān)注于高并發(fā)高可用的互聯(lián)網(wǎng)軟件系統(tǒng)設(shè)計(jì)和開發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容