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