Wednesday, May 13, 2009

Building Scalable Web sites

More about Building Scalable Web Sites

又看完一本 O'REILLY 的書! 之前在開始做final year project時買的。當時看了一部份後覺得沒有什麼得著,便一直擱在書架上。

但如果真是有心開發一個大型的web application的話,這本書就能派上用場了。

第2章介紹了怎樣選擇hardware platform,要自己setup一套server還是租用別人的server?還有networking的基本concept都說到了。

第3章介紹了一些source control的軟件如cvs,subversion等等,用這些軟件來記錄一個文字檔改了什麼內容,何時改的,什麼人改的等等,必要時還可rollback回之前的狀態!實在太強了,final year project時下載了subversion來用,但完全不知道怎麼弄,最後因時間關係放棄了,現在可以慢慢研究吧。之後介紹了寫program的環境,意思是要有一個server或pc當作debug和測試用,再加上一個staging的server或pc作真實data的測試用,最後就是有一個server或pc作production server,真真正正地user用。之後介紹了一些記錄bug的軟件如bugzilla,request tracker等等,還介紹了他們的好處和壞處。最後提了一下coding standards和testing。

第4章介紹了unicode的概念和歷史,什麼是internationalization 和 localization,對著那些 00 x EF 之類的東東真令人頭痛,算是勉強看完那部份吧。還說有人會放不完整的unicode字碼進web application裡(打message或用blogger的template之類的)使連帶的javascript code 蒙混過關,只是一句alert("hello world")已經可以使別人的web application信用破產了orz

第5章是說怎樣保護web app不受用戶的惡意coding影響,如過濾不完整的unicode字碼,或control characters 如空格,"~"等等,還有html tag也要過濾,免得別人使用xss來使你的html code不完整或加上惡意的javascript code(可以拿到用戶的cookies!超恐怖!)最後是怎樣防範 mysql的injection attack,原來只要設定一下mysql的用戶權限就可以了,還可以用一些escape data 的function如addslashes,intval等等來清潔一下user input。

第6章是email,介紹email的格式和原理,還有怎麼拿到格式內的資料,怎樣過濾附件和記下有問題的email用家。這章本是final year project 用來加email function進去的......但時間實在不太多,放棄看了。

第7章是remote service,沒看,暫時應該沒有用處。

第8,9章是全書的重頭戲,介紹加hardware的原則,怎樣辨認bottleneck,還說一開始就把自己認為是bottleneck的地方優化是沒有用的,因為往往問題不是在那裡發生。用linux的command line就可以看到硬碟的讀寫數和network的程況,怎樣優化database的query和找出mysql的statistics,最後介紹了caching的概念,把database的資料放在ram裡然後供user讀取,效率會大大提升!開始有點明白hkepc的老屎忽programmer在想些什麼了。

第9章說了各類型的load balancer,分別有dns load balancing ,layer 4 和 layer 7的做法,3種都是完全不同的作法。重頭戲就是mysql replication,怎樣把資料有效地複製到各server,提升服務質素呢?,原來mysql可以行master/slave製式,一部server是master,只有master設定為可以read/write,slave只可以read,那你的web app就有雙倍的read效能了,實在太強大了!我從沒這樣想過呢。此外還可以使用各種raid模式加快搜尋mysql內的record,甚至一個database server只有一個table,然後用network的方法讀取各table的資料!但當有join table的操作時就會變得麻煩起來......

第10章介紹了怎麼監控各server,介紹了一堆軟件如rddtool,ganglia等等。介紹了一些可顯示mysql statistics的command 如show slave status,show processlist之類,還有cache的statistics,最後介紹了幾種alert的概念,如threshold checks,即是在硬碟到達了一定容量時會發出alert(例如用了80%的空間)

最後一章介紹了當function也develop得差不多的時候,便可以將一部份的function打包,以api的形式發放給公眾使用,但隨之而來的便是敏感資料流出的危機引申至user authentication 的問題和相應的解決方法。介紹了rss的歷史,格式和大概的用法。還有api有使用ajax的時候應限制request次數的方法也說到了。

非常有用的一本書,開發大型web application必看的書籍。

No comments: