基於Java技術的大型網站架構方案

來源:互聯網
上載者:User
Web層
  • 主體架構可以基於 Struts 1.X/2.X,當然有很多更好的控制層架構供選擇,以快速敏捷為準則吧。
  • 抽象出核心庫封裝 控制器和中介層 的操作。
  • 在大規模叢集環境下,session複製會引起嚴重的效能問題。考慮用 叢集緩衝 + cookie驗證 代替session實現許可權控制吧。
Cache層
  • 配置 Memcache 組成叢集緩衝
  • 對 Memcache 用戶端進行封裝
  • Memcached 節點群組成池,調用示意:opList (BizName, 策略 ...)
中介層

“中介層”可以理解為基於應用和資料之間的層次。它被設計用來為Web應用提供:資料緩衝 和 對應用透明的資料訪問——即應用不需要考慮資料表拆分的問題。以服務的方式提供對儲存層的高效能調用以及分散式運算。可供選擇的架構:

  • ICE
  • Hadoop
  • 直接基於Memcache開發(減少複雜度,推薦)
儲存

推薦MySQL,理由:免費,經過實踐檢驗,有大量成熟的案例、解決方案、支援人員。

  • 小規模:一個 data table 維護儲存伺服器陣列,內容 -> mount ……
  • 大規模:Master-Slave模式+MySQL Proxy,實現資料庫讀寫分離。在中介層的封裝下,可做如下擴充,以支援更大規模的資料存取:
    • 資料庫/表水平分割,例 User -> User33% + User33% + User34%
    • 資料庫/表垂直分割,例 User -> UserBaseInfo + UserAddrInfo

也可考慮使用 LongStore (龍存) 解決方案,由龍存管理存放裝置陣列……

部署
  • 劃分子網域名稱,每個子網域名稱一個Web應用程式套件,互不干擾
  • 靜態資源(css, js, image ...)使用專門的靜態伺服器
負載平衡

小規模:DNS輪詢。

大規模:F5, 2*X 台F5伺服器,F5是L4/L7層交換器,每台至少可處理200萬串連(與伺服器記憶體有關)。Ngnix是L7層交換,LVS負載平衡也是一種方案

Web中介軟體選擇

  • Tomcat - 最高400並發
  • Apache - 最高2000並發
  • Ngnix - 優於Apache

採用方案:Ngnix + Resin

,理由:

  1. Resin提供更為快速的servlet引擎 - 選擇Resin。
  2. gzip問題 - Resin在單獨處理gzip時存在記憶體溢出的隱患,因此要加一層 Ngnix。
  3. Ngnix 能減少單獨使用Resin時的記憶體佔用 - Resin建立1000個串連使用1000個線程;加Ngnix後,透過其“非同步串連”、“建立長串連”機制使Resin記憶體壓力大大減小。
  4. Ngnix 針對Linux系統有效能最佳化措施 - 0 Copy, send file ...
因此採用:1 Ngnix + 1 Resin,一對一。

靜態伺服器採用:Squid + Apache, why? because Squid has cache ability ...

新變化

- Nginx從0.7.48版本開始,支援了類似Squid的緩衝功能。這個緩衝是把URL及相關組合當作Key,用md5編碼雜湊後儲存在硬碟上,所以它可以支援任意URL連結,同時也支援 404/301/302 這樣的非200狀態代碼。雖然目前官方的Nginx Web快取服務只能為指定URL或狀態代碼設定到期時間,不支援類似Squid的PURGE指令,手動清除指定快取頁面面,但是,通過一個第三方的Nginx模組,可以清除指定URL的緩衝。

