當前位置:首頁 » 編程語言 » 輕松籌php

輕松籌php

發布時間: 2023-09-12 23:44:10

A. go語言適合做什麼

Go語言。他主要是在一些網頁版的伺服器中用於系統編程的一種語言。他是谷歌開發的一種編程語言。在一定程度上,谷歌有一定的壟斷作用。不能隨隨便便的在語言當中添加其他的語言成分。

B. 怎樣製作一個網站

要領一:確定網站主題

做網站,首先必須要解決的就是網站內容問題,即確定網站的主題。美國《個人電腦》雜志(PC Magazine)評出了99年度排名前100位的全美知名網站的十類題材:第1類:網上求職;第2類:網上聊天/即時信息/ICQ;第3類:網上社區/討論/郵件列表;第4類:計算機技術;第5類:網頁/網站開發;第6類:娛樂網站;第7類:旅行;第8類:參考/資訊;第9類:家庭/教育;第10類:生活/時尚。我們可以參看上面的分類,繼續細分。如果自己在某些方面有興趣,或掌握的資料較多,也可以做一個自己感興趣的東西,一者,你可以有自己的見解,做出自己的特色;二者,在製作網站時不會覺得無聊或者力不從心。興趣是製作網站的動力,沒有創作熱情,很難設計製作出優秀的作品。

對於內容主題的選擇,要做到小而精,主題定位要小,內容要精。不要去試圖製作一個包羅萬象的站點,這往往會失去網站的特色,也會帶來高強度的勞動,給網站的及時更新帶來困難。記住:在互聯網上只有第一,沒有第二!

要領二:選擇好域名

域名是網站在互聯網上的名字。一個非產品推銷的純信息服務網站,其所有建設的價值,都凝結在其網站域名之上。失去這個域名,所有前期工作就將全部落空。

目前,做個人網站的很多都依賴免費個人空間,其域名也是依賴免費域名指向,如網易的虛擬域名服務,其實這對個人網站的推廣與發展很為不利,不光是它「適時」開啟的窗口妨礙了瀏覽者的視線和好感,讓人一看就知道是個人網站,而且也妨礙了網頁的傳輸速度。所以,就我個人觀點來說,首先花點錢去注冊一個域名,獨立的域名就是個人網站的第一筆財富,要把域名起得形象、簡單、易記。

要領三:掌握建網工具

網路技術的發展帶動了軟體業的發展,所以用於製作Web頁面的工具軟體也越來越豐富。從最基本的HTML編輯器到現在非常流行的Flash互動網頁製作工具,各種各樣的Web頁面製作工具,下面是幾款具有代表性的網頁製作器:

(1)HTML編輯器。雖然HTML代碼復雜,編輯和調試要花費大量的時間,但因HTML的穩定性、廣泛支持性及可創建復雜的頁面效果,仍受高級網頁製作人員的青睞。就目前來說,有眾多的編輯器供選擇,這些編輯器廣泛支持復雜頁面創建及高級HTML規范,使用較為普遍的有Hotdog等專業HTML編輯器。

(2)所見即所得的網頁編輯器。其中以Microsoft Frontpage為代表,它具有如Word一樣的操作界面,熟知Word功能的操作者,只要稍加培訓就能輕松編制網頁。而且,Frontpage還能解析網頁的HTML源代碼,並提供了預覽支持。但Frontpage的一些特殊顯示功能並不能在其它非IE瀏覽器下實現。所以Frontpage是一款非常適合初、中級網頁製作人員使用的工具軟體。

(3)現在非常流行的 Macromedia公司出品的Flash互動網頁製作工具。這是是一款功能非常強大的互動式矢量多媒體網頁製作工具。能夠輕松輸出各種各樣的動畫網頁,它不需要特別繁雜的操作,也比java小巧精悍!但它的動畫效果、互動效果、多媒體效果十分出色。而且還可以在Flash動畫中封裝Mp3音樂、填寫表單等;並且由於Flash編制的網頁文件比普通網頁文件要小得多,所以大大加快了瀏覽速度。這是一款十分適合動態Web製作的工具。

另外,個人網站製作者還需了解W3C的HTML4.0規范、CSS層疊樣式表的基本知識、javascript、VBScript的基本知識。對於常用的一些腳本程序如ASP、CGI、php也要有適當了解,還要熟練使用圖形處理工具和動畫製作工具以及矢量繪圖工具,並能部分了解多種圖形圖像動畫工具的基本用法,熟練使用FTP工具以及擁有相應的軟硬體和網路知識也是必備的。

當然,互聯網還是一個免費的資料庫。編制網頁需要多種多樣的按鈕、背景還有各種各樣圖形、圖片。如果這些都要靠自己完成,既浪費時間又浪費金錢,而且還需要強大的圖形、圖片製作技術。所以,為了省卻這些麻煩,網站製作者完全可以從網上下載各種精美實用的圖片、按鈕、背景等網頁素材。

要領四:確定網站界面

界面就是網站給瀏覽者的第一印象,往往決定著網站的可看性,在確定網站的界面時要注意以下三點:

①欄目與板塊編排

