平臺(tái)網(wǎng)站架構(gòu)設(shè)計(jì)的經(jīng)驗(yàn)之談

2022-03-22    分類: 網(wǎng)站建設(shè)

從架構(gòu)設(shè)計(jì)師的角度來看,架構(gòu)就是一套構(gòu)建系統(tǒng)的準(zhǔn)則。通過這套準(zhǔn)則,我們可以把一個(gè)復(fù)雜的系統(tǒng)劃分為一套更簡(jiǎn)單的子系統(tǒng)的集合,這些子系統(tǒng)之間應(yīng)該保持相互獨(dú)立,并與整個(gè)系統(tǒng)保持一致。而且每一個(gè)子系統(tǒng)還可以繼續(xù)細(xì)分下去,從而構(gòu)成一個(gè)復(fù)雜的企業(yè)級(jí)架構(gòu)。

一 選擇技術(shù)方案和物理架構(gòu)

如何選擇技術(shù)方案和物理架構(gòu),對(duì)很多剛接觸平臺(tái)網(wǎng)站研發(fā)的人來說這可能是個(gè)頭疼的問題。這些問題的源頭很簡(jiǎn)單就是能否提高開發(fā)效率,使平臺(tái)具有高性能高負(fù)載性。就我遇到的常見的有這么幾個(gè)問題:

a) 開發(fā)語言和數(shù)據(jù)庫(kù)

一說到開發(fā)語言和數(shù)據(jù)庫(kù),很多人便開始做語言的比較,最常見的爭(zhēng)論有:“asp.net和java哪個(gè)好”,“解釋性語言和編譯性語言哪個(gè)好”等。我個(gè)人覺的最關(guān)鍵是你和你的團(tuán)隊(duì)最擅長(zhǎng)的開發(fā)語言和數(shù)據(jù)庫(kù)是哪個(gè),古語有云:“工欲善其事,必先利其器!”,趁手的開發(fā)語言和數(shù)據(jù)庫(kù)有助于事半功倍。試想如果你選擇了一個(gè)并不很熟悉的語言,也許這個(gè)語言和數(shù)據(jù)庫(kù)在基礎(chǔ)性能上的確比你掌握的語言好,但是在研發(fā)過程中學(xué)習(xí)曲線肯定長(zhǎng)。而且遇到問題的時(shí)候因?yàn)椴皇煜さ脑颍速M(fèi)更多的時(shí)間去尋找解決方法,而且找到的方法不一定是最好的,說不定還不如你自己用熟悉的語言解決來的快。

也許有朋友會(huì)說:“這幾種開發(fā)語言和數(shù)據(jù)庫(kù)我都熟悉”,那么就要看你對(duì)這幾種開發(fā)語言和數(shù)據(jù)庫(kù)的熟悉程度了,對(duì)各種開發(fā)語言和數(shù)據(jù)庫(kù)的特性了解的越深入,越有助于提高開發(fā)效率。而且目前主流的開發(fā)語言和數(shù)據(jù)庫(kù)都提供性能調(diào)優(yōu),只有深入了解了開發(fā)語言和數(shù)據(jù)庫(kù)的特性和原理,那么性能調(diào)優(yōu)就很容易。

個(gè)人覺的重要的就這兩點(diǎn),開發(fā)效率和性能。

b) 成熟框架還是自己實(shí)現(xiàn)

目前主流的開發(fā)語言的使用者中有很多前輩都提供了他們自己總結(jié)實(shí)現(xiàn)的框架,比如JAVA中的“S-S-H”組合,PYTHON的DJANGOO等。我個(gè)人的一些經(jīng)驗(yàn)是,盡量使用開源的成熟框架,因?yàn)槠脚_(tái)研發(fā)初期使用成熟的開源框架,能提高開發(fā)效率,并且在質(zhì)量上有保證。我曾經(jīng)接手過一個(gè)平臺(tái)的改版,框架是前面開發(fā)人員自己寫的,里面的一些設(shè)計(jì)思想不是很成熟,導(dǎo)致平臺(tái)在負(fù)載增高后性能很差,整改起來很麻煩,只能一點(diǎn)一點(diǎn)的分離出來,耗費(fèi)時(shí)間和經(jīng)歷。

有的朋友可能會(huì)問什么才是成熟的框架,個(gè)人總結(jié)的幾點(diǎn):

1 能提供使用指南,比如 COOKBOOK, USE GUIDE等。有這些提供,那么入門使用變的容易,也方便維護(hù),而且有助于深入了解其特性和原理。

