服務熱線:(852)39995400  (852)68882160
購物車
註冊

用戶登入

×
忘記用戶名
忘記密碼
在線客服

服務熱線

(852)39995400

WhatsApp 微信號

電郵 support@tnet.hk
在線諮詢    

更多聯繫方式

百萬級訪問網站前期的技術準備(中)

  • 發佈時間:2010-12-07

  • 瀏覽次數:3543

  • 七、數據庫
         幾乎所有操作最後都要落到數據庫身上,它又最難擴展(存儲也挺難)。對於mysql,什麽樣的表用myisam,什麽樣的表用innodb,在開發 之前要確定。復制策略、分片策略,也要確定。表引擎方面,一般,更新不多、不需要事務的表可以用myisam,需要行鎖定、事務支持的,用innodb。 myisam的鎖表不一定是性能低下的根源,innodb也不一定全是行鎖,具體細節要多看相關的文檔,熟悉了引擎特性才能用的更好。現代WEB應用越來 越復雜了,我們設計表結構時常常設計很多冗余,雖然不符合傳統範式,但為了速度考慮還是值得的,要求高的情況下甚至要杜絕聯合查詢。編程時得多註意數據一 致性。
         復制策略方面,多主多從結構也最好一開始就設計好,代碼直接按照多主多從來編寫,用一些小技巧來避免復制延時問題,並且還要解決多數據庫數據是否一致,可以自己寫或者找現成的運維工具。
         分片策略。總會有那麽幾個表數據量超大,這時分片必不可免。分片有很多策略,從簡單的分區到根據熱度自動調整,依照具體業務選擇一個適合自己的。避免自增ID作為主鍵,不利於分片。
         用存儲過程是比較難擴展的,這種情形多發生於傳統C/S,特別是OA系統轉換過來的開發人員。低成本網站不是一兩臺小型機跑一個數據庫處理所有業務的模式,是機海作戰。方便水平擴展比那點預分析時間和網絡傳輸流量要重要的多的多。
         NoSQL。這只是一個概念。實際應用中,網站有著越來越多的密集寫操作、上億的簡單關系數據讀取、熱備等,這都不是傳統關系數據庫所擅長的,於是 就產生了很多非關系型數據庫,比如Redis/TC&TT/MongoDB/Memcachedb等,在測試中,這些幾乎都達到了每秒至少一萬次 的寫操作,內存型的甚至5萬以上。例如MongoDB,幾句配置就可以組建一個復制+自動分片+failover的環境,文檔化的存儲也簡化了傳統設計庫 結構再開發的模式。很多業務是可以用這類數據庫來替代mysql的。
    八、緩存。
         數據庫很脆弱,一定要有緩存在前面擋著,其實我們優化速度,幾乎就是優化緩存,能用緩存的地方,就不要再跑到後端數據庫那折騰。緩存有持久化緩存、 內存緩存,生成靜態頁面是最容易理解的持久化緩存了,還有很多比如varnish的分塊緩存、前面提到的memcachedb等,內存緩 存,memcached首當其沖。緩存更新可用被動更新和主動更新。被動更新的好處是設計簡單,緩存空了就自動去數據庫取數據再把緩存填上,但容易引發雪 崩效應,一旦緩存大面積失效,數據庫的壓力直線上升很可能掛掉。主動緩存可避免這點但是可能引發程序取不到數據的問題。這兩者之間如何配合,程序設計要多 動腦筋。
    九、隊列。
         用戶一個操作很可能引發一系列資源和功能的調動,這些調動如果同時發生,壓力無法控制,用戶體驗也不好,可以把這樣一些操作放入隊列,由另幾個模塊 去異步執行,例如發送郵件,發送手機短信。開源隊列服務器很多,性能要求不高用數據庫當做隊列也可以,只要保證程序讀寫隊列的接口不變,底層隊列服務可隨 時更換就可以,類似Zend Framework裏的Zend_Queue類,java.util.Queue接口等。
    十、文件存儲。
         除了結構化數據,我們經常要存放其他的數據,像圖片之類的。這類數據數量繁多、訪問量大。典型的就是圖片,從用戶頭像到用戶上傳的照片,還要生成不 同的縮略圖尺寸。存儲的分布幾乎跟數據庫擴展一樣艱難。不使用專業存儲的情況下,基本都是靠自己的NAS。這就涉及到結構。拿圖片存儲舉例,圖片是非常容 易產生熱點的,有些圖片上傳後就不再有人看,有些可能每天被訪問數十萬次,而且大量小文件的異步備份也很耗費時間。
         為了將來圖片走cdn做準備,一開始最好就將圖片的域名分開,且不用主域名。很多網站都將cookie設置到了.domain.ltd,如果圖片也在這個域名下,很可能因為cookie而造成緩存失效,並且占多余流量,還可能因為瀏覽器並發線程限制造成訪問緩慢。
         如果用普通的文件系統存儲圖片,有一個簡單的方法。計算文件的hash值,比如md5,以結果第一位作為第一級目錄,這樣第一級有16個目錄。從0 到F,可以把這個字母作為域名,0.yourimg.com到f.yourimg.com(客戶端dns壓力會增大),還可以擴展到最多16個NAS集群 上。第二級可用年月例如,201011,第三級用日,第四級可選,根據上傳量,比如am/pm,甚至小時。最終的目錄結構可能會是 e/201008/25/am/e43ae391c839d82801920cf.jpg。rsync備份時可以用腳本只同步某年某日某時的文件,避免計 算大量文件帶來的開銷。當然最好是能用專門的分布式文件系統或更專業點的存儲解決方案。
    下面,我們要談談代碼了。

    (文章來源zhiyi.us)

     

    www.tnet.hk

    ICANN & CNNIC & HKDNR認證頂級域名註冊商

搜索

Document