構建一個網站就好比寫一篇論文,首先要列出題綱,才能主題明確、層次清晰。網站建設初學者,最容易犯的錯誤就是:確定題材後立刻開始製作,沒有進行合理規劃。從而導致網站結構不清晰,目錄龐雜混亂,板塊編排混亂等。結果不但瀏覽者看得糊里糊塗,製作者自己在擴充和維護網站也相當困難。所以,我們在動手製作網頁前,一定要考慮好欄目和板塊的編排問題。
網站的題材確定後,就要將收集到的資料內容作一個合理的編排。比如,將一些最吸引人的內容放在最突出的位置或者在版面分布上占優勢地位。欄目的實質是一個網站的大綱索引,索引應該將網站的主體明確顯示出來。在制定欄目的時候,要仔細考慮,合理安排。在欄目編排時需要注意的是:

●盡可能刪除那些與主題無關的欄目;

●盡可能將網站內最有價值的內容列在欄目上;

●盡可能從訪問者角度來編排欄目以方便訪問者的瀏覽和查詢;輔助內容,如站點簡介、版權信息、個人信息等大可不必放在主欄目里,以免沖淡主題。

另外,板塊的編排設置也要合理安排與劃分。板塊比欄目的概念要大一些,每個板塊都有自己的欄目。舉個例子:ENET矽谷動力(www.enet.com.cn)的站點分新聞、產品、游戲、學院等板塊,每個板塊下面又各有自己的主欄目。一般來說,個人站點內容較少,只要分個欄目也就夠了,不需要設置板塊。如果有必要設置板塊的,應該注意:

●各板塊要有相對獨立性;

●各板塊要有相互關聯;

●各板塊的內容要圍繞站點主題;

②目錄結構與鏈接結構

網站的目錄是指建立網站時創建的目錄。例如:在用Frontpage建立網站時都默認建立了根目錄和Images子目錄。目錄的結構是一個容易忽略的問題,大多數站長都是未經規劃,隨意創建子目錄。目錄結構的好壞,對瀏覽者來說並沒有什麼太大的感覺,但是對於站點本身的維護,以後內容的擴充和移植有著重要的影響。所以建立目錄結構時也要仔細安排,比如:

●不要將所有文件都存放在根目錄下。有網站製作者為了方便,將所有文件都放在根目錄下。這樣就很容易造成:文件管理混亂,搞不清哪些文件需要編輯和更新,哪些無用的文件可以刪除,哪些是相關聯的文件,影響工作效率;上傳速度變慢,伺服器一般都會為根目錄建立一個文件索引,如果將所有文件都放在根目錄下,那麼即使只上傳更新一個文件,伺服器也需要將所有文件再檢索一遍,建立新的索引文件,很明顯,文件量越大,等待的時間也將越長。

●按欄目內容建立子目錄。子目錄的建立,首先按主欄目建立。友情連接內容較多,需要經常更新的可以建立獨立的子目錄。而一些相關性強,不需要經常更新的欄目,例如:網站簡介、站長情況等可以合並放在一個統一目錄下。所有程序一般都存放在特定目錄,例如:CGI程序放在cgi-bin目錄,所有提供下載的內容也最好放在一個目錄下,便於維護管理。

●在每個主目錄下都建立獨立的Images目錄。一般來說,一個站點根目錄下都有一個默認地Images目錄。將所有圖片都存放在這個目錄里很是不方便,比如在欄目刪除時,圖片的管理相當麻煩。所以為每個主欄目建立一個獨立的Images目錄是方便管理的。原因很簡單,就是方便維護與管理。
其它需要注意的還有:目錄的層次不要太深,不要超過3層;不要使用中文目錄,使用中文目錄可能對網址的正確顯示造成困難;不要使用過長的目錄,太長的目錄名不便於記憶;盡量使用意義明確的目錄,以便於記憶和管理。

網站的鏈接結構是指頁面之間相互鏈接的拓撲結構。它建立在目錄結構基礎之上,但可以跨越目錄。形象的說:每個頁面都是一個固定點,鏈接則是在兩個固定點之間的連線。一個點可以和一個點連接,也可以和多個點連接。更重要的是,這些點並不是分布在一個平面上,而是存在於一個立體的空間中。一般的,建立網站的鏈接結構有兩種基本方式:

●樹狀鏈接結構(一對一),這類似DOS的目錄結構,首頁鏈接指向一級頁面,一級頁面鏈接指向二級頁面。這樣的鏈接結構瀏覽時,一級級進入,一級級退出,條理比較清晰,訪問者明確知道自己在什麼位置,不會「不知身在何處」,但是瀏覽效率低,一個欄目下的子頁面到另一個欄目下的子頁面,必須回到首頁再進行。

●星狀鏈接結構(一對多),類似網路伺服器的鏈接,每個頁面相互之間都建立有鏈接。這樣瀏覽比較方便,隨時可以到達自己喜歡的頁面。但是由於鏈接太多,容易使瀏覽者迷路,搞不清自己在什麼位置,看了多少內容。

因此,在實際的網站設計中,總是將這兩種結構混合起來使用。網站希望瀏覽者既可以方便快速地達到自己需要的頁面,又可以清晰地知道自己的位置。所以,最好的辦法是:首頁和一級頁面之間用星狀鏈接結構,一級和二級頁面之間用樹狀鏈接結構。關於鏈接結構的設計,在實際的網頁製作中是非常重要一環,採用什麼樣的鏈接結構直接影響到版面的布局。