2 有官方支持,比如官方討論社區(qū),郵件列表等,并且有BUG收集處理機(jī)制。有句話叫大樹底下好乘涼,有了官方支持,當(dāng)使用過程中遇到問題的時(shí)候,直接就可以通過查找前人的使用心得和問題來解決問題,遇到BUG的時(shí)候,提交上去,也能找到解決之法。

3 官方在不斷的更新發(fā)布穩(wěn)定版本。這一點(diǎn)很重要,官方如果及時(shí)幫你解決目前已知的或者未知的BUG,那么對(duì)使用者來講,就沒什么后顧之憂了,如果官方停止更新了,那么我建議還是早點(diǎn)換下家吧,因?yàn)槿绻@個(gè)框架好,那么肯定會(huì)越來越好,官方也會(huì)不斷的更新它。還有就是穩(wěn)定永遠(yuǎn)是第一位,可以在不影響生產(chǎn)環(huán)境的情況下進(jìn)行無縫升級(jí)更新。

4 身邊使用者很多,經(jīng)常能看到相關(guān)的討論或者總結(jié)。目前很多成熟框架都是國(guó)外開發(fā)者發(fā)布的,如果使用者E文不好也是個(gè)討厭的事情,那么如果身邊有很多同樣的使用者和很多討論,那么對(duì)于使用者來說是種福音,共同探討和學(xué)習(xí)。

那么除此之外最好是開源的框架,平臺(tái)初期訪問量不大,因此對(duì)性能的要求不高,成熟的框架的使用都不會(huì)出現(xiàn)什么問題。當(dāng)訪問量急劇增高之后,那么性能要求也變高,一些框架中隱藏的問題也因此出現(xiàn)。這時(shí)候如果是開源的框架,使用者可以深入了解它的源代碼,洞悉其實(shí)現(xiàn)機(jī)制,根據(jù)自己的實(shí)際情況進(jìn)行調(diào)優(yōu)。如果不是那么使用者也只能改變方向去解決問題,條條大路通羅馬。

c) web server/db server/cache server 相關(guān)

在架構(gòu)設(shè)計(jì)中web server/db server/cache server是很重要的一點(diǎn),我個(gè)人覺的這一塊必須是使用具有前瞻性,易配置,能監(jiān)控和維護(hù)的產(chǎn)品,總結(jié)的幾點(diǎn):

1 豐富和深入的配置選項(xiàng)。如果能提供豐富和深入的配置選項(xiàng),那么在安全和性能調(diào)整上可以很方便的進(jìn)行操作,并且不中斷實(shí)際的生產(chǎn)環(huán)境。

2 基于高并發(fā)模型。比如這幾年熱門的基于epoll的nginx,可以有效的減少連接處理時(shí)間,增大同時(shí)并發(fā)數(shù)。

3 支持負(fù)載均衡和請(qǐng)求分發(fā)。當(dāng)平臺(tái)的訪問量增高之后,單臺(tái)服務(wù)器肯定是很難支撐,這時(shí)候就需要增加服務(wù)器來分擔(dān)壓力,這時(shí)候server的負(fù)載均衡和請(qǐng)求分發(fā)就很重要了。

4 高效的緩存機(jī)制。高效的緩存機(jī)制可以幫助平臺(tái)提高負(fù)載能力,減少重復(fù)資源的讀取和處理時(shí)間。比如用于小文件緩存的SQUID,VARNISH,用于數(shù)據(jù)庫(kù)緩存的memcached等。

5 實(shí)時(shí)的狀態(tài)監(jiān)控機(jī)制。實(shí)時(shí)的監(jiān)控狀態(tài)報(bào)告,可以有助于平臺(tái)維護(hù)人員迅速了解平臺(tái)性能運(yùn)行狀況,根據(jù)狀況進(jìn)行調(diào)整。

如果是開源的那就更好了,可以深入了解其源代碼,并根據(jù)自己的實(shí)際需要進(jìn)行配置和定制。

d) 操作系統(tǒng)

選擇合適的操作系統(tǒng),個(gè)人覺的最主要是穩(wěn)定安全,易管理和維護(hù),易監(jiān)控。穩(wěn)定安全的操作系統(tǒng)一般官方會(huì)持續(xù)的發(fā)布補(bǔ)丁和新版本,解決BUG和漏洞等。并且官方或者第三方會(huì)不斷的提供新的管理維護(hù)監(jiān)控工具,并且能讓管理維護(hù)人員通過編寫腳本來維護(hù)管理。而且合適的操作系統(tǒng)能讓研發(fā)人員充分利用其特性,發(fā)揮平臺(tái)的大性能。

