一、隨需應(yīng)變:網(wǎng)站的可擴(kuò)展架構(gòu)的必要性
可能很多客戶會(huì)問(wèn),網(wǎng)站架構(gòu)為什么需要可擴(kuò)展性?深圳網(wǎng)站建設(shè)公司本文就這個(gè)問(wèn)題進(jìn)行說(shuō)明,隨需應(yīng)變:網(wǎng)站的可擴(kuò)展架構(gòu)的必要性。國(guó)內(nèi)某大型互聯(lián)網(wǎng)企業(yè)經(jīng)常因?yàn)閷?duì)同行的產(chǎn)品進(jìn)行微創(chuàng)新,然后推出自己的產(chǎn)品而遭人詬病,不討論這種做法是否合適,我們分析這些產(chǎn)品,發(fā)現(xiàn)大多數(shù)都比原創(chuàng)產(chǎn)品有更好的用戶體驗(yàn)。這些產(chǎn)品常常后來(lái)居上,更速度地推出新功能,吸引用戶注意,進(jìn)而占據(jù)市場(chǎng)。微信從發(fā)布到擁有l(wèi)億用戶,僅僅用了一年的時(shí)間。而據(jù)說(shuō)搖一搖這個(gè)功能是兩個(gè)實(shí)習(xí)生用一個(gè)星期就開(kāi)發(fā)完成上線的。
使用TOP (Taobao Opeu API),一個(gè)技術(shù)熟練的淘寶客網(wǎng)站開(kāi)發(fā)工程師只需要用幾個(gè)晚上的業(yè)余時(shí)間就可以開(kāi)發(fā)部署個(gè)炫目的購(gòu)物導(dǎo)購(gòu)網(wǎng)站。如此輕易地就可以開(kāi)發(fā)個(gè)新產(chǎn)品,如此快速地就可以實(shí)現(xiàn)一個(gè)新功能,他們是如何做到的?
為什么有的網(wǎng)站必須規(guī)定系統(tǒng)發(fā)布日,一到發(fā)布日就如臨大敵,整個(gè)技術(shù)部加班通宵達(dá)旦;而有的網(wǎng)站就可以隨時(shí)發(fā)布,新功能可以隨時(shí)快速上線。
這些都有賴于網(wǎng)站的擴(kuò)展性架構(gòu)設(shè)計(jì),就是在對(duì)現(xiàn)有系統(tǒng)影響最小的情況下,系統(tǒng)功能可持續(xù)擴(kuò)展及提升的能力。
經(jīng)常聽(tīng)到各種場(chǎng)合中對(duì)擴(kuò)展性和伸縮性的誤用,包括許多資深網(wǎng)站架構(gòu)師也常常混淆兩者,用擴(kuò)展性表示伸縮性。在此,博納網(wǎng)絡(luò)在這里澄清下這兩個(gè)概念。
1.擴(kuò)展性(Extansibility)
指對(duì)現(xiàn)有系統(tǒng)影響最小的情況下,系統(tǒng)功能可持續(xù)擴(kuò)展或提升的能力。表現(xiàn)在系統(tǒng)基礎(chǔ)設(shè)施穩(wěn)定不需要經(jīng)常變更,應(yīng)用之間較少依賴和耦合,對(duì)需求變更可以敏捷響應(yīng)。它是系統(tǒng)架構(gòu)設(shè)計(jì)層面的開(kāi)閉原則(對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉),架構(gòu)設(shè)計(jì)考慮未來(lái)功能擴(kuò)展,當(dāng)系統(tǒng)增加新功能時(shí),不需要對(duì)現(xiàn)有系統(tǒng)的結(jié)構(gòu)和代碼進(jìn)行修改。
2.伸縮性(Scalability)
指系統(tǒng)能夠通過(guò)增加(減少)自身資源規(guī)模的方式增強(qiáng)(減少)自己計(jì)算處理事務(wù)的能力。如果這種增減是成比例的,就被稱作線性伸縮性。在網(wǎng)站架構(gòu)中,通常指利用集群的方式增加服務(wù)器數(shù)量、提高系統(tǒng)的整體事務(wù)吞吐能力。
二、怎樣構(gòu)建可擴(kuò)展的網(wǎng)站架構(gòu)
開(kāi)發(fā)低耦合系統(tǒng)是軟件設(shè)計(jì)的終極目標(biāo)之一,這目標(biāo)驅(qū)動(dòng)著軟件開(kāi)發(fā)技術(shù)的創(chuàng)新與發(fā)展,從軟件與硬件的第次分離到操作系統(tǒng)的誕生;從匯編語(yǔ)言到面向過(guò)程的開(kāi)發(fā)語(yǔ)言,再到面向?qū)ο蟮木幊陶Z(yǔ)言;從各種軟件工具集到各種開(kāi)發(fā)框架;無(wú)不體現(xiàn)著降低軟件系統(tǒng)耦合性這終極目標(biāo)??梢哉f(shuō),度量一個(gè)開(kāi)發(fā)框架、設(shè)計(jì)模式、編程語(yǔ)言優(yōu)劣的重要尺度就是衡量它是不是讓軟件開(kāi)發(fā)過(guò)程和軟件產(chǎn)品更加低耦合。
顯而易見(jiàn),低耦合的系統(tǒng)更容易擴(kuò)展,低耦合的模塊更容易復(fù)用,一個(gè)低耦合的系統(tǒng)設(shè)計(jì)也會(huì)讓開(kāi)發(fā)過(guò)程和維護(hù)變得更加輕松和容易管理。一個(gè)復(fù)雜度為l00的系統(tǒng),如果能夠分解成沒(méi)有耦合的兩個(gè)子系統(tǒng),那么每個(gè)子系統(tǒng)的復(fù)雜度不是50,而可能是25。當(dāng)然,完全沒(méi)有耦合就是沒(méi)有關(guān)系,也就無(wú)法組合出個(gè)強(qiáng)大的系統(tǒng)。那么如何分解系統(tǒng)的各個(gè)模塊、如何定義各個(gè)模塊的接口、如何復(fù)用組合不同的模塊構(gòu)造成個(gè)完整的系統(tǒng),這是軟件設(shè)計(jì)中最有挑戰(zhàn)的部分。
深圳網(wǎng)站建設(shè)公司認(rèn)為,軟件架構(gòu)師最大的價(jià)值不在于掌握多少先進(jìn)的技術(shù),而在于具有將一個(gè)大系統(tǒng)切分成N個(gè)低耦合的子模塊的能力,這些子模
塊包含橫向的業(yè)務(wù)模塊,也包含縱向的基礎(chǔ)技術(shù)模塊。這種能力部分源自專業(yè)的技術(shù)和經(jīng)驗(yàn),還有部分源自架構(gòu)師對(duì)業(yè)務(wù)場(chǎng)景的理解、對(duì)人性的把握、甚至對(duì)世界的認(rèn)知。
大型網(wǎng)站也常常意味著功能復(fù)雜,產(chǎn)品眾多。網(wǎng)站為了在市場(chǎng)競(jìng)爭(zhēng)中勝出,不斷推出各種新產(chǎn)品,為了把握市場(chǎng)機(jī)會(huì),這些產(chǎn)品從策劃到上線,時(shí)間非常短暫,技術(shù)團(tuán)隊(duì)必須在產(chǎn)品設(shè)計(jì)和需求分析結(jié)束之后,快速地開(kāi)發(fā)完成個(gè)新產(chǎn)品。同時(shí)經(jīng)過(guò)長(zhǎng)期的演化和發(fā)展,這些產(chǎn)品之間的關(guān)系錯(cuò)綜復(fù)雜,維護(hù)也變得異常困難。這些問(wèn)題對(duì)網(wǎng)站的可擴(kuò)展架構(gòu)提出了挑戰(zhàn)和要求。設(shè)計(jì)網(wǎng)站可擴(kuò)展架構(gòu)的核心思想是模塊化,并在此基礎(chǔ)之上,降低模塊間的耦合性,提高模塊的復(fù)用性
博納網(wǎng)絡(luò)在本站前面的文章中分享過(guò)網(wǎng)站通過(guò)分層和分割的方式進(jìn)行架構(gòu)伸縮,分層和分割也是模塊化設(shè)計(jì)的重要手段,利用分層和分割的方式將軟件分割為若干個(gè)低耦合的獨(dú)立的組件模塊,這些組件模塊以消息傳遞及依賴調(diào)用的方式聚合成一個(gè)完整的系統(tǒng)。
在大型網(wǎng)站中,這些模塊通過(guò)分布式部署的方式,獨(dú)立的模塊部署在獨(dú)立的服務(wù)器(集群)上,從物理上分離模塊之件的耦合關(guān)系,進(jìn)一步降低耦合性提高復(fù)用性。模塊分布式部署以后具體聚合方式主要有分布式消息隊(duì)列和分布式服務(wù)。好了,網(wǎng)站建設(shè)公司關(guān)于為什么企業(yè)建站要考慮架構(gòu)的可擴(kuò)展性的原因本文就分享到這里。我們會(huì)在下一篇文章中就如何實(shí)現(xiàn)可擴(kuò)展性的具體步驟進(jìn)行分享。謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。