③進行形象設計

網站的設計可以從以下幾點出發:

●設計網站標志(LOGO)。LOGO是指網站的標志,標志可以是中文、英文字母,也可以是符號、圖案等。標志的設計創意應當來自網站的名稱和內容。比如:網站內有代表性的人物、動物、植物,可以用它們作為設計的藍本,加以卡通化或者藝術化;專業網站可以以本專業有代表的物品作為標志。最常用和最簡單的方式是用自己網站的英文名稱作標志,採用不同的字體、字母的變形、字母的組合可以很容易製作好自己的標志。

●設計網站色彩。網站給人的第一印象來自視覺沖擊,不同的色彩搭配產生不同的效果,並可能影響到訪問者的情緒。「標准色彩」是指能體現網站型象和延伸內涵的色彩,要用於網站的標志,標題,主菜單和主色塊。給人以整體統一的感覺。至於其它色彩也可以使用,但應當只是作為點綴和襯托,絕不能喧賓奪主。一般來說,一個網站的標准色彩不超過3種,太多則讓人眼花繚亂。適合於網頁標准色的顏色有:藍色,黃/橙色,黑/灰/白色三大系列色。

●設計網站字體。和標准色彩一樣,標准字體是指用於標志,標題,主菜單的特有字體。一般網頁默認的字體是宋體。為了體現站點的「與眾不同」和特有風格,可以根據需要選擇一些特別字體。製作者可以根據自己網站所表達的內涵,選擇更貼切的字體。需要說明的是:使用非默認字體只能用圖片的形式,因為很可能瀏覽者的計算機里沒有安裝特別字體,那麼辛苦設計製作便可能付之東流了。

●設計網站宣傳語。也可以說是網站的精神、主題與中心,或者是網站的目標,用一句話或者一個詞來高度概括。用富有氣勢的話或詞語來概括網站,進行對外宣傳,可以收到比較好的結果。

要領五:確定網站風格

「風格」是抽象的,是指站點的整體形象給瀏覽者的綜合感受。這個「整體形象」包括站點的CI(標志,色彩,字體,標語)、版面布局、瀏覽方式、交互性、文字、語氣、內容價值等等諸多因素,網站可以是平易近人的、生動活潑的也可以是專業嚴肅的。不管是色彩、技術、文字、布局,還是交互方式,只要你能由此讓瀏覽者明確分辨出這是你網站獨有的,這就形成了網站的「風格」。

風格是有人性的,通過網站的色彩、技術、文字、布局、交互方式可以概括出一個站點的個性:是粗獷豪放的,還是清新秀麗的;是溫文儒雅的,還是執著熱情的;是活潑易變的,還是墨守成規的。

總之,有風格的網站與普通網站的區別在於:在普通網站上你看到的只是堆砌在一起的信息,你只能用理性的感受來描述,比如信息量多少,瀏覽速度快慢等;在有風格的網站上你可以獲得除內容之外的更感性的認識,比如站點的品位,對瀏覽者的態度等。

在明確自己想給人以怎樣的印象後,要找出網站中最有特色的東西,就是最能體現網站風格的東西。並以它作為網站的特色加以重點強化、宣傳。總之,風格的形成不是一次定位的,你可以在實踐中不斷強化、調整、改進。

要領六:有創意的內容選擇

好的內容選擇需要有好的創意,作為網頁設計製作者,最苦惱的就是沒有好的內容創意。網路上的最多的創意即是來自於虛擬同現實的結合。創意的目的是為了更好的宣傳與推廣網站,如果創意很好,卻對網站發展毫無意義,那麼,網站設計製作者也應當放棄這個創意。另外,主頁內容是網站的根本之所在,如果內容空洞,即使頁面製作地再怎樣精美,仍然不會有多少用戶。從根本上說,網站內容仍然左右著網站流量,內容為王(Content Is King)依然是個人網站成功的關鍵。

要領七:推廣自己的網站

網站的營銷推廣在個人網站的運行中也占著重要的地位,在推廣個人網站之前,請確保已經做好了以下內容:網站信息內容豐富、准確、及時;網站技術具有一定專業水準,網站的交互性能良好。一般來說,網站的推廣有以下幾種方式:

(1)搜索引擎注冊與搜索目錄登錄技巧

注冊著名的搜索引擎站點是在技術上推廣網站的第一步。注冊搜索引擎有一定的技巧,像AltaVista、搜索客這樣的搜索引擎,它自動收錄提交的網址。另外,注意Meta的使用,不要提交分欄Frame頁面,大部分搜索引擎不識別Frame,所以一定要提交有內容的Main頁面。

而像Yahoo、搜狐等搜索目錄網站採用手工方式收錄網址,以保證收錄網站的質量,在分類查詢時獲得的信息相關性比搜索引擎站點(靠Spider自動搜索的)更強。由於搜索目錄網站收錄網站的人為因素相對較多,因此在提交網站時要注意遵守規則。如Yahoo要求注冊站點描述不超過25個單詞。在此要注意:將網址提交到最合適的目錄下面,要認真詳細的介紹網站,千萬不要有虛假、誇張的成分。

(2)廣告交換技巧

