構建可擴展的Web站點讀書筆記

構建可擴展的Web站點讀書筆記

書讀完了一遍,邊做一個示例網站邊寫讀書筆記。

第一章   緒論

不要花劉個月時間制定規範,再花一年來實施。花一天定規範,幾天實現,幾個月完善。這個建議和《夢斷代碼》驚人的相似。

第二章   Web應用程序

這章講的是web站點需要分層,例如持久化存儲層、業務邏輯層、展現層……示例網站採用Django作爲框架,我理解的“層次”如下:

 

網站層次圖

Django本身就是分層的,自稱MTV框架。模板層使用Django自帶的模板語言,此外包括XHTMLCSSJS等前端技術。視圖則是純的Python代碼,可以使用Django框架帶來的各種功能。模型層也是Python代碼,但是主要的任務就是定義數據庫模型(表結構),以及定義對這些模型的管理(manager),它會負責與數據庫的連接。

下載Django之後,默認的配置採用SQLite數據庫,可以遷移到MySQLPostgreSQL上。自己對PostgreSQL比較陌生,但是目前MySQL前途未卜,而Django官方又推薦PostgreSQL,決定難下。

同樣,Django內置一個測試的服務器,不過不能用在生產環境。官方推薦Apache+mod_python,但是民間似乎傳說nginx擁有速度優勢。

第三章   開發環境

1.       使用源代碼控制系統:SVN

2.       單步構建:代碼要經過開發、提交測試,然後才能部署。

3.       問題跟蹤(缺陷跟蹤)Google Code好像有這個功能。Trac好像不錯,但是應該要配置一段時間。

本段還介紹了微軟的“零錯誤方法學”

編碼規範:制定包括縮進,註釋等的代碼風格規範以及對變量名的約定。

測試:

迴歸測試(Regression Testing),確保程序沒有舊病復發,建議不要太多,否則浪費時間。

手工測試web程序必經的步驟。

第四章   i18nL10nUnicode

本章大多介紹的是如何在PHP中使用UTF-8。幸運的是Django內部直接就採用了Unicode的處理字符串,而且自帶一個i18n模塊。

第五章   數據一致性和安全性

1.       過濾HTML輸入。

2.       XSS:對輸出進行escape,這個是Django的默認行爲。

3.       SQL注入:Django基本上免疫,因爲正常情況下不會手工構造SQL語句進行查詢。

第六章   電子郵件

越過。

第七章   遠程服務

介紹了socket、基於HTTPXML-RPCSOAP,最後介紹了Flickr利用自定義協議實現的文件存儲協議。

第八章   瓶頸

找出瓶頸

把應用劃分爲邏輯組件,之後對每個組件進行分析,深入到硬件層次(CPU、內存I/O、硬盤I/O、網絡I/O)

CPU:使用top查詢。

磁盤I/Oiostat –c 可以看到CPU因等待I/O操作完成而處於空閒狀態的百分比(iowait)iostat – dx查看更詳細的報告。

網絡I/Onetstat –i netstat –ieth0 –e

內存I/Ofree –m ,查看內存分配狀態。vmstat –S M 物理內存和虛擬內存的使用。ps axRSS爲駐留集(在主內存中)VSZ爲工作集(虛擬大小)。避免使用SWAP

數據庫:查詢優化、索引優化、緩存。

第九章   擴展Web應用程序

水平擴展:多機器的軟硬件最好是一致的,配置起來比較方便。

負載均衡DNS方式僵硬,硬件方式太貴,軟件方式靠譜。

擴展MySQL

MySQL的複製(主從、主主)。主從的大概機制,主數據庫向從數據庫發送binary log,從數據庫將受到的log寫入relay log,再按順序執行relay log。後面介紹了數據庫分區(縱向擴展)以及聯合(橫向擴展)

存儲擴展:

文件系統,當一個目錄有太多的文件時,基於inodeUnix文件查找會很慢,而新的文件系統Reisserext3解決了這個問題。RAID、聯合(GFSMogileFS)、緩存(memchachedSquid)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章