1.高負(fù)載、高性能。
面向千萬級(jí)數(shù)據(jù)量設(shè)計(jì),充分利用到 Memcached 、MySQL 5.1+ 分區(qū)特性,使負(fù)載能力和性能大幅度提高。
2.徹底采用 MVC 模式設(shè)計(jì),將數(shù)據(jù)處理,業(yè)務(wù)邏輯,顯示分開。
MVC 的意義對(duì)于大規(guī)模組織代碼意義是重大的,特別是到了產(chǎn)品的后期,MVC的優(yōu)勢(shì)越是明顯。
3. 代碼嚴(yán)格遵守規(guī)范,比如:
絕不允許代碼2次以上拷貝;
不允許一個(gè) Notice 出現(xiàn);
不允許多打一個(gè)空格;
這樣要求級(jí)別,如果對(duì)于普通的開發(fā)到后期的項(xiàng)目和產(chǎn)品是難以想象的,但是我們從開始就堅(jiān)持了下來。我們相信這是值得的,這對(duì)于后期維護(hù)和二次開發(fā)是非常有意義的。
4. 速度、速度、速度!為了追求速度,不使用第三方類庫,所有類庫均獨(dú)立開發(fā),這樣保證每一個(gè)方法每一行代碼都是有用的,我們對(duì)用戶下載的每一字節(jié)負(fù)責(zé)。我們實(shí)現(xiàn)的類庫有:
JS 在線編輯器,實(shí)現(xiàn)了基礎(chǔ)包括插入相冊(cè)圖片等功能。兼容IE/FF/CHROME,去掉注釋,才29k
編譯模板,在200多行代碼里面實(shí)現(xiàn)了模板最經(jīng)典的功能,你能想象一下Smarty有多少行嗎?
DB 類(其中封裝了 Memcached, Master/Slave, 延遲更新機(jī)制等)
JS AJAX/Menu 的組合等(JQuery 曾經(jīng)讓我們搖擺了一下,但是它壓縮后的30k+還是讓我們覺得無法忍受,我們未壓縮的 ajax.js:13k menu.js:10k)
我們不惜時(shí)間和精力去重新造車輪,就是為了讓這個(gè)車輪更輕,更快,我們的目標(biāo)是:挖掘出單臺(tái)機(jī)器的極限。
5. 面向千萬級(jí)的數(shù)據(jù)庫設(shè)計(jì)
如果說架構(gòu)是人體的骨架,那么數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計(jì)就是一個(gè)人的血肉,在我們看來一個(gè)字節(jié)是一件很大的事情,我們會(huì)因?yàn)?username 是 char(15),和 char(16) 而爭(zhēng)論良久。因?yàn)橐粋(gè)字節(jié)放大到1000w行的表里去的時(shí)候,就是10M,沒錯(cuò),10M!如果有某個(gè)索引用到了該字段,那再加10M!,數(shù)據(jù)庫空間是寶貴的,所以一個(gè)字節(jié)是大事!
對(duì)每條語句都做嚴(yán)格的測(cè)試,我們崇尚理論,但更加尊重事實(shí)。給大家分享一組數(shù)據(jù)吧,比如,在一個(gè) 10w 行的表里面,根據(jù)主鍵取一條數(shù)據(jù),這個(gè)時(shí)間是多少?答案: < 0.0001 可以忽略不計(jì),換一個(gè)條件,將10w換成1000w,這下答案就比較“恐怖”了,答案是 0.02s ,也許你覺得很快,不過才 20ms。但是你要知道,根據(jù)測(cè)試,人們覺得頁面“卡”的時(shí)間是70ms!也就是說只要你的這個(gè)頁面執(zhí)行時(shí)間超過了70ms,那么用戶就會(huì)覺得卡,不會(huì)再有“閃電”那種快感,在生活節(jié)奏越來越快的今天,人們只會(huì)越來越難以忍受滿如死牛的半天白屏的網(wǎng)站。而一條SQL就花了20ms,只需要4條這樣的SQL就可以讓用戶“有感覺”了。再加上PHP的執(zhí)行時(shí)間,千萬級(jí)數(shù)據(jù)量下的設(shè)計(jì),每一個(gè)細(xì)節(jié)都得非常注意,否則滿盤皆輸。
6. Memcached 多臺(tái)的同步服務(wù)
BBS 跟一般的web應(yīng)用不一樣,數(shù)據(jù)更新頻繁,不適合分布式部署,而且權(quán)限判斷復(fù)雜,很難統(tǒng)一緩存。所以只能盡可能的將壓力轉(zhuǎn)移到web server,減輕 db server 的壓力,但是多臺(tái) web server 會(huì)有同步的問題,這個(gè)memcached本身并沒有提供這種同步機(jī)制。我們單獨(dú)寫了基于linux平臺(tái)的memcached同步服務(wù),對(duì)于大型站點(diǎn)這是非常有意義的。
7. 簡(jiǎn)潔的利于搜索引擎的URL格式,比如:
http://www.xiuno.com/user-login.htm
http://bbs.xiuno.com/thread-index-123.htm
而這些,只需要一條 Rewrite 支持,而像這種小火花,我們架構(gòu)里面到處都是。
8. 華麗風(fēng)格和簡(jiǎn)潔風(fēng)格的支持
編譯模板將簡(jiǎn)潔風(fēng)格“翻譯”成華麗風(fēng)格,針對(duì)程序員是透明的,程序員只需要寫最簡(jiǎn)單的模板界面代碼即可。
華麗到極致,支持陰影、圓角、雕刻質(zhì)感,當(dāng)然也不是為了盲目追求效果而大幅犧牲性能,那種事情肯定是違背我們的原則的,我們做了圖片合并處理,減少了圖片的請(qǐng)求,并且可以將圖片部署到獨(dú)立的服務(wù)器上,這樣分散壓力,對(duì)于表格,增加了 table-layout:fixed 屬性,加快了瀏覽器的渲染速度等。
簡(jiǎn)潔到極致,沒有圖片,除了LOGO,其他的都是代碼寫的色塊。
風(fēng)格的制作,我們提供PSD源文件和制作教程,風(fēng)格樣式定義簡(jiǎn)單,比如我們的顏色定義,按照顏色深淺定義1-9個(gè)變量即可,當(dāng)然你也可以單獨(dú)的定義超級(jí)鏈接或者標(biāo)題顏色:
// 主要顏色, 淺色到深色
define('COLOR1', '#DFDFDF');
define('COLOR2', '#BFBFBF');
define('COLOR3', '#979797');
define('COLOR4', '#6F6F6F');
define('COLOR5', '#444444');
define('COLOR6', '#262626');
define('COLOR9', '#000000');
// 別名,方便使用
define('COLORGREY', '#666666');
define('COLORALERT', '#2B78E4');
define('COLORTITLE', COLOR6);
define('COLORHR', COLOR5);
9. 架構(gòu)層級(jí)避免安全問題
我們采用了 latin1_bin 存儲(chǔ)數(shù)據(jù),使 MySQL 最忠誠(chéng)的保證了數(shù)據(jù)存取的一致性。
MVC 模式下有效降低了 register_global on 的問題,加上我們消除了所有的Notice,讓外部變量很難注射到內(nèi)部。
我們?cè)诩軜?gòu)層面解決了很多安全問題,同時(shí)代碼也經(jīng)過了某著名互聯(lián)網(wǎng)公司的安全人士(因?yàn)樗救瞬辉敢夤_身份,所以)檢測(cè)和修補(bǔ),線上應(yīng)用已經(jīng)平穩(wěn)的跑了半年。我們相信這個(gè)世界上沒有密不透風(fēng)的墻,但是我們?cè)趯懨恳恍写a的時(shí)候都想到了安全。
10. HTML代碼白名單擴(kuò)展
傳統(tǒng)的PHP過濾HTML危險(xiǎn)代碼總會(huì)有這樣那樣的疏忽,理論上黑名單是不可能考慮周全的!這是所有PHP開發(fā)者頭痛的一個(gè)問題。解決這個(gè)問題的辦法只有一個(gè):白名單語法分析。
考慮的語法分析的特殊性,為了安全的過濾HTML代碼,我們拿C開發(fā)了PHP擴(kuò)展以實(shí)現(xiàn)白名單過濾。效率接近于 O(N),完美的解決了這個(gè)問題。
最新更新 | 專題合集|提交軟件 | 聯(lián)系我們 | 版權(quán)聲明
紅軟基地是免費(fèi)軟件下載網(wǎng)站,以綠色軟件,免費(fèi)軟件,瀏覽器,播放器,手機(jī)軟件,殺毒軟件,單機(jī)游戲下載為主,十萬用戶的選擇,沒有彈窗廣告的軟件下載網(wǎng)站!