很多個人站點在相互廣告交換時都提出了幾個條件:第一,訪問量相當;第二,首頁交換。顯而易見,這種做法是為了充分利用廣告交換。以很多個人網站的經驗,當與一個個人站點交換鏈接時,對方把網站的LOGO放到了友情連接一頁,而不是首頁時,很少有訪客會來自那裡。通常在首頁,廣告交換才會有很好的效果。

(3)目標電子郵件推廣

使用電子郵件宣傳網址時,主要有如下技巧:可以使用免費郵件列表來進行,只要你申請了免費郵件列表服務,你就可以利用郵件列表來推廣你的網站;可以通過收集的特定郵件地址,來發送信息到特定的網路群體,在特定網路群體中推廣自己的網站;發送HTML格式的郵件,即使其內容與接收者關系不大,也不會被被當作垃圾信件馬上刪掉,人們至少會留意一下發送者的地址。不過,在進行郵件推廣的時候要注意網路道德。

要領八:支撐網站日常運行

當個人網站做到某一程度,就必須把賺錢提到議事日程上來,通常來說,個人網站獲取資金通常有以下兩個渠道:

(1)銷售網站的廣告位

要銷售網站的廣告位,一般來說,每日的流量少於1萬人次的網站在目前是不會吸引廣告主的。網站的專業性及商用性,以往的廣告經驗,技術以及設計要求等也會影響到廣告的銷售。

一般來說,WEB廣告的收費有三種方式:

①CPM (Cost Per Million/Thousand)

放一個廣告,它按每1,000人次來訪問站點收費。這方法對網站經營者最為合適,只要有人瀏覽該網頁,就得錢,不管訪問者對廣告有無反應——是否會看或點擊該廣告。

②點透(Click-through)

通過Banner廣告點到了廣告商的站點,這才算數,廣告商青睞這個,他只為對自己廣告感興趣的人「套錢「。網站經營者就不合適了,據一些調查資料表明,只有3%的訪問者會去「CLICK」廣告。

③提成 (Commission)

根據訪問者點擊位於你站點上廣告所帶來的銷售收入,從中跟做廣告的廠商分成,這種方法對於網站的經營者來說,比上面兩個都更加冒險。

通常的,個人網站的廣告收費方法往往是第一、第二種方法的結合,站點和廣告商都可少冒點險。

(2)與大型網站合作

另外,通過與大型網站合作,獲取經費,也可以維持個人網站的日常運行。不過,個人網站很容易會成為商業網站的附屬品。

有時間和充沛的體力,再加上對新技術和技巧的學習和應用,你就能為自己在網上建一個家了。

http://www.zhandalighting.com/jao/

C. php怎麼處理高並發

以下內容轉載自徐漢彬大牛的博客億級Web系統搭建——單機到分布式集群

當一個Web系統從日訪問量10萬逐步增長到1000萬,甚至超過1億的過程中,Web系統承受的壓力會越來越大,在這個過程中,我們會遇到很多的問題。為了解決這些性能壓力帶來問題,我們需要在Web系統架構層面搭建多個層次的緩存機制。在不同的壓力階段,我們會遇到不同的問題,通過搭建不同的服務和架構來解決。

Web負載均衡

Web負載均衡(Load Balancing),簡單地說就是給我們的伺服器集群分配「工作任務」,而採用恰當的分配方式,對於保護處於後端的Web伺服器來說,非常重要。

負載均衡的策略有很多,我們從簡單的講起哈。

1.HTTP重定向

當用戶發來請求的時候,Web伺服器通過修改HTTP響應頭中的Location標記來返回一個新的url,然後瀏覽器再繼續請求這個新url,實際上就是頁面重定向。通過重定向,來達到「負載均衡」的目標。例如,我們在下載PHP源碼包的時候,點擊下載鏈接時,為了解決不同國家和地域下載速度的問題,它會返回一個離我們近的下載地址。重定向的HTTP返回碼是302

這個重定向非常容易實現,並且可以自定義各種策略。但是,它在大規模訪問量下,性能不佳。而且,給用戶的體驗也不好,實際請求發生重定向,增加了網路延時。

2. 反向代理負載均衡

反向代理服務的核心工作主要是轉發HTTP請求,扮演了瀏覽器端和後台Web伺服器中轉的角色。因為它工作在HTTP層(應用層),也就是網路七層結構中的第七層,因此也被稱為「七層負載均衡」。可以做反向代理的軟體很多,比較常見的一種是Nginx。

Nginx是一種非常靈活的反向代理軟體,可以自由定製化轉發策略,分配伺服器流量的權重等。反向代理中,常見的一個問題,就是Web伺服器存儲的session數據,因為一般負載均衡的策略都是隨機分配請求的。同一個登錄用戶的請求,無法保證一定分配到相同的Web機器上,會導致無法找到session的問題。

解決方案主要有兩種:

1.配置反向代理的轉發規則,讓同一個用戶的請求一定落到同一台機器上(通過分析cookie),復雜的轉發規則將會消耗更多的CPU,也增加了代理伺服器的負擔。

2.將session這類的信息,專門用某個獨立服務來存儲,例如redis/memchache,這個方案是比較推薦的。

反向代理服務,也是可以開啟緩存的,如果開啟了,會增加反向代理的負擔,需要謹慎使用。這種負載均衡策略實現和部署非常簡單,而且性能表現也比較好。但是,它有「單點故障」的問題,如果掛了,會帶來很多的麻煩。而且,到了後期Web伺服器繼續增加,它本身可能成為系統的瓶頸。

