iT邦幫忙

0

網站效能調校實戰經驗大募集,你有什麼精彩的調校經驗嗎?

不論是電子商務網站,或是應用程式導向網站,甚至僅僅是企業形象網站,都有可能面臨種種效能的問題,iT邦小財神在這裡要募集各位邦友們的實戰經驗。

在你經手過的網站中,曾經發生過哪些狀況,讓你必須去調整網站效能的問題?你是從程式架構下手,還是調整硬體設備解決?還是有什麼更為精妙獨到的方法?

本題邀請的實戰專家是王建興先生,由他選出回答得最有參考價值、最精彩的「實戰王」,iT邦小財神將贈送1000元pchome線上購物金給這位獲選的最佳實戰經驗回答者。

另外,實戰專家也將挑選兩位認真回答的邦友,分別致贈IT書籍一本。

本題贈送的認真獎書籍是《ASP.NET AJAX應用剖析立即上手》(本次活動認真獎書籍由微軟贊助)。

本題最後回答時間訂於7/4(五),超過該日的回答均不列入評選名單。實戰專家將於7/6日選出「實戰王」,並公佈結果。

各位邦友們,快來亮出你們的實戰經驗吧~

看更多先前的討論...收起先前的討論...
davistai iT邦大師 1 級 ‧ 2008-07-06 11:09:57 檢舉
恭喜Doggy大再度蟬聯寶座^_^
小財神 iT邦好手 1 級 ‧ 2008-07-06 12:40:12 檢舉
IT實戰經驗的第二戰實戰王決定!勝出者為再度蟬連的doggy,讓我們熱烈的拍拍手~

實理專家王建興認為doggy當選實戰王的原因是:

doggy所述及之技巧及方法,皆為實務上可提昇網站效能的方法,同時涵蓋了網站效能調校技巧的多個面向,包括了負載平衡、主機資源配置策略、多層次快取的運用、資料庫架構規劃等等,在所有回答者中最為完整。

恭禧doggy可以獲得1,000元的pchome線上購物的購物金,我們會以電子郵件和你聯絡領獎事誼。

另外,實戰專家也選出了兩位認真獎,得主分別是:

scottchen

haoming

將獲得《ASP.NET AJAX應用剖析立即上手》一本,也恭禧這兩位大大。
魯大 iT邦高手 1 級 ‧ 2008-07-06 19:31:15 檢舉
這一方面的經驗比較少
都是請廠商協助的
較沒有自己去思索去調校的
看來還真得跟各位大大學習
感謝各位大大的經驗分享...
jease iT邦研究生 1 級 ‧ 2008-07-07 13:28:40 檢舉
哇~Doggy大好厲害!連得2次it實戰王~恭喜喔!
doggy iT邦新手 2 級 ‧ 2008-07-13 16:19:08 檢舉
請問我到現在尚未得到 IThome 的領獎通知,請問是不是要等到整個活動結束才會一次通知呢?
doggy iT邦新手 2 級 ‧ 2008-07-13 16:19:46 檢舉
謝謝啦! ^_^
79
doggy
iT邦新手 2 級 ‧ 2008-06-24 11:13:56
最佳解答

我提供一些網站效能調校的經驗:

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

  1. 徹底分離「靜態頁面/檔案」與「動態網頁」,妥善運用主機資源(CPU,Memory),主機也是有講究專業分工的,將個別主機負責的工作切割可有效提高網頁吞吐量與運行效率:

2.1. 將靜態網頁/圖檔/Flash/JavaScript/CSS/...等,集中在特定幾台Web伺服器,這樣配置的主機資源利用率會更高,因為靜態頁面的CPU與Memory的資源消耗率低,純粹消耗頻寬而已,用專屬或小型的Web伺服器發送這些檔案可節省不少記憶體,且運作的效率也會比 Apache, IIS 這類多功能的 Web Server 來的效率還高,例如說:NginxTUX Web ServerBoa Webserver