f) 物理架構(gòu)

這里的物理架構(gòu)是指服務(wù)器的搭建方式。有的朋友可能資源有限只有一臺(tái)服務(wù)器,有的朋友資源充分有十幾臺(tái)服務(wù)器或者更多,我個(gè)人覺的這都不是問題。平臺(tái)初期的話,我想大部分訪問量都不高,web server/db server/cache server放在一臺(tái)服務(wù)器上都沒問題。但是自己心里最好能預(yù)估一下這個(gè)平臺(tái)會(huì)發(fā)展到什么樣的規(guī)模,在做架構(gòu)設(shè)計(jì)的時(shí)候,按照事先預(yù)估的來決定怎么做物理架構(gòu),并為以后的架構(gòu)升級(jí)做準(zhǔn)備。說到這里,想到前百度架構(gòu)師雷鳴說過的一句話,當(dāng)你的會(huì)員數(shù)達(dá)到目前的5倍或10倍的時(shí)候,架構(gòu)就要升級(jí)。

二 平臺(tái)研發(fā)

前期做好了技術(shù)方案,就進(jìn)入到實(shí)質(zhì)研發(fā)過程中來了,個(gè)人感覺平臺(tái)網(wǎng)站的研發(fā)有別于傳統(tǒng)的IT項(xiàng)目研發(fā),因?yàn)橐郧熬褪强蛻?需求分析人員/美工之間進(jìn)行交涉,而現(xiàn)在平臺(tái)網(wǎng)站研發(fā)會(huì)多接觸一個(gè)角色叫產(chǎn)品,產(chǎn)品決定了最后的平臺(tái)網(wǎng)站是什么樣的,有什么功能,每個(gè)功能的流程和用例是什么樣子的,也就是原型設(shè)計(jì)。并且在研發(fā)人員實(shí)現(xiàn)之后,還要由測(cè)試人員進(jìn)行測(cè)試。

在上述過程中,產(chǎn)品會(huì)經(jīng)常要求研發(fā)人員:“某某功能是這樣的,你趕快給我實(shí)現(xiàn)并解決。這個(gè)功能不對(duì),要改。那個(gè)功能出現(xiàn)問題,要改”,而研發(fā)人員可能正在忙著其他功能的實(shí)現(xiàn),于是很容易產(chǎn)生沖突。在此我推薦使用敏捷開發(fā)方式,設(shè)立短的發(fā)布周期進(jìn)行迭代開發(fā),產(chǎn)品提出來的問題統(tǒng)一在一個(gè)周期內(nèi)解決,到下一個(gè)周期一起發(fā)布,到下一個(gè)周期再進(jìn)行下一周期的功能改進(jìn)和BUG修正。并使用JIRA這種成熟的項(xiàng)目管理系統(tǒng)進(jìn)行管理,為以前的更改留下歷史,總結(jié)經(jīng)驗(yàn)。

那么在正常的研發(fā)過程中,特別是團(tuán)隊(duì)研發(fā),我個(gè)人覺的需要注意的幾點(diǎn):

1 合適的開發(fā)工具。還是那句話“工欲善其事,必先利其器!”,使用合適的開發(fā)工具和插件,能提高開發(fā)效率,節(jié)省開發(fā)成本。團(tuán)隊(duì)使用統(tǒng)一的開發(fā)工具,可以減少出錯(cuò)的幾率,防止版本沖突等。

2 如何控制代碼質(zhì)量。因?yàn)閳F(tuán)隊(duì)里大家的水平有高有低,所以團(tuán)隊(duì)研發(fā)的時(shí)候,需要去建立固定的開發(fā)規(guī)范,比如:“命名規(guī)范”,“代碼包引用規(guī)范等”。當(dāng)某個(gè)人解決某個(gè)功能的時(shí)候,為了確保代碼質(zhì)量和減少出錯(cuò)幾率,最好能畫出流程圖和配上設(shè)計(jì)意圖說明,來進(jìn)行討論確定,同時(shí)也可以幫助新人快速成長(zhǎng)。