3. IP負載均衡

IP負載均衡服務是工作在網路層(修改IP)和傳輸層(修改埠,第四層),比起工作在應用層(第七層)性能要高出非常多。原理是,他是對IP層的數據包的IP地址和埠信息進行修改,達到負載均衡的目的。這種方式,也被稱為「四層負載均衡」。常見的負載均衡方式,是LVS(Linux Virtual Server,Linux虛擬服務),通過IPVS(IP Virtual Server,IP虛擬服務)來實現。

在負載均衡伺服器收到客戶端的IP包的時候,會修改IP包的目標IP地址或埠,然後原封不動地投遞到內部網路中,數據包會流入到實際Web伺服器。實際伺服器處理完成後,又會將數據包投遞回給負載均衡伺服器,它再修改目標IP地址為用戶IP地址,最終回到客戶端。

上述的方式叫LVS-NAT,除此之外,還有LVS-RD(直接路由),LVS-TUN(IP隧道),三者之間都屬於LVS的方式,但是有一定的區別,篇幅問題,不贅敘。

IP負載均衡的性能要高出Nginx的反向代理很多,它只處理到傳輸層為止的數據包,並不做進一步的組包,然後直接轉發給實際伺服器。不過,它的配置和搭建比較復雜。

4. DNS負載均衡

DNS(Domain Name System)負責域名解析的服務,域名url實際上是伺服器的別名,實際映射是一個IP地址,解析過程,就是DNS完成域名到IP的映射。而一個域名是可以配置成對應多個IP的。因此,DNS也就可以作為負載均衡服務。

這種負載均衡策略,配置簡單,性能極佳。但是,不能自由定義規則,而且,變更被映射的IP或者機器故障時很麻煩,還存在DNS生效延遲的問題。

5. DNS/GSLB負載均衡

我們常用的CDN(Content Delivery Network,內容分發網路)實現方式,其實就是在同一個域名映射為多IP的基礎上更進一步,通過GSLB(Global Server Load Balance,全局負載均衡)按照指定規則映射域名的IP。一般情況下都是按照地理位置,將離用戶近的IP返回給用戶,減少網路傳輸中的路由節點之間的跳躍消耗。

「向上尋找」,實際過程是LDNS(Local DNS)先向根域名服務(Root Name Server)獲取到頂級根的Name Server(例如.com的),然後得到指定域名的授權DNS,然後再獲得實際伺服器IP。

CDN在Web系統中,一般情況下是用來解決大小較大的靜態資源(html/Js/Css/圖片等)的載入問題,讓這些比較依賴網路下載的內容,盡可能離用戶更近,提升用戶體驗。

例如,我訪問了一張imgcache.gtimg.cn上的圖片(騰訊的自建CDN,不使用qq.com域名的原因是防止http請求的時候,帶上了多餘的cookie信息),我獲得的IP是183.60.217.90。

這種方式,和前面的DNS負載均衡一樣,不僅性能極佳,而且支持配置多種策略。但是,搭建和維護成本非常高。互聯網一線公司,會自建CDN服務,中小型公司一般使用第三方提供的CDN。

Web系統的緩存機制的建立和優化

剛剛我們講完了Web系統的外部網路環境,現在我們開始關注我們Web系統自身的性能問題。我們的Web站點隨著訪問量的上升,會遇到很多的挑戰,解決這些問題不僅僅是擴容機器這么簡單,建立和使用合適的緩存機制才是根本。

最開始,我們的Web系統架構可能是這樣的,每個環節,都可能只有1台機器。

我們從最根本的數據存儲開始看哈。

一、 Mysql資料庫內部緩存使用

MySQL的緩存機制,就從先從MySQL內部開始,下面的內容將以最常見的InnoDB存儲引擎為主。

1. 建立恰當的索引

最簡單的是建立索引,索引在表數據比較大的時候,起到快速檢索數據的作用,但是成本也是有的。首先,佔用了一定的磁碟空間,其中組合索引最突出,使用需要謹慎,它產生的索引甚至會比源數據更大。其次,建立索引之後的數據insert/update/delete等操作,因為需要更新原來的索引,耗時會增加。當然,實際上我們的系統從總體來說,是以select查詢操作居多,因此,索引的使用仍然對系統性能有大幅提升的作用。

2. 資料庫連接線程池緩存

如果,每一個資料庫操作請求都需要創建和銷毀連接的話,對資料庫來說,無疑也是一種巨大的開銷。為了減少這類型的開銷,可以在MySQL中配置thread_cache_size來表示保留多少線程用於復用。線程不夠的時候,再創建,空閑過多的時候,則銷毀。

其實,還有更為激進一點的做法,使用pconnect(資料庫長連接),線程一旦創建在很長時間內都保持著。但是,在訪問量比較大,機器比較多的情況下,這種用法很可能會導致「資料庫連接數耗盡」,因為建立連接並不回收,最終達到資料庫的max_connections(最大連接數)。因此,長連接的用法通常需要在CGI和MySQL之間實現一個「連接池」服務,控制CGI機器「盲目」創建連接數。