Nginx的Web快取服務主要由proxy_cache相關指令集和fastcgi_cache相關指令集構成,前者用於反向 Proxy時,對後端內容來源伺服器進行緩衝,後者主要用於對FastCGI的動態程式進行緩衝。兩者的功能基本上一樣。最新的Nginx 0.8.31版本,proxy_cache和fastcgi_cache已經比較完善,加上第三方的ngx_cache_purge模組(用於清除指定URL的緩衝),已經可以完全取代Squid。有的網站已經在生產環境使用了 Nginx 的 proxy_cache 緩衝功能超過兩個月,十分穩定,速度不遜於 Squid。在功能上,Nginx已經具備Squid所擁有的Web緩衝加速功能、清除指定URL緩衝的功能。而在效能上,Nginx對多核CPU的利用,勝過Squid不少。另外,在反向 Proxy、負載平衡、健全狀態檢查、後端伺服器容錯移轉、Rewrite重寫、易用性上,Nginx也比Squid強大得多。這使得一台Nginx可以同時作為"負載平衡伺服器"與"Web快取服務器"來使用。以下是配置片段供參考:http<br />{<br /> ...<br /> client_body_buffer_size 512k;<br /> proxy_connect_timeout 5;<br /> proxy_read_timeout 60;<br /> proxy_send_timeout 5;<br /> proxy_buffer_size 16k;<br /> proxy_buffers 4 64k;<br /> proxy_busy_buffers_size 128k;<br /> proxy_temp_file_write_size 128k;<br /> ...<br /> #註:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區<br /> proxy_temp_path /data0/proxy_temp_dir;<br /> #設定Web緩衝區名稱為cache_one,記憶體緩衝空間大小為200MB,1天清理一次緩衝,硬碟緩衝空間大小為30GB。<br /> proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;<br />}<br />server<br />{<br /> ...<br /> location /<br /> {<br /> #如果後端的伺服器返回502、504、執行逾時等錯誤,自動將請求轉寄到upstream負載平衡池中的另一台伺服器,實現容錯移轉。<br /> proxy_next_upstream http_502 http_504 error timeout invalid_header;<br /> proxy_cache cache_one;<br /> #對不同的HTTP狀態代碼設定不同的緩衝時間<br /> proxy_cache_valid 200 304 12h;<br /> proxy_cache_valid 301 302 1h;<br /> #以網域名稱、URI、參數組合成Web緩衝的Key值,Nginx根據Key值雜湊,儲存緩衝內容到二級緩衝目錄內<br /> proxy_cache_key $host$uri$is_args$args;<br /> proxy_set_header Host $host;<br /> proxy_set_header X-Forwarded-For $remote_addr;<br /> proxy_pass http://backend_server;<br /> expires 1d;<br /> }<br /> #用於清除緩衝,假設一個URL為http://192.168.1.44/test.txt,通過訪問http://192.168.4.44/purge/test.txt就可以清除該URL的緩衝。<br /> location ~ /purge(/.*)<br /> {<br /> #設定只允許指定的IP或IP段才可以清除URL緩衝。<br /> allow 127.0.0.1;<br /> allow 192.168.0.0/16;<br /> deny all;<br /> proxy_cache_purge cache_one $host$1$is_args$args;<br /> }<br /> #副檔名以.php、.jsp、.cgi結尾的Live App程式不緩衝。<br /> location ~ .*/.(php|jsp|cgi)?$<br /> {<br /> proxy_set_header Host $host;<br /> proxy_set_header X-Forwarded-For $remote_addr;<br /> proxy_pass http://backend_server;<br /> }<br />}
同時,對於影響頁面展現的靜態資源,例如:css, js 等可以放在具有優質頻寬的IDC(IDC=互連網資料中心,優質/高速的頻寬也比較貴,正所謂一份價錢一分貨);其他的靜態資源,片等可以放在價格相對低廉的IDC中,以網域名稱區分兩種靜態資源,節省每一分錢。網路拓撲圖

         / Ngnix - 1:1 - Resin

F5 --

         / Squid - 1:n - Apache

監控統計平台
  • 業務統計 - 使用者訪問統計
  • 軟體效能 - 應用系統監控,例如:請求回應時間……
  • 硬體/網路效能 - Ganglia監控
其它要點
  • IE瀏覽器對同一網域名稱(包括子網域名稱)只能建立2個串連,串連多了只能排隊……
  • 雙F5架構,兩台職能劃分不同,鏡像,心跳接管……
  • Raid存放裝置陣列……
  • Linux作業系統及其最佳化……

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.