3 需要引入新框架。有時(shí)候,某個(gè)成員會(huì)覺的某某框架的新特性非常好用或者非常合適手頭的問題,那么就想引入這個(gè)新框架,我的建議,在充分了解的基礎(chǔ)上來決定,不能因?yàn)槟硞€(gè)特性而引入一堆用不到的特性,那樣會(huì)讓項(xiàng)目代碼顯的冗余。

4 知識(shí)總結(jié)和培訓(xùn)。當(dāng)某個(gè)成員遇到問題,并解決后或者學(xué)習(xí)到新東西的時(shí)候,不妨拿出來大家一起探討一下,說不定就有助于提高平臺(tái)的性能,為大家提供更好的設(shè)計(jì)思路。

三 架構(gòu)優(yōu)化

“過早優(yōu)化是萬惡之源”,所以關(guān)于架構(gòu)優(yōu)化,我放在研發(fā)完成并上線之后來講。個(gè)人覺的沒有百分百可用的架構(gòu),得看你實(shí)際的業(yè)務(wù)流程和運(yùn)行情況來進(jìn)行優(yōu)化。當(dāng)你運(yùn)行了一段時(shí)間后,收集到一定的數(shù)據(jù),找出性能的弱點(diǎn)后進(jìn)行針對(duì)性調(diào)整和優(yōu)化,當(dāng)平臺(tái)的負(fù)載強(qiáng)度達(dá)到一定程度,就得立即著手做架構(gòu)升級(jí)。

有的朋友會(huì)問,有時(shí)候網(wǎng)站就是莫名其妙的變慢,但是不知道從何下手怎么辦,或者憑經(jīng)驗(yàn)改改這個(gè)改改那個(gè)選項(xiàng),好了一點(diǎn)但好的不徹底。我的經(jīng)驗(yàn)是從數(shù)據(jù)開始,從最外圍開始畫圈,找到源頭。先從外圍開始收集日志,比如access_log訪問日志或sql_log數(shù)據(jù)庫(kù)操作日志,找出訪問最多的10條日志和執(zhí)行時(shí)間最長(zhǎng)的10條日志,然后根據(jù)日志去反查到底是什么引起的操作,然后一條條的解決。如果解決不了,那么就考慮重構(gòu)。其他問題解決方式跟這個(gè)差不多,就不贅述了。從我自己已有的經(jīng)驗(yàn)來看,往往就是因?yàn)閹讉€(gè)功能點(diǎn)的惡化,引起了整體的性能變差。

所以在研發(fā)的時(shí)候,功能點(diǎn)的實(shí)現(xiàn)要好好考慮,前端部分,頁面,圖片等的大小和有效緩存,后端的局部數(shù)據(jù)和全局?jǐn)?shù)據(jù)的緩存高效利用,數(shù)據(jù)庫(kù)層SQL語句盡量避免跨表查詢,數(shù)據(jù)庫(kù)索引的利用等。

四 其他相關(guān)

存儲(chǔ)

當(dāng)平臺(tái)網(wǎng)站的訪問量不斷增長(zhǎng)的同時(shí),數(shù)據(jù)也會(huì)跟著不斷的增長(zhǎng),所以早期做好數(shù)據(jù)如何存儲(chǔ)的方案非常重要。

現(xiàn)在比較常見的是HASH URL,根據(jù)文件名的HASH來選擇存儲(chǔ)不同的目錄,比如20091014131213_abc.xxx 那么就存儲(chǔ)到 2009/10/14/a/20091014131213_abc.xxx這樣的目錄下,方便以后根據(jù)目錄來劃分服務(wù)器。

搜索

當(dāng)平臺(tái)網(wǎng)站的訪問量不斷增長(zhǎng)的同時(shí),數(shù)據(jù)搜索也變成了一個(gè)問題。肯定有朋友會(huì)說,直接數(shù)據(jù)庫(kù)模糊查詢有什么問題,你試想當(dāng)你的數(shù)據(jù)表里有幾百萬數(shù)據(jù)你用 select * from table where title like '%key%' 沒法用索引,那就是全表掃描,拿得花多少時(shí)間,一個(gè)人查詢還沒問題,那幾百個(gè)呢,那你的平臺(tái)不就歇菜了。還好現(xiàn)在已經(jīng)有了成熟方案Lucene,只要按照它提供的接口去實(shí)現(xiàn),你就可以使用。

名稱欄目:平臺(tái)網(wǎng)站架構(gòu)設(shè)計(jì)的經(jīng)驗(yàn)之談
網(wǎng)站路徑:http://muchs.cn/news/144902.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、做網(wǎng)站、網(wǎng)站維護(hù)、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)