建立資料庫連接池服務,有很多實現的方式,PHP的話,我推薦使用swoole(PHP的一個網路通訊拓展)來實現。

3. Innodb緩存設置(innodb_buffer_pool_size)

innodb_buffer_pool_size這是個用來保存索引和數據的內存緩存區,如果機器是MySQL獨占的機器,一般推薦為機器物理內存的80%。在取表數據的場景中,它可以減少磁碟IO。一般來說,這個值設置越大,cache命中率會越高。

4. 分庫/分表/分區。

MySQL資料庫表一般承受數據量在百萬級別,再往上增長,各項性能將會出現大幅度下降,因此,當我們預見數據量會超過這個量級的時候,建議進行分庫/分表/分區等操作。最好的做法,是服務在搭建之初就設計為分庫分表的存儲模式,從根本上杜絕中後期的風險。不過,會犧牲一些便利性,例如列表式的查詢,同時,也增加了維護的復雜度。不過,到了數據量千萬級別或者以上的時候,我們會發現,它們都是值得的。

二、 MySQL資料庫多台服務搭建

1台MySQL機器,實際上是高風險的單點,因為如果它掛了,我們Web服務就不可用了。而且,隨著Web系統訪問量繼續增加,終於有一天,我們發現1台MySQL伺服器無法支撐下去,我們開始需要使用更多的MySQL機器。當引入多台MySQL機器的時候,很多新的問題又將產生。

1. 建立MySQL主從,從庫作為備份

這種做法純粹為了解決「單點故障」的問題,在主庫出故障的時候,切換到從庫。不過,這種做法實際上有點浪費資源,因為從庫實際上被閑著了。

2. MySQL讀寫分離,主庫寫,從庫讀。

兩台資料庫做讀寫分離,主庫負責寫入類的操作,從庫負責讀的操作。並且,如果主庫發生故障,仍然不影響讀的操作,同時也可以將全部讀寫都臨時切換到從庫中(需要注意流量,可能會因為流量過大,把從庫也拖垮)。

3. 主主互備。

兩台MySQL之間互為彼此的從庫,同時又是主庫。這種方案,既做到了訪問量的壓力分流,同時也解決了「單點故障」問題。任何一台故障,都還有另外一套可供使用的服務。

不過,這種方案,只能用在兩台機器的場景。如果業務拓展還是很快的話,可以選擇將業務分離,建立多個主主互備。

三、 MySQL資料庫機器之間的數據同步

每當我們解決一個問題,新的問題必然誕生在舊的解決方案上。當我們有多台MySQL,在業務高峰期,很可能出現兩個庫之間的數據有延遲的場景。並且,網路和機器負載等,也會影響數據同步的延遲。我們曾經遇到過,在日訪問量接近1億的特殊場景下,出現,從庫數據需要很多天才能同步追上主庫的數據。這種場景下,從庫基本失去效用了。

於是,解決同步問題,就是我們下一步需要關注的點。

1. MySQL自帶多線程同步

MySQL5.6開始支持主庫和從庫數據同步,走多線程。但是,限制也是比較明顯的,只能以庫為單位。MySQL數據同步是通過binlog日誌,主庫寫入到binlog日誌的操作,是具有順序的,尤其當SQL操作中含有對於表結構的修改等操作,對於後續的SQL語句操作是有影響的。因此,從庫同步數據,必須走單進程。

2. 自己實現解析binlog,多線程寫入。

以資料庫的表為單位,解析binlog多張表同時做數據同步。這樣做的話,的確能夠加快數據同步的效率,但是,如果表和表之間存在結構關系或者數據依賴的話,則同樣存在寫入順序的問題。這種方式,可用於一些比較穩定並且相對獨立的數據表。

國內一線互聯網公司,大部分都是通過這種方式,來加快數據同步效率。還有更為激進的做法,是直接解析binlog,忽略以表為單位,直接寫入。但是這種做法,實現復雜,使用范圍就更受到限制,只能用於一些場景特殊的資料庫中(沒有表結構變更,表和表之間沒有數據依賴等特殊表)。

四、 在Web伺服器和資料庫之間建立緩存

實際上,解決大訪問量的問題,不能僅僅著眼於資料庫層面。根據「二八定律」,80%的請求只關注在20%的熱點數據上。因此,我們應該建立Web伺服器和資料庫之間的緩存機制。這種機制,可以用磁碟作為緩存,也可以用內存緩存的方式。通過它們,將大部分的熱點數據查詢,阻擋在資料庫之前。

1. 頁面靜態化

用戶訪問網站的某個頁面,頁面上的大部分內容在很長一段時間內,可能都是沒有變化的。例如一篇新聞報道,一旦發布幾乎是不會修改內容的。這樣的話,通過CGI生成的靜態html頁面緩存到Web伺服器的磁碟本地。除了第一次,是通過動態CGI查詢資料庫獲取之外,之後都直接將本地磁碟文件返回給用戶。

在Web系統規模比較小的時候,這種做法看似完美。但是,一旦Web系統規模變大,例如當我有100台的Web伺服器的時候。那樣這些磁碟文件,將會有100份,這個是資源浪費,也不好維護。這個時候有人會想,可以集中一台伺服器存起來,呵呵,不如看看下面一種緩存方式吧,它就是這樣做的。

2. 單台內存緩存

