不論是電子商務網站,或是應用程式導向網站,甚至僅僅是企業形象網站,都有可能面臨種種效能的問題,iT邦小財神在這裡要募集各位邦友們的實戰經驗。
在你經手過的網站中,曾經發生過哪些狀況,讓你必須去調整網站效能的問題?你是從程式架構下手,還是調整硬體設備解決?還是有什麼更為精妙獨到的方法?
本題邀請的實戰專家是王建興先生,由他選出回答得最有參考價值、最精彩的「實戰王」,iT邦小財神將贈送1000元pchome線上購物金給這位獲選的最佳實戰經驗回答者。
另外,實戰專家也將挑選兩位認真回答的邦友,分別致贈IT書籍一本。
本題贈送的認真獎書籍是《ASP.NET AJAX應用剖析立即上手》(本次活動認真獎書籍由微軟贊助)。

本題最後回答時間訂於7/4(五),超過該日的回答均不列入評選名單。實戰專家將於7/6日選出「實戰王」,並公佈結果。
各位邦友們,快來亮出你們的實戰經驗吧~
我提供一些網站效能調校的經驗:
1.前端可採用 Squid 建置 Reverse Proxy Server 加速網站回應速度,且也能擴大每一台 Server 的網頁吞吐量(Throughput),不過網站的程式也需要送出適當的 HTTP Cache Header 跟 Reverse Proxy Server 做到充分搭配。
1.1. 流量大也可以架設多台 Reverse Proxy Server 分流,除了可以用 Squid 之外,也可用 Nginx Web Server 做 Load Balance 或許多其他的 Reverse Proxy Server。除了用 Reverse Proxy Server 之外,也可以採用 Cluster 架構架設 Load Balancing 環境,向這類 Load Balancing 的商業產品一大堆,例如: F5, A10, Cisco, ... 都有,但免費的也很多,例如 Linux Virtual Server。
2. 徹底分離「靜態頁面/檔案」與「動態網頁」,妥善運用主機資源(CPU,Memory),主機也是有講究專業分工的,將個別主機負責的工作切割可有效提高網頁吞吐量與運行效率:
2.1. 將靜態網頁/圖檔/Flash/JavaScript/CSS/...等,集中在特定幾台Web伺服器,這樣配置的主機資源利用率會更高,因為靜態頁面的CPU與Memory的資源消耗率低,純粹消耗頻寬而已,用專屬或小型的Web伺服器發送這些檔案可節省不少記憶體,且運作的效率也會比 Apache, IIS 這類多功能的 Web Server 來的效率還高,例如說:Nginx 或 TUX Web Server 或 Boa Webserver
2.2. 將動態網頁依照功能性與流量做水平分割或垂直分割,水平分割是指單一功能流量大,可採用 Load Balance 機制將主機負載分流,垂直分割是指依照單一服務拆分為多個子功能,每個功能配置獨立的主機專門提供此功能的相關資源運用與CPU運算。有個重點就是主機跟主機間、服務跟服務之間的關連性或耦合姓越低的話,網站架構的延展性(Scalability)越高,因為大型網站最需要的就是延展性,要讓網站經營突破甜蜜點(Sweet Point)時隨時可從 5 台主機擴充到 50 台而不用大幅修正網站架構與程式!
3. 適度的使用多層快取(Cache)機制,從最前端的 HTTP Client Cache, Reverse Proxy Server 到 Server-side Cache 機制都要妥善規劃,才能達到最佳效能。
4. 關連式資料庫的規劃架構尤其重要,除了可以採用叢集(Cluster)架構架設資料庫主機外,流量真的很大也可以採用資料庫分割的技巧,而資料庫分割技術也有分「水平分割」與「垂直分割」。
4.1. 水平分割只指將一個資料庫中的表格拆分在不同的資料庫主機中,以分散資料量、降低資料庫伺服器負擔。
4.2. 垂直分割就更複雜了,將「同一個表格的資料」拆分到不同資料庫伺服器中,這大概要到千萬流量才會用到這種架構吧,這時你可能要自行規劃演算法將資料拆分或資料搬移。
CPU 問題:檢查程式的寫法是否有改善的空間,或是因為網站的 Exception 問題太多、或是 GC (Garbage Collection) 執行過於頻繁所致。
Memory 問題:看是否是程式寫不好導致 Memory leak 的問題(通常是這樣),若無法再調校就加 RAM 吧,當然是越大越好摟,建議採用 64bits 的作業系統,對大量記憶體支援度較好。
使用 ApacheBench 進行網站的壓力測試
http://blog.miniasp.com/post/2008/06/Using-ApacheBench-ab-to-do-Web-stress-test.aspx
1. 把網站的流量分散到三台web server做load balance,可以處理大量的流量
2. 提供備援的功能,如果其中有一台web server掛掉或要停機維修,並不會影響網站運作
3. 因為這三台web server互相備援,所以不需要做RAID,可以省下一筆開銷
4. 保留擴充的彈性,如果未來網站流量增加,可以繼續在這個架構下增加web server!
5. 因為採用layer 4 switch,所以提供session管理的機制
另外網頁AP應加入cache機制,避免太頻繁的DB query,造成效能的瓶頸!
當時的想法是想要把網站擴散到其他的地區,像歐洲、亞洲,但是後來評估之後發現成本過高,並且有些設備重複投資,後續的維護成本超出預計。後來究暫時擱置。幾個月後我和幾家ISP的業務談到這件事,於是一個計劃開始浮出台面。
我公司的網站算是多層架構,第一層是WEB,第二層是AP server當時用的是Cold Fusion,後面才是DB。另外資料流的部份以FTP最多約佔70%,其次是靜態網頁約佔20%,最後是AP的流量大概2%,其餘的是送廣告郵件的流量。
最後的計畫是這樣,由一家ISP出面幫我們談其他地區的網站空間以及頻寬,這部分是放靜態網頁及FTP的DATA。同時ISP要負責F5的設備做全球的load balance。另一家ISP離公司比較近的就負責我們AP server的網站代管以及AP的頻寬。這樣建置下來,就只有AP server有硬體設備,其餘的設備都是租用的。全部真正在管的設備只有一個機櫃。而總頻寬由70Mb暴升到175Mb,但是費用一個月只有75萬,帳面上節省的看起來是25萬/月,但實際上是25萬+1個人力費用5萬+設備攤提約15萬+設備維護約4.5萬+多的頻寬費用。同時效益提升不只一倍。
雖然之後加薪等等讓自己高興了好一陣子,但是最值得高興的是這樣子的一個專案是我提出來並且完成的。
參考資料:對網路連線的認識.
為了存取資料的順暢,我將四台web server加入一個AD Domain中,可以避免透過nas架構讀取資料時候產生錯誤。也可以避免來自網域外的電腦不正常的存取資料。
第一二台伺服器上面使用的是 apache的web server可以執行php程式。而兩者則透過microsoft 的 NLB建立起Loading Balance架構也可以避免單點伺服器存取過量。
apache在windows下長時間執行時候會有記憶體無法正常釋放的問題,php程式會出現memory buffer錯誤的訊息。解決方法是在離峰時間讓不同的伺服器分別重新啟動。而因為有nlb的架構與cluster的架構搭配使用 基本上外部使用者感受不到伺服器的中斷。
apache在windows下執行的時候不像在 linux下有良好的 rotatelog機制,目前網路上面找到的幾個機制長時間執行時候都會發現記憶體一直鎖定沒有正常釋放。所以我就利用前項說明的重開機時間寫一個批次檔將現在執行的log檔案 move成為另外一個檔案。這樣可以避免伺服器上面的log檔暴增而使主機停止服務。
真正LOg的部份則透過Google Analytics的協助來分析流量。
這時候可以利用Apache的Reverse Proxy功能,做到第二層的軟體Load Balance,在伺服器上面建立多組的Apache Services然後透過 Load Balancer的功能分流給不同的Apache Session運作。 相關方法可以參考以下網址:
http://tinyurl.com/4ledkk於 2008-06-26 11:32:33 補充
回應 :
請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數
▼ 最近瀏覽記錄 ▼
相關問答
- Windows Sysinternals實戰經驗大募集,你有什麼精彩的應用經驗嗎?
- 拿PC當Server實戰經驗大募集,你有什麼精彩的應用經驗嗎?
- 資料庫效能調校實戰經驗大募集,你有什麼精彩的調校經驗嗎?
- 豐富網頁應用程式實戰經驗大募集,你有什麼精彩的開發經驗嗎?
- [IT實戰專家開講] Windows Sysinternals技巧大公開
- [活動快訊21] 「網路同樂會」統一發票推行及租稅宣導活動
- 對IT活動的建議
- [活動快訊22] DELL PowerEdge R805 虛擬伺服器贈獎活動
- 每日一問活動的目的是什麼
- [小財神有問題!]活動會不會再度掀起[分身風暴]?
- iT邦幫忙的新活動
- 拿百萬獎金的活動訊息
- [活動快訊20] 填問卷,硬碟帶著走
- 另一個抽電影票的活動:Technet系統管理日
- 每日一問的活動要如何領獎阿
- [活動快訊07]防禦企業終端、落實資訊安全管理
- 歡迎參加臺灣證券交易所ETF有獎徵答活動
- 【訊息快遞】DELL活動-看影片後回答問題,就有機會得到Wii
- [活動快訊19] 小喬被擄走了,能解救她的只有你了...










