㈠ 澶у瀷緗戠珯鏁版嵁搴撶郴緇燂紝鎬庝箞榪炴帴閭d箞澶氬苟鍙戞暟閲忕殑
鎸夋垜涓浜虹粡楠屾湁浠ヤ笅鍑犵嶆柟娉曪細1.鍦ㄨ繛鎺ユ暟鎹搴撶殑鏃跺欏彲浠ヤ紭鍖栵紝浣跨敤榪炴帴奼犮備富瑕佸氨鏄涓嶈侀戠箒鍦板壋寤猴紝閿姣佽繛鎺ャ傝繖鏄寰堣垂鏃剁殑涓涓鎿嶄綔銆傚洜姝わ紝浣跨敤榪炴帴奼犳潵浠f浛鏅閫氱殑寤虹珛榪炴帴鎿嶄綔錛岃兘鎻愰珮騫跺彂搴︺2. 浣跨敤緙撳瓨鎶鏈銆傚苟涓嶆槸姣忔¢兘闇瑕佸幓鏁版嵁搴撻噷闈㈡煡璇㈢殑錛屾垜浠鍏跺疄鍙浠ユ妸鍓嶄竴嬈$殑鏌ヨ㈢粨鏋滄斁鍦ㄥ唴瀛橀噷錛屽傛灉涓嬩竴嬈$敤鎴鋒潵鏌ヨ㈢浉鍚岀殑鍐呭癸紝鐩存帴鍐呭瓨榪斿洖鍗沖彲錛屼笉闇瑕佸啀嬈℃煡璇銆傝繖鏍峰彲浠ュぇ澶ч檷浣庢煡璇㈤戠巼銆3.浣跨敤鍒嗗竷寮忔妧鏈錛屽皢鏁版嵁搴撳垎甯冨湪澶氬彴鏈嶅姟鍣ㄤ笂錛屽悓鏃朵篃灝嗙敤鎴峰垎鍖猴紙濡傛牴鎹鐢ㄦ埛ID鐨勫搱甯屽煎垎鍖猴級錛屼笉鍚岀殑鏈嶅姟鍣ㄨ礋璐d笉鍚岀敤鎴風兢錛岃繖鏍峰氨鑳藉ぇ澶у噺灝戝崟鍙版湇鍔″櫒鐨勮礋杞斤紝浣垮緱鏁翠綋鐨勫悶鍚愰噺鎻愰珮銆傝繖鍑犳牱鎶鏈鍙浠ュ悓鏃朵嬌鐢錛屼綘鐨勫苟鍙戞暟閲忓皢鑾峰緱闈炲父澶х殑鎻愰珮銆
㈡ java 怎樣處理高並發
一、背景綜述
並發就是可以使用多個線程或進程,同時處理(就是並發)不同的操作。
高並發的時候就是有很多用戶在訪問,導致系統數據不正確、糗事數據的現象。對於一些大型網站,比如門戶網站,在面對大量用戶訪問、高並發請求方面,基本的解決方案集中在這樣幾個環節:使用高性能的伺服器、高性能的資料庫、高效率的編程語言、還有高性能的Web容器。這幾個解決思路在一定程度上意味著更大的投入。
使用一般的synchronized或者是lock或者是隊列都是無法滿足高並發的問題。
二、解決方法有三:
1.使用緩存
2.使用生成靜態頁面
html純靜態頁面是效率最高、消耗最小的頁面。我們可以使用信息發布系統來實現簡單的信息錄入自動生成靜態頁面,頻道管理、許可權管理和自動抓取等功能,對於一個大型網站來說,擁有一套高效、可管理的信息發布系統CMS是必不可少的。
3.圖片伺服器分離
圖片是最消耗資源的,僵圖片和頁面分離可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為圖片問題而崩潰。
3.寫代碼的時候減少不必要的資源浪費:
不要頻繁得使用new對象,對於在整個應用中只需要存在一個實例的類使用單例模式.對於String的連接操作,使用StringBuffer或者StringBuilder.對於utility類型的類通過靜態方法來訪問。
避免使用錯誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayList比Vector性能好。)
使用線程安全的集合對象vector hashtable
使用線程池
㈢ 如何優化網站高並發訪問
解決高並發訪問,或者說改善,提高一點思路:
1.使用Squid或者Varnish做緩存代理,將經常訪問的圖片等靜態內容緩存起來,提高訪問速度;
2.使用CDN內容分發網路,減少主伺服器的壓力(附CDN相關內容:CDN通過在網路各處放置節點伺服器所構成的在現有的互聯網基礎之上的一層智能虛擬網路,CDN系統能夠實時地根據網路流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近);
3.使用LVS伺服器負載均衡,LVS伺服器結合Keepalived做高可用;
4.LVS下面還可跟Nginx做負載均衡,再次分擔壓力,比如淘寶使用的再Nginx基礎上改進的Tnginx。
5.DNS伺服器上也可下功夫,比如做高級視圖等等,這樣可以解決不同網段訪問Web伺服器的速度問題;
6.最大的瓶頸還是在IO上,比如存儲IO,比如資料庫的IO。存儲一方面需要保證數據不丟失,另一方面需要保證性能,比如做RAID、LVM;存儲還需要考慮使用一套存儲之間的數據同步(GFS、OCFS可以實現),數據的備份等等;資料庫的話可以考慮使用查詢緩存等等,這塊我也正在學習中,展開有很多東西;
7.程序的話也可以優化,比如如果是Java Web程序,並且使用了Hibernate框架,就可以考慮使用查詢緩存了;
8.硬體層:比如提高帶寬,購買高轉數性能好的硬碟等等;
9.緩存機制,緩存機制的種類很多,有頁面緩存(Squid),數據緩存(memcache),查詢緩存,編譯緩存(PHP是腳本語言在編譯時有編譯緩存).
10.資料庫IO是最大問題,所以現在又了NOSQL的解決方案,首先將數據寫入內存中,然後定時寫入硬碟
11.程序優化,增加執行效率,用更好的演算法等等。(採用分層,因為每個程序擅長處不一樣,比如JAVA適合做中間層,C++做底層,現在又流行一種node.js做中間層,可以加強執行效率,多線程,以及一些安全問題)
12.隊列系統,有些數據不要一來就馬上處理,做個隊列(先進先出),延遲處理。
㈣ c#鍙浠ヤ粠鍝鍑犱釜鏂歸潰鎻愬崌澶у瀷緗戠珯鐨勫苟鍙戣塊棶鎬ц兘
棣栧厛鎺掗櫎闀滃儚cdn榪欑嶇墿鐞嗗竷灞鐨勯棶棰.....
鎴戜滑鍙璋堢綉絝欐湰韜鐨勫苟鍙戞
1閲囩敤絎涓夋柟緙撳瓨, asp.net鑷甯︾紦瀛樻柟妗堝叾瀹炲凡緇忚凍澶熷己澶,浣嗘槸鍩烘湰涓婃垜瑙佽繃鐨勫ぇ鍨嬬綉絝.net閮介噰鐢ㄤ簡絎涓夋柟緙撳瓨瑙e喅鏂規.鎴戣や負鑷韜鐨勭紦瀛樻柟妗堝叾瀹炶凍澶,鍙鏄姣旇緝綣佺悙,涓嶉傚簲澶氫漢鍏卞悓緇存姢.
2閲囩敤鍥烘佺‖鐩樻浛浠f満姊扮‖鐩.鏃犺烘槸web緗戠珯鏈嶅姟鍣,榪樻槸鏁版嵁搴撴湇鍔″櫒,鎬ц兘鎻愬崌闈炲父鏄庢樉!
3閲囩敤64浣嶇殑鏈嶅姟鍣ㄧ郴緇熶唬鏇32浣.
榪欎笉鏄榪蜂俊643浣,鑰屾槸鍥犱負64浣嶇殑榪涚▼涓8g鍐呭瓨鍙浠ュ垎閰嶅湪1涓榪涚▼鐨1涓囦釜綰跨▼涓.....................鐩告瘮涔嬩笅,32浣嶇殑鏈嶅姟鍣ㄧ郴緇,渚嬪倃indows2003(鍥藉唴甯歌),瀹冪殑榪涚▼鍙鏈塵ax綰跨▼鏁2000+.
4iis璇風敤楂樼増鏈(鍏跺疄灝辨槸鏈鏂扮殑win鏈嶅姟鍣),浣庣増鏈琲is褰撳唴瀛樺崰鐢ㄨ秴榪1g涔嬪悗,鎬ц兘涓嬮檷闈炲父鍘夊.姣斿俰is5 6
5鍏跺疄鍙鏄涓婇潰絎2鐐圭殑琛ュ厖,濡傛灉鏈夊彲鑳,鎶婄綉絝檞eb鏈嶅姟鍣ㄥ垎鎷,鎶婄綉絝欑殑鏁版嵁搴撴湇鍔″櫒鍒嗘媶.
鍏朵腑web鏈嶅姟鍣ㄥ垎涓,"鍒嗗彂鏈嶅姟鍣,韜浠介獙璇佹湇鍔″櫒,鍏蜂綋浜嬪姟澶勭悊鏈嶅姟鍣"絳夌瓑,浠ヤ笂閮藉彲浠ュ湪姝ょ粏鍒.姣斿傝韓浠介獙璇佺殑鏈嶅姟鍣,榪樺彲浠ユ牴鎹甶d,榪涜屽垝鍒.
6鏁版嵁搴撲腑鐨勬棩蹇楁湇鍔″櫒,鍜屾暟鎹鏈嶅姟鍣ㄤ篃鍦ㄧ墿鐞嗕笂鍒嗗紑.
㈤ 如何解決高並發問題
使用高性能的伺服器、高性能的資料庫、高效率的編程語言、還有高性能的Web容器,(對架構分層+負載均衡+集群)這幾個解決思路在一定程度上意味著更大的投入。
1、高並發:在同一個時間點,有大量的客戶來訪問我們的網站,如果訪問量過大,就可能造成網站癱瘓。
2、高流量:當網站大後,有大量的圖片,視頻,這樣就會對流量要求高,需要更多更大的帶寬。
3、大存儲:可能對數據保存和查詢出現問題。
解決方案:
1、提高硬體能力、增加系統伺服器。(當伺服器增加到某個程度的時候系統所能提供的並發訪問量幾乎不變,所以不能根本解決問題)
2、本地緩存:本地可以使用JDK自帶的Map、Guava Cache.分布式緩存:Redis、Memcache.本地緩存不適用於提高系統並發量,一般是用處用在程序中。
Spiring把已經初始過的變數放在一個Map中,下次再要使用這個變數的時候,先判斷Map中有沒有,這也就是系統中常見的單例模式的實現。
㈥ 騫跺彂鐨勫苟鍙戝勭悊
涓涓灝忓瀷鐨勭綉絝欙紝姣斿備釜浜虹綉絝欙紝鍙浠ヤ嬌鐢ㄦ渶綆鍗曠殑html闈欐侀〉闈㈠氨瀹炵幇浜嗭紝閰嶅悎涓浜涘浘鐗囪揪鍒扮編鍖栨晥鏋滐紝鎵鏈夌殑欏甸潰鍧囧瓨鏀懼湪涓涓鐩褰曚笅錛岃繖鏍風殑緗戠珯瀵圭郴緇熸灦鏋勩佹ц兘鐨勮佹眰閮藉緢綆鍗曪紝闅忕潃浜掕仈緗戜笟鍔$殑涓嶆柇涓板瘜錛岀綉絝欑浉鍏崇殑鎶鏈緇忚繃榪欎簺騫寸殑鍙戝睍錛屽凡緇忕粏鍒嗗埌寰堢粏鐨勬柟鏂歸潰闈錛屽挨鍏跺逛簬澶у瀷緗戠珯鏉ヨ達紝鎵閲囩敤鐨勬妧鏈鏇存槸娑夊強闈㈤潪甯稿箍錛屼粠紜浠跺埌杞浠躲佺紪紼嬭璦銆佹暟鎹搴撱乄ebServer銆侀槻鐏澧欑瓑鍚勪釜棰嗗煙閮芥湁浜嗗緢楂樼殑瑕佹眰錛屽凡緇忎笉鏄鍘熸潵綆鍗曠殑html闈欐佺綉絝欐墍鑳芥瘮鎷熺殑銆
澶у瀷緗戠珯錛屾瘮濡傞棬鎴風綉絝欍傚湪闈㈠瑰ぇ閲忕敤鎴瘋塊棶銆侀珮騫跺彂璇鋒眰鏂歸潰錛屽熀鏈鐨勮В鍐蟲柟妗堥泦涓鍦ㄨ繖鏍峰嚑涓鐜鑺傦細浣跨敤楂樻ц兘鐨勬湇鍔″櫒銆侀珮鎬ц兘鐨勬暟鎹搴撱侀珮鏁堢巼鐨勭紪紼嬭璦銆佽繕鏈夐珮鎬ц兘鐨刉eb瀹瑰櫒銆備絾鏄闄や簡榪欏嚑涓鏂歸潰錛岃繕娌℃硶鏍規湰瑙e喅澶у瀷緗戠珯闈涓寸殑楂樿礋杞藉拰楂樺苟鍙戦棶棰樸
涓婇潰鎻愪緵鐨勫嚑涓瑙e喅鎬濊礬鍦ㄤ竴瀹氱▼搴︿笂涔熸剰鍛崇潃鏇村ぇ鐨勬姇鍏ワ紝騫朵笖榪欐牱鐨勮В鍐蟲濊礬鍏峰囩摱棰堬紝娌℃湁寰堝ソ鐨勬墿灞曟э紝涓嬮潰鎴戜粠浣庢垚鏈銆侀珮鎬ц兘鍜岄珮鎵╁紶鎬х殑瑙掑害鏉ヨ磋存垜鐨勪竴浜涚粡楠屻 鍏跺疄澶у墮兘鐭ラ亾錛屾晥鐜囨渶楂樸佹秷鑰楁渶灝忕殑灝辨槸綰闈欐佸寲鐨刪tml欏甸潰錛屾墍浠ユ垜浠灝藉彲鑳戒嬌鎴戜滑鐨勭綉絝欎笂鐨勯〉闈㈤噰鐢ㄩ潤鎬侀〉闈㈡潵瀹炵幇錛岃繖涓鏈綆鍗曠殑鏂規硶鍏跺疄涔熸槸鏈鏈夋晥鐨勬柟娉曘備絾鏄瀵逛簬澶ч噺鍐呭瑰苟涓旈戠箒鏇存柊鐨勭綉絝欙紝鎴戜滑鏃犳硶鍏ㄩ儴鎵嬪姩鍘繪尐涓瀹炵幇錛屼簬鏄鍑虹幇浜嗘垜浠甯歌佺殑淇℃伅鍙戝竷緋葷粺CMS錛屽儚鎴戜滑甯歌塊棶鐨勫悇涓闂ㄦ埛絝欑偣鐨勬柊闂婚戦亾錛岀敋鑷充粬浠鐨勫叾浠栭戦亾錛岄兘鏄閫氳繃淇℃伅鍙戝竷緋葷粺鏉ョ$悊鍜屽疄鐜扮殑錛屼俊鎮鍙戝竷緋葷粺鍙浠ュ疄鐜版渶綆鍗曠殑淇℃伅褰曞叆鑷鍔ㄧ敓鎴愰潤鎬侀〉闈錛岃繕鑳藉叿澶囬戦亾綆$悊銆佹潈闄愮$悊銆佽嚜鍔ㄦ姄鍙栫瓑鍔熻兘錛屽逛簬涓涓澶у瀷緗戠珯鏉ヨ達紝鎷ユ湁涓濂楅珮鏁堛佸彲綆$悊鐨凜MS鏄蹇呬笉鍙灝戠殑銆
闄や簡闂ㄦ埛鍜屼俊鎮鍙戝竷綾誨瀷鐨勭綉絝欙紝瀵逛簬浜や簰鎬ц佹眰寰堥珮鐨勭ぞ鍖虹被鍨嬬綉絝欐潵璇達紝灝藉彲鑳界殑闈欐佸寲涔熸槸鎻愰珮鎬ц兘鐨勫繀瑕佹墜孌碉紝灝嗙ぞ鍖哄唴鐨勫笘瀛愩佹枃絝犺繘琛屽疄鏃剁殑闈欐佸寲錛屾湁鏇存柊鐨勬椂鍊欏啀閲嶆柊闈欐佸寲涔熸槸澶ч噺浣跨敤鐨勭瓥鐣ワ紝鍍廙op鐨勫ぇ鏉傜儵灝辨槸浣跨敤浜嗚繖鏍風殑絳栫暐錛岀綉鏄撶ぞ鍖虹瓑涔熸槸濡傛ゃ
鍚屾椂錛宧tml闈欐佸寲涔熸槸鏌愪簺緙撳瓨絳栫暐浣跨敤鐨勬墜孌碉紝瀵逛簬緋葷粺涓棰戠箒浣跨敤鏁版嵁搴撴煡璇浣嗘槸鍐呭規洿鏂板緢灝忕殑搴旂敤錛屽彲浠ヨ冭檻浣跨敤html闈欐佸寲鏉ュ疄鐜幫紝姣斿傝哄潧涓璁哄潧鐨勫叕鐢ㄨ劇疆淇℃伅錛岃繖浜涗俊鎮鐩鍓嶇殑涓繪祦璁哄潧閮藉彲浠ヨ繘琛屽悗鍙扮$悊騫朵笖瀛樺偍鍐嶆暟鎹搴撲腑錛岃繖浜涗俊鎮鍏跺疄澶ч噺琚鍓嶅彴紼嬪簭璋冪敤錛屼絾鏄鏇存柊棰戠巼寰堝皬錛屽彲浠ヨ冭檻灝嗚繖閮ㄥ垎鍐呭硅繘琛屽悗鍙版洿鏂扮殑鏃跺欒繘琛岄潤鎬佸寲錛岃繖鏍烽伩鍏嶄簡澶ч噺鐨勬暟鎹搴撹塊棶璇鋒眰銆 澶у瀷緗戠珯閮芥湁澶嶆潅鐨勫簲鐢錛岃繖浜涘簲鐢ㄥ繀欏諱嬌鐢ㄦ暟鎹搴擄紝閭d箞鍦ㄩ潰瀵瑰ぇ閲忚塊棶鐨勬椂鍊欙紝鏁版嵁搴撶殑鐡墮堝緢蹇灝辮兘鏄劇幇鍑烘潵錛岃繖鏃朵竴鍙版暟鎹搴撳皢寰堝揩鏃犳硶婊¤凍搴旂敤錛屼簬鏄鎴戜滑闇瑕佷嬌鐢ㄦ暟鎹搴撻泦緹ゆ垨鑰呭簱琛ㄦ暎鍒椼
鍦ㄦ暟鎹搴撻泦緹ゆ柟闈錛屽緢澶氭暟鎹搴撻兘鏈夎嚜宸辯殑瑙e喅鏂規堬紝Oracle銆丼ybase絳夐兘鏈夊緢濂界殑鏂規堬紝甯哥敤鐨凪ySQL鎻愪緵鐨凪aster/Slave涔熸槸綾諱技鐨勬柟妗堬紝鎮ㄤ嬌鐢ㄤ簡浠涔堟牱鐨凞B錛屽氨鍙傝冪浉搴旂殑瑙e喅鏂規堟潵瀹炴柦鍗沖彲銆
涓婇潰鎻愬埌鐨勬暟鎹搴撻泦緹ょ敱浜庡湪鏋舵瀯銆佹垚鏈銆佹墿寮犳ф柟闈㈤兘浼氬彈鍒版墍閲囩敤DB綾誨瀷鐨勯檺鍒訛紝浜庢槸鎴戜滑闇瑕佷粠搴旂敤紼嬪簭鐨勮掑害鏉ヨ冭檻鏀瑰杽緋葷粺鏋舵瀯錛屽簱琛ㄦ暎鍒楁槸甯哥敤騫朵笖鏈鏈夋晥鐨勮В鍐蟲柟妗堛傛垜浠鍦ㄥ簲鐢ㄧ▼搴忎腑瀹夎呬笟鍔″拰搴旂敤鎴栬呭姛鑳芥ā鍧楀皢鏁版嵁搴撹繘琛屽垎紱伙紝涓嶅悓鐨勬ā鍧楀瑰簲涓嶅悓鐨勬暟鎹搴撴垨鑰呰〃錛屽啀鎸夌収涓瀹氱殑絳栫暐瀵規煇涓欏甸潰鎴栬呭姛鑳借繘琛屾洿灝忕殑鏁版嵁搴撴暎鍒楋紝姣斿傜敤鎴瘋〃錛屾寜鐓х敤鎴稩D榪涜岃〃鏁e垪錛岃繖鏍峰氨鑳藉熶綆鎴愭湰鐨勬彁鍗囩郴緇熺殑鎬ц兘騫朵笖鏈夊緢濂界殑鎵╁睍鎬с俿ohu鐨勮哄潧灝辨槸閲囩敤浜嗚繖鏍風殑鏋舵瀯錛屽皢璁哄潧鐨勭敤鎴楓佽劇疆銆佸笘瀛愮瓑淇℃伅榪涜屾暟鎹搴撳垎紱伙紝鐒跺悗瀵瑰笘瀛愩佺敤鎴鋒寜鐓ф澘鍧楀拰ID榪涜屾暎鍒楁暟鎹搴撳拰琛錛屾渶緇堝彲浠ュ湪閰嶇疆鏂囦歡涓榪涜岀畝鍗曠殑閰嶇疆渚胯兘璁╃郴緇熼殢鏃跺炲姞涓鍙頒綆鎴愭湰鐨勬暟鎹搴撹繘鏉ヨˉ鍏呯郴緇熸ц兘銆 緙撳瓨涓璇嶆悶鎶鏈鐨勯兘鎺ヨЕ榪囷紝寰堝氬湴鏂圭敤鍒扮紦瀛樸傜綉絝欐灦鏋勫拰緗戠珯寮鍙戜腑鐨勭紦瀛樹篃鏄闈炲父閲嶈併傝繖閲屽厛璁茶堪鏈鍩烘湰鐨勪袱縐嶇紦瀛樸傞珮綰у拰鍒嗗竷寮忕殑緙撳瓨鍦ㄥ悗闈㈣茶堪銆
鏋舵瀯鏂歸潰鐨勭紦瀛橈紝瀵笰pache姣旇緝鐔熸倝鐨勪漢閮借兘鐭ラ亾Apache鎻愪緵浜嗚嚜宸辯殑緙撳瓨妯″潡錛屼篃鍙浠ヤ嬌鐢ㄥ栧姞鐨凷quid妯″潡榪涜岀紦瀛橈紝榪欎袱縐嶆柟寮忓潎鍙浠ユ湁鏁堢殑鎻愰珮Apache鐨勮塊棶鍝嶅簲鑳藉姏銆
緗戠珯紼嬪簭寮鍙戞柟闈㈢殑緙撳瓨錛孡inux涓婃彁渚涚殑Memory Cache鏄甯哥敤鐨勭紦瀛樻帴鍙o紝鍙浠ュ湪web寮鍙戜腑浣跨敤錛屾瘮濡傜敤Java寮鍙戠殑鏃跺欏氨鍙浠ヨ皟鐢∕emoryCache瀵逛竴浜涙暟鎹榪涜岀紦瀛樺拰閫氳鍏變韓錛屼竴浜涘ぇ鍨嬬ぞ鍖轟嬌鐢ㄤ簡榪欐牱鐨勬灦鏋勩傚彟澶栵紝鍦ㄤ嬌鐢╳eb璇璦寮鍙戠殑鏃跺欙紝鍚勭嶈璦鍩烘湰閮芥湁鑷宸辯殑緙撳瓨妯″潡鍜屾柟娉曪紝PHP鏈塒ear鐨凜ache妯″潡錛孞ava灝辨洿澶氫簡錛.net涓嶆槸寰堢啛鎮夛紝鐩鎬俊涔熻偗瀹氭湁銆 璐熻澆鍧囪灝嗘槸澶у瀷緗戠珯瑙e喅楂樿礋鑽瘋塊棶鍜屽ぇ閲忓苟鍙戣鋒眰閲囩敤鐨勭粓鏋佽В鍐沖姙娉曘
璐熻澆鍧囪鎶鏈鍙戝睍浜嗗氬勾錛屾湁寰堝氫笓涓氱殑鏈嶅姟鎻愪緵鍟嗗拰浜у搧鍙浠ラ夋嫨錛屾垜涓浜烘帴瑙﹁繃涓浜涜В鍐蟲柟娉曪紝鍏朵腑鏈変袱涓鏋舵瀯鍙浠ョ粰澶у跺仛鍙傝冦
1.杞浠跺洓灞備氦鎹
澶у剁煡閬撲簡紜浠跺洓灞備氦鎹㈡満鐨勫師鐞嗗悗錛屽熀浜嶰SI妯″瀷鏉ュ疄鐜扮殑杞浠跺洓灞備氦鎹涔熷氨搴旇繍鑰岀敓錛岃繖鏍風殑瑙e喅鏂規堝疄鐜扮殑鍘熺悊涓鑷達紝涓嶈繃鎬ц兘紼嶅樊銆備絾鏄婊¤凍涓瀹氶噺鐨勫帇鍔涜繕鏄娓稿垉鏈変綑鐨勶紝鏈変漢璇磋蔣浠跺疄鐜版柟寮忓叾瀹炴洿鐏墊椿錛屽勭悊鑳藉姏瀹屽叏鐪嬩綘閰嶇疆鐨勭啛鎮夎兘鍔涖
杞浠跺洓灞備氦鎹㈡垜浠鍙浠ヤ嬌鐢↙inux涓婂父鐢ㄧ殑LVS鏉ヨВ鍐籌紝LVS灝辨槸Linux Virtual Server錛屼粬鎻愪緵浜嗗熀浜庡績璺崇嚎heartbeat鐨勫疄鏃剁伨闅懼簲瀵硅В鍐蟲柟妗堬紝鎻愰珮緋葷粺鐨勯瞾媯掓э紝鍚屾椂鍙渚涗簡鐏墊椿鐨勮櫄鎷烿IP閰嶇疆鍜岀$悊鍔熻兘錛屽彲浠ュ悓鏃舵弧瓚沖氱嶅簲鐢ㄩ渶奼傦紝榪欏逛簬鍒嗗竷寮忕殑緋葷粺鏉ヨ村繀涓嶅彲灝戙
涓涓鍏稿瀷鐨勪嬌鐢ㄨ礋杞藉潎琛$殑絳栫暐灝辨槸錛屽湪杞浠舵垨鑰呯‖浠跺洓灞備氦鎹㈢殑鍩虹涓婃惌寤簊quid闆嗙兢錛岃繖縐嶆濊礬鍦ㄥ緢澶氬ぇ鍨嬬綉絝欏寘鎷鎼滅儲寮曟搸涓婅閲囩敤錛岃繖鏍風殑鏋舵瀯浣庢垚鏈銆侀珮鎬ц兘榪樻湁寰堝己鐨勬墿寮犳э紝闅忔椂寰鏋舵瀯閲岄潰澧炲噺鑺傜偣閮介潪甯稿規槗銆傝繖鏍風殑鏋舵瀯鎴戝噯澶囩┖浜嗕笓闂ㄨ︾粏鏁寸悊涓涓嬪拰澶у舵帰璁ㄣ
瀵逛簬澶у瀷緗戠珯鏉ヨ達紝鍓嶉潰鎻愬埌鐨勬瘡涓鏂規硶鍙鑳介兘浼氳鍚屾椂浣跨敤鍒幫紝鎴戣繖閲屼粙緇嶅緱姣旇緝嫻呮樉錛屽叿浣撳疄鐜拌繃紼嬩腑寰堝氱粏鑺傝繕闇瑕佸ぇ瀹舵參鎱㈢啛鎮夊拰浣撲細錛屾湁鏃朵竴涓寰堝皬鐨剆quid鍙傛暟鎴栬卆pache鍙傛暟璁劇疆錛屽逛簬緋葷粺鎬ц兘鐨勫獎鍝嶅氨浼氬緢澶с
2.紜浠跺洓灞備氦鎹
絎鍥涘眰浜ゆ崲浣跨敤絎涓夊眰鍜岀鍥涘眰淇℃伅鍖呯殑鎶ュご淇℃伅錛屾牴鎹搴旂敤鍖洪棿璇嗗埆涓氬姟嫻侊紝灝嗘暣涓鍖洪棿孌電殑涓氬姟嫻佸垎閰嶅埌鍚堥傜殑搴旂敤鏈嶅姟鍣ㄨ繘琛屽勭悊銆傘絎鍥涘眰浜ゆ崲鍔熻兘灝辮薄鏄鉶欼P錛屾寚鍚戠墿鐞嗘湇鍔″櫒銆傚畠浼犺緭鐨勪笟鍔℃湇浠庣殑鍗忚澶氱嶅氭牱錛屾湁HTTP銆丗TP銆丯FS銆乀elnet鎴栧叾浠栧崗璁銆傝繖浜涗笟鍔″湪鐗╃悊鏈嶅姟鍣ㄥ熀紜涓婏紝闇瑕佸嶆潅鐨勮澆閲忓鉤琛$畻娉曘傚湪IP涓栫晫錛屼笟鍔$被鍨嬬敱緇堢疶CP鎴朥DP絝鍙e湴鍧鏉ュ喅瀹氾紝鍦ㄧ鍥涘眰浜ゆ崲涓鐨勫簲鐢ㄥ尯闂村垯鐢辨簮絝鍜岀粓絝疘P鍦板潃銆乀CP鍜孶DP絝鍙e叡鍚屽喅瀹氥
鍦ㄧ‖浠跺洓灞備氦鎹浜у搧棰嗗煙錛屾湁涓浜涚煡鍚嶇殑浜у搧鍙浠ラ夋嫨錛屾瘮濡侫lteon銆丗5絳夛紝榪欎簺浜у搧寰堟槀璐碉紝浣嗘槸鐗╂湁鎵鍊礆紝鑳藉熸彁渚涢潪甯鎬紭縐鐨勬ц兘鍜屽緢鐏墊椿鐨勭$悊鑳藉姏銆俌ahoo涓鍥藉綋鍒濇帴榪2000鍙版湇鍔″櫒浣跨敤浜嗕笁鍥涘彴Alteon灝辨悶瀹氫簡銆
㈦ 如何提高網站並發訪問性能
1、HTML靜態化
其實大家都知道,效率最高、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的網站上的頁面採用靜態頁面來實現,這個最簡單的方法
其實也是最有效的方法。但是對於大量內容並且頻繁更新的網站,我們無法全部手動去挨個實現,於是出現了我們常見的信息發布系統CMS,像我們常訪問的各個
門戶站點的新聞頻道,甚至他們的其他頻道,都是通過信息發布系統來管理和實現的,信息發布系統可以實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管
理、許可權管理、自動抓取等功能,對於一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。
除了門戶和信息發布類型的網站,對於交互性要求很高的社區類型網站來說,盡可能的靜態化也是提高性能的必要手段,將社區內的帖子、文章進行實時的靜態化、有更新的時候再重新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社區等也是如此。
同時,html靜態化也是某些緩存策略使用的手段,對於系統中頻繁使用資料庫查詢但是內容更新很小的應用,可以考慮使用html靜態化來實現。
比如論壇中論壇的公用設置信息,這些信息目前的主流論壇都可以進行後台管理並且存儲在資料庫中,這些信息其實大量被前台程序調用,但是更新頻率很小,可以
考慮將這部分內容進行後台更新的時候進行靜態化,這樣避免了大量的資料庫訪問請求。
2、圖片伺服器分離
大家知道,對於Web伺服器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,於是我們有必要將圖片與頁面進行分離,這是基
本上大型網站都會採用的策略,他們都有獨立的、甚至很多台的圖片伺服器。這樣的架構可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為
圖片問題而崩潰。
在應用伺服器和圖片伺服器上,可以進行不同的配置優化,比如apache在配置ContentType的時候可以盡量少支持、盡可能少的LoadMole,保證更高的系統消耗和執行效率。
3、資料庫集群、庫表散列
大型網站都有復雜的應用,這些應用必須使用資料庫,那麼在面對大量訪問的時候,資料庫的瓶頸很快就能顯現出來,這時一台資料庫將很快無法滿足應用,於是我們需要使用資料庫集群或者庫表散列。
在資料庫集群方面,很多資料庫都有自己的解決方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什麼樣的DB,就參考相應的解決方案來實施即可。
上面提到的資料庫集群由於在架構、成本、擴張性方面都會受到所採用DB類型的限制,於是我們需要從應用程序的角度來考慮改善系統架構,庫表散列是常用並且最有效的解決方案。
我們在應用程序中安裝業務和應用或者功能模塊將資料庫進行分離,不同的模塊對應不同的資料庫或者表,再按照一定的策略對某個頁面或者功能進行更小的資料庫散列,比如用戶表,按照用戶ID進行表散列,這樣就能夠低成本的提升系統的性能並且有很好的擴展性。
sohu的論壇就是採用了這樣的架構,將論壇的用戶、設置、帖子等信息進行資料庫分離,然後對帖子、用戶按照板塊和ID進行散列資料庫和表,最終可以在配置文件中進行簡單的配置便能讓系統隨時增加一台低成本的資料庫進來補充系統性能。
4、緩存
緩存一詞搞技術的都接觸過,很多地方用到緩存。網站架構和網站開發中的緩存也是非常重要。這里先講述最基本的兩種緩存。高級和分布式的緩存在後面講述。
架構方面的緩存,對Apache比較熟悉的人都能知道Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apache的訪問響應能力。
網站程序開發方面的緩存,Linux上提供的Memory
Cache是常用的緩存介面,可以在web開發中使用,比如用Java開發的時候就可以調用MemoryCache對一些數據進行緩存和通訊共享,一些大
型社區使用了這樣的架構。另外,在使用web語言開發的時候,各種語言基本都有自己的緩存模塊和方法,PHP有Pear的Cache模塊,Java就更多
了,.net不是很熟悉,相信也肯定有。
5、鏡像
鏡像是大型網站常採用的提高性能和數據安全性的方式,鏡像的技術可以解決不同網路接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和
ENet之間的差異就促使了很多網站在教育網內搭建鏡像站點,數據進行定時更新或者實時更新。在鏡像的細節技術方面,這里不闡述太深,有很多專業的現
成的解決架構和產品可選。也有廉價的通過軟體實現的思路,比如Linux上的rsync等工具。
6、負載均衡
負載均衡將是大型網站解決高負荷訪問和大量並發請求採用的高端解決辦法。
負載均衡技術發展了多年,有很多專業的服務提供商和產品可以選擇,我個人接觸過一些解決方法,其中有兩個架構可以給大家做參考。
(1)、硬體四層交換
第四層交換使用第三層和第四層信息包的報頭信息,根據應用區間識別業務流,將整個區間段的業務流分配到合適的應用伺服器進行處理。
第四層交換功能就像是虛IP,指向物理伺服器。它傳輸的業務服從的協議多種多樣,有HTTP、FTP、NFS、Telnet或其他協議。這些業
務在物理伺服器基礎上,需要復雜的載量平衡演算法。在IP世界,業務類型由終端TCP或UDP埠地址來決定,在第四層交換中的應用區間則由源端和終端IP
地址、TCP和UDP埠共同決定。
在硬體四層交換產品領域,有一些知名的產品可以選擇,比如Alteon、F5等,這些產品很昂貴,但是物有所值,能夠提供非常優秀的性能和很靈活的管理能力。「Yahoo中國」當初接近2000台伺服器,只使用了三、四台Alteon就搞定了。
(2)、軟體四層交換
大家知道了硬體四層交換機的原理後,基於OSI模型來實現的軟體四層交換也就應運而生,這樣的解決方案實現的原理一致,不過性能稍差。但是滿足一定量的壓力還是游刃有餘的,有人說軟體實現方式其實更靈活,處理能力完全看你配置的熟悉能力。
軟體四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual
Server,他提供了基於心跳線heartbeat的實時災難應對解決方案,提高系統的強壯性,同時可供了靈活的虛擬VIP配置和管理功能,可以同時滿
足多種應用需求,這對於分布式的系統來說必不可少。
一個典型的使用負載均衡的策略就是,在軟體或者硬體四層交換的基礎上搭建squid集群,這種思路在很多大型網站包括搜索引擎上被採用,這樣的架構低成本、高性能還有很強的擴張性,隨時往架構裡面增減節點都非常容易。
對於大型網站來說,前面提到的每個方法可能都會被同時使用到,這里介紹得比較淺顯,具體實現過程中很多細節還需要大家慢慢熟悉和體會。有時一個很小的squid參數或者apache參數設置,對於系統性能的影響就會很大。
7、最新:CDN加速技術
什麼是CDN?
CDN的全稱是內容分發網路。其目的是通過在現有的Internet中增加一層新的網路架構,將網站的內容發布到最接近用戶的網路「邊緣」,使用戶可以就近取得所需的內容,提高用戶訪問網站的響應速度。
CDN有別於鏡像,因為它比鏡像更智能,或者可以做這樣一個比喻:CDN=更智能的鏡像+緩存+流量導流。因而,CDN可以明顯提高
Internet網路中信息流動的效率。從技術上全面解決由於網路帶寬小、用戶訪問量大、網點分布不均等問題,提高用戶訪問網站的響應速度。
CDN的類型特點
CDN的實現分為三類:鏡像、高速緩存、專線。
鏡像站點(Mirror Site),是最常見的,它讓內容直接發布,適用於靜態和准動態的數據同步。但是購買和維護新伺服器的費用較高,還必須在各個地區設置鏡像伺服器,配備專業技術人員進行管理與維護。對於大型網站來說,更新所用的帶寬成本也大大提高了。
高速緩存,成本較低,適用於靜態內容。Internet的統計表明,超過80%的用戶經常訪問的是20%的網站的內容,在這個規律下,緩存服務
器可以處理大部分客戶的靜態請求,而原始的伺服器只需處理約20%左右的非緩存請求和動態請求,於是大大加快了客戶請求的響應時間,並降低了原始伺服器的
負載。
CDN服務一般會在全國范圍內的關鍵節點上放置緩存伺服器。
專線,讓用戶直接訪問數據源,可以實現數據的動態同步。
CDN的實例
舉個例子來說,當某用戶訪問網站時,網站會利用全球負載均衡技術,將用戶的訪問指向到距離用戶最近的正常工作的緩存伺服器上,直接響應用戶的請求。
當用戶訪問已經使用了CDN服務的網站時,其解析過程與傳統解析方式的最大區別就在於網站的授權域名伺服器不是以傳統的輪詢方式來響應本地
DNS的解析請求,而是充分考慮用戶發起請求的地點和當時網路的情況,來決定把用戶的請求定向到離用戶最近同時負載相對較輕的節點緩存伺服器上。
通過用戶定位演算法和伺服器健康檢測演算法綜合後的數據,可以將用戶的請求就近定向到分布在網路「邊緣」的緩存伺服器上,保證用戶的訪問能得到更及時可靠的響應。
由於大量的用戶訪問都由分布在網路邊緣的CDN節點緩存伺服器直接響應了,這就不僅提高了用戶的訪問質量,同時有效地降低了源伺服器的負載壓力。