通過頁面靜態化的例子中,我們可以知道將「緩存」搭建在Web機器本機是不好維護的,會帶來更多問題(實際上,通過PHP的apc拓展,可通過Key/value操作Web伺服器的本機內存)。因此,我們選擇搭建的內存緩存服務,也必須是一個獨立的服務。

內存緩存的選擇,主要有redis/memcache。從性能上說,兩者差別不大,從功能豐富程度上說,Redis更勝一籌。

3. 內存緩存集群

當我們搭建單台內存緩存完畢,我們又會面臨單點故障的問題,因此,我們必須將它變成一個集群。簡單的做法,是給他增加一個slave作為備份機器。但是,如果請求量真的很多,我們發現cache命中率不高,需要更多的機器內存呢?因此,我們更建議將它配置成一個集群。例如,類似redis cluster。

Redis cluster集群內的Redis互為多組主從,同時每個節點都可以接受請求,在拓展集群的時候比較方便。客戶端可以向任意一個節點發送請求,如果是它的「負責」的內容,則直接返回內容。否則,查找實際負責Redis節點,然後將地址告知客戶端,客戶端重新請求。

對於使用緩存服務的客戶端來說,這一切是透明的。

內存緩存服務在切換的時候,是有一定風險的。從A集群切換到B集群的過程中,必須保證B集群提前做好「預熱」(B集群的內存中的熱點數據,應該盡量與A集群相同,否則,切換的一瞬間大量請求內容,在B集群的內存緩存中查找不到,流量直接沖擊後端的資料庫服務,很可能導致資料庫宕機)。

4. 減少資料庫「寫」

上面的機制,都實現減少資料庫的「讀」的操作,但是,寫的操作也是一個大的壓力。寫的操作,雖然無法減少,但是可以通過合並請求,來起到減輕壓力的效果。這個時候,我們就需要在內存緩存集群和資料庫集群之間,建立一個修改同步機制。

先將修改請求生效在cache中,讓外界查詢顯示正常,然後將這些sql修改放入到一個隊列中存儲起來,隊列滿或者每隔一段時間,合並為一個請求到資料庫中更新資料庫。

除了上述通過改變系統架構的方式提升寫的性能外,MySQL本身也可以通過配置參數innodb_flush_log_at_trx_commit來調整寫入磁碟的策略。如果機器成本允許,從硬體層面解決問題,可以選擇老一點的RAID(Rendant Arrays of independent Disks,磁碟列陣)或者比較新的SSD(Solid State Drives,固態硬碟)。

5. NoSQL存儲

不管資料庫的讀還是寫,當流量再進一步上漲,終會達到「人力有窮時」的場景。繼續加機器的成本比較高,並且不一定可以真正解決問題的時候。這個時候,部分核心數據,就可以考慮使用NoSQL的資料庫。NoSQL存儲,大部分都是採用key-value的方式,這里比較推薦使用上面介紹過Redis,Redis本身是一個內存cache,同時也可以當做一個存儲來使用,讓它直接將數據落地到磁碟。

這樣的話,我們就將資料庫中某些被頻繁讀寫的數據,分離出來,放在我們新搭建的Redis存儲集群中,又進一步減輕原來MySQL資料庫的壓力,同時因為Redis本身是個內存級別的Cache,讀寫的性能都會大幅度提升。

國內一線互聯網公司,架構上採用的解決方案很多是類似於上述方案,不過,使用的cache服務卻不一定是Redis,他們會有更豐富的其他選擇,甚至根據自身業務特點開發出自己的NoSQL服務。

6. 空節點查詢問題

當我們搭建完前面所說的全部服務,認為Web系統已經很強的時候。我們還是那句話,新的問題還是會來的。空節點查詢,是指那些資料庫中根本不存在的數據請求。例如,我請求查詢一個不存在人員信息,系統會從各級緩存逐級查找,最後查到到資料庫本身,然後才得出查找不到的結論,返回給前端。因為各級cache對它無效,這個請求是非常消耗系統資源的,而如果大量的空節點查詢,是可以沖擊到系統服務的。

在我曾經的工作經歷中,曾深受其害。因此,為了維護Web系統的穩定性,設計適當的空節點過濾機制,非常有必要。

我們當時採用的方式,就是設計一張簡單的記錄映射表。將存在的記錄存儲起來,放入到一台內存cache中,這樣的話,如果還有空節點查詢,則在緩存這一層就被阻擋了。

異地部署(地理分布式)

完成了上述架構建設之後,我們的系統是否就已經足夠強大了呢?答案當然是否定的哈,優化是無極限的。Web系統雖然表面上看,似乎比較強大了,但是給予用戶的體驗卻不一定是最好的。因為東北的同學,訪問深圳的一個網站服務,他還是會感到一些網路距離上的慢。這個時候,我們就需要做異地部署,讓Web系統離用戶更近。

一、 核心集中與節點分散

有玩過大型網游的同學都會知道,網游是有很多個區的,一般都是按照地域來分,例如廣東專區,北京專區。如果一個在廣東的玩家,去北京專區玩,那麼他會感覺明顯比在廣東專區卡。實際上,這些大區的名稱就已經說明了,它的伺服器所在地,所以,廣東的玩家去連接地處北京的伺服器,網路當然會比較慢。

