構建可擴展的Web站點讀書筆記
書讀完了一遍,邊做一個示例網站邊寫讀書筆記。
第一章 緒論
不要花劉個月時間制定規範,再花一年來實施。花一天定規範,幾天實現,幾個月完善。這個建議和《夢斷代碼》驚人的相似。
第二章 Web應用程序
這章講的是web站點需要分層,例如持久化存儲層、業務邏輯層、展現層……示例網站採用Django作爲框架,我理解的“層次”如下:
Django本身就是分層的,自稱MTV框架。模板層使用Django自帶的模板語言,此外包括XHTML、CSS和JS等前端技術。視圖則是純的Python代碼,可以使用Django框架帶來的各種功能。模型層也是Python代碼,但是主要的任務就是定義數據庫模型(表結構),以及定義對這些模型的管理(manager),它會負責與數據庫的連接。
下載Django之後,默認的配置採用SQLite數據庫,可以遷移到MySQL和PostgreSQL上。自己對PostgreSQL比較陌生,但是目前MySQL前途未卜,而Django官方又推薦PostgreSQL,決定難下。
同樣,Django內置一個測試的服務器,不過不能用在生產環境。官方推薦Apache+mod_python,但是民間似乎傳說nginx擁有速度優勢。
第三章 開發環境
1. 使用源代碼控制系統:SVN
2. 單步構建:代碼要經過開發、提交測試,然後才能部署。
3. 問題跟蹤(缺陷跟蹤):Google Code好像有這個功能。Trac好像不錯,但是應該要配置一段時間。
本段還介紹了微軟的“零錯誤方法學”
編碼規範:制定包括縮進,註釋等的代碼風格規範以及對變量名的約定。
測試:
迴歸測試(Regression Testing),確保程序沒有舊病復發,建議不要太多,否則浪費時間。
手工測試,web程序必經的步驟。
第四章 i18n,L10n和Unicode
本章大多介紹的是如何在PHP中使用UTF-8。幸運的是Django內部直接就採用了Unicode的處理字符串,而且自帶一個i18n模塊。
第五章 數據一致性和安全性
1. 過濾HTML輸入。
2. XSS:對輸出進行escape,這個是Django的默認行爲。
3. SQL注入:Django基本上免疫,因爲正常情況下不會手工構造SQL語句進行查詢。
第六章 電子郵件
越過。
第七章 遠程服務
介紹了socket、基於HTTP的XML-RPC和SOAP,最後介紹了Flickr利用自定義協議實現的文件存儲協議。
第八章 瓶頸
找出瓶頸
把應用劃分爲邏輯組件,之後對每個組件進行分析,深入到硬件層次(CPU、內存I/O、硬盤I/O、網絡I/O)。
CPU:使用top查詢。
磁盤I/O:iostat –c 可以看到CPU因等待I/O操作完成而處於空閒狀態的百分比(iowait)。iostat – dx查看更詳細的報告。
網絡I/O:netstat –i 和 netstat –ieth0 –e。
內存I/O:free –m ,查看內存分配狀態。vmstat –S M 物理內存和虛擬內存的使用。ps ax,RSS爲駐留集(在主內存中),VSZ爲工作集(虛擬大小)。避免使用SWAP。
數據庫:查詢優化、索引優化、緩存。
第九章 擴展Web應用程序
水平擴展:多機器的軟硬件最好是一致的,配置起來比較方便。
負載均衡:DNS方式僵硬,硬件方式太貴,軟件方式靠譜。
擴展MySQL:
MySQL的複製(主從、主主)。主從的大概機制,主數據庫向從數據庫發送binary log,從數據庫將受到的log寫入relay log,再按順序執行relay log。後面介紹了數據庫分區(縱向擴展)以及聯合(橫向擴展)。
存儲擴展:
文件系統,當一個目錄有太多的文件時,基於inode的Unix文件查找會很慢,而新的文件系統Reisser和ext3解決了這個問題。RAID、聯合(GFS、MogileFS)、緩存(memchached、Squid)。