2.2. 將動態網頁依照功能性與流量做水平分割或垂直分割,水平分割是指單一功能流量大,可採用 Load Balance 機制將主機負載分流,垂直分割是指依照單一服務拆分為多個子功能,每個功能配置獨立的主機專門提供此功能的相關資源運用與CPU運算。有個重點就是主機跟主機間、服務跟服務之間的關連性或耦合姓越低的話,網站架構的延展性(Scalability)越高,因為大型網站最需要的就是延展性,要讓網站經營突破甜蜜點(Sweet Point)時隨時可從 5 台主機擴充到 50 台而不用大幅修正網站架構與程式!

  1. 適度的使用多層快取(Cache)機制,從最前端的 HTTP Client Cache, Reverse Proxy Server 到 Server-side Cache 機制都要妥善規劃,才能達到最佳效能。

  2. 關連式資料庫的規劃架構尤其重要,除了可以採用叢集(Cluster)架構架設資料庫主機外,流量真的很大也可以採用資料庫分割的技巧,而資料庫分割技術也有分「水平分割」與「垂直分割」。

4.1. 水平分割只指將一個資料庫中的表格拆分在不同的資料庫主機中,以分散資料量、降低資料庫伺服器負擔。

4.2. 垂直分割就更複雜了,將「同一個表格的資料」拆分到不同資料庫伺服器中,這大概要到千萬流量才會用到這種架構吧,這時你可能要自行規劃演算法將資料拆分或資料搬移。

70
灌籃高手
iT邦高手 1 級 ‧ 2008-06-23 17:17:48

提供一個實務上的網站架構,前端用一台Layer 4 switch,後面接三台web server,之後再接一台DB,這個架構有下列的好處:

  1. 把網站的流量分散到三台web server做load balance,可以處理大量的流量
  2. 提供備援的功能,如果其中有一台web server掛掉或要停機維修,並不會影響網站運作
  3. 因為這三台web server互相備援,所以不需要做RAID,可以省下一筆開銷
  4. 保留擴充的彈性,如果未來網站流量增加,可以繼續在這個架構下增加web server!
  5. 因為採用layer 4 switch,所以提供session管理的機制

另外網頁AP應加入cache機制,避免太頻繁的DB query,造成效能的瓶頸!

64
vincent118
iT邦高手 5 級 ‧ 2008-06-25 15:00:17

多年前公司的商業網站是放在美國的某一個ISP,當時那個網站主要是負責產品資訊、試用下載、使用者註冊以及少少的網路購物。那個時候租用了4個機櫃空間,以及大約70Mb的頻寬。由於每個月的費用將近100萬台幣,同時頻寬也不夠用,算算要升級頻寬每個月要150萬,還看不到效益。主要原因是公司是一個國際上小有知名的公司,使用者遍及全球,光靠美國一地的網路不足以支撐全球存取的需求。
當時的想法是想要把網站擴散到其他的地區,像歐洲、亞洲,但是後來評估之後發現成本過高,並且有些設備重複投資,後續的維護成本超出預計。後來究暫時擱置。幾個月後我和幾家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萬+多的頻寬費用。同時效益提升不只一倍。
雖然之後加薪等等讓自己高興了好一陣子,但是最值得高興的是這樣子的一個專案是我提出來並且完成的。

34
macosorawate
iT邦新手 2 級 ‧ 2008-06-25 16:27:18

把網站的網路連線全部換掉.使用傳統的網路電纜連線.再接一台新型網路調整流量的寬頻分享器.這可以加高每部電腦的網路使用量.一般平均計算.再加高網路設備.請參考.WATER.0911115854.( macosorawater@pchome.com.tw ). http://www.macosorawater.pchome.com.tw .小禮.Thanks. 11111111 .

54
haoming
iT邦好手 1 級 ‧ 2008-06-26 00:02:32

我的web server總共有四部windows 2003架設的,但是是在上面架設apache. 資料是透過NAS放在第三、四台SERVER作成的cluster架構,確保資料放置資料的伺服器任何一台故障的時候伺服器仍然能夠正常運作。
為了存取資料的順暢,我將四台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的協助來分析流量。

使用Google Analytics時如果user把javascript關掉,或者在firefox裝noscript之類的addon,就會讓流量統計有誤差,另外美國跟台灣有時差,所以統計日期也會有一些誤差

tibandyli iT邦新手 2 級 ‧ 2009-08-11 10:56:33 檢舉

既然有nas,
有沒有可能將log也到nas,
就可以利用AWstatus進行分析了…

我要發表回答

立即登入回答