當一個系統和服務足夠大的時候,就必須開始考慮異地部署的問題了。讓你的服務,盡可能離用戶更近。我們前面已經提到了Web的靜態資源,可以存放在CDN上,然後通過DNS/GSLB的方式,讓靜態資源的分散「全國各地」。但是,CDN只解決的靜態資源的問題,沒有解決後端龐大的系統服務還只集中在某個固定城市的問題。

這個時候,異地部署就開始了。異地部署一般遵循:核心集中,節點分散。

·核心集中:實際部署過程中,總有一部分的數據和服務存在不可部署多套,或者部署多套成本巨大。而對於這些服務和數據,就仍然維持一套,而部署地點選擇一個地域比較中心的地方,通過網路內部專線來和各個節點通訊。

·節點分散:將一些服務部署為多套,分布在各個城市節點,讓用戶請求盡可能選擇近的節點訪問服務。

例如,我們選擇在上海部署為核心節點,北京,深圳,武漢,上海為分散節點(上海自己本身也是一個分散節點)。我們的服務架構如圖:

需要補充一下的是,上圖中上海節點和核心節點是同處於一個機房的,其他分散節點各自獨立機房。
國內有很多大型網游,都是大致遵循上述架構。它們會把數據量不大的用戶核心賬號等放在核心節點,而大部分的網游數據,例如裝備、任務等數據和服務放在地區節點里。當然,核心節點和地域節點之間,也有緩存機制。

二、 節點容災和過載保護

節點容災是指,某個節點如果發生故障時,我們需要建立一個機制去保證服務仍然可用。毫無疑問,這里比較常見的容災方式,是切換到附近城市節點。假如系統的天津節點發生故障,那麼我們就將網路流量切換到附近的北京節點上。考慮到負載均衡,可能需要同時將流量切換到附近的幾個地域節點。另一方面,核心節點自身也是需要自己做好容災和備份的,核心節點一旦故障,就會影響全國服務。

過載保護,指的是一個節點已經達到最大容量,無法繼續接接受更多請求了,系統必須有一個保護的機制。一個服務已經滿負載,還繼續接受新的請求,結果很可能就是宕機,影響整個節點的服務,為了至少保障大部分用戶的正常使用,過載保護是必要的。

解決過載保護,一般2個方向:

·拒絕服務,檢測到滿負載之後,就不再接受新的連接請求。例如網游登入中的排隊。

·分流到其他節點。這種的話,系統實現更為復雜,又涉及到負載均衡的問題。

小結

Web系統會隨著訪問規模的增長,漸漸地從1台伺服器可以滿足需求,一直成長為「龐然大物」的大集群。而這個Web系統變大的過程,實際上就是我們解決問題的過程。在不同的階段,解決不同的問題,而新的問題又誕生在舊的解決方案之上。

系統的優化是沒有極限的,軟體和系統架構也一直在快速發展,新的方案解決了老的問題,同時也帶來新的挑戰。

D. ASP\JSP\PHP相比各有什麼優缺點

ASP、JSP、和PHP的優點和缺點:

一、ASP

優點:

1、無需編譯

2、易於生成

3、獨立於瀏覽器

4、面向對象

5、與任何ActiveX scripting 語言兼容

6、源程序碼不會外漏

缺點:

1、Windows本身的所有問題都會一成不變的也累加到了它的身上。安全性、穩定性、跨平台性都會因為與NT的捆綁而顯現出來。

2、ASP由於使用了COM組件所以它會變的十分強大,但是這樣的強大由於Windows NT系統最初的設計問題而會引發大量的安全問題。只要在這樣的組件或是操作中一不注意,哪么外部攻擊就可以取得相當高的許可權而導致網站癱瘓或者數據丟失。

3、由於ASP還是一種Script語言所沒除了大量使用組件外,沒有辦法提高其工作效率。它必須面對即時編繹的時間考驗,同時我們還不知其背後的組件會是一個什麼樣的狀況。

4、無法實現跨操作系統的應用。當然這也是微軟的理由之一,只有這樣才能發揮ASP最佳的能力。可是我卻認為正是Windows限制了ASP,ASP的概念本就是為一個能讓系統運行於一個大的多樣化環境而設計的。

5、還無法完全實現一些企業級的功能:完全的集群、負載均橫。

二、JSP

優點:

1、 一處編寫隨處運行。

2、 系統的多台平支持。

3、 強大的的可伸縮性。

4、 多樣化和功能強大的開發工具支持。

缺點:

1、 與ASP一樣,Java的一些優勢正是它致命的問題所在。

2、 缺少系統性的資料。

3、 開發速度超慢

三、PHP

優點:

1、 一種能快速學習、跨平台、有良好資料庫交互能力的開發語言。

2、 簡單輕便,易學易用。

3、 與Apache及其它擴展庫結合緊密。

4、 良好的安全性。

缺點:

1、 在windows平台運行的安全性和穩定性不如Linux/Unix。

(4)輕松籌php擴展閱讀:

ASP.NET也是常用的網站開發語言之一:

優點:

1. 簡潔的設計和實施。

2. 語言靈活,並支持復雜的面向對象特性。

3. 開發環境。

缺點:

1.資料庫的連接復雜。

2.不具有跨平台性,只支持windows平台。

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:233
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:532
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726