跟朋友聊天的時候,發現不少人對大型網站系統架構很是感興趣,我也很感興趣,常常會在家裏2檯筆記本和1臺服務器組成的局域網環境裏做些實驗。我進入IT行業的時間,大約是97,98年吧,那時候PC客戶端軟件最爲盛行,作軟件開發是一份很體面也很喜歡的工做。我從Win3.1上的VC1.5開始一直到VC6.0,而後轉爲.Net開發,基本上都是從事客戶端軟件開發。本人的性格是危機意識向來嚴重,因此深感互聯網必將盛行,傳統軟件必將走向沒落,因而轉向了WEB開發。記得之前去某Portal網站應聘的時候,主考官就問我:你認爲客戶端開發和互聯網開發有什麼不一樣。我當時的回答是:互聯網開發比客戶端軟件開發簡單多了,我不再用考慮那麼多的用戶環境因素了,一點部署,什麼時候何地均可用。
不少年過去了,我再想起當初個人回答,依然以爲那個回答是正確的。就產品開發層面來說,互聯網開發確實簡單多了。這裏首先澄清一個概念,我所說的互聯網開發並非指全部的B/S應用,例如B/S方式的銀行內部業務系統。我所說的互聯網應用是指在互聯網上服務於公衆的應用。企業級的業務系統,它的特色是業務邏輯是比較複雜的,但用戶通常不太大;互聯網應用則相反,業務邏輯通常很簡單,但面對的是海量用戶。
既然互聯網應用開發的業務邏輯不復雜,但爲何大型網站都投入了那麼多的技術人員呢?主要是由於運營的環境太複雜,這種複雜性造成的緣由如下:
一、公開性
網站的服務是公開的,任何人均可以來訪問,因此就會直接面對大量的不良用戶,系統數據的安全面臨很大的風險,一旦系統被攻入,結果將是災難性的。
二、訪問量大
訪問量大,就意味着網站必須可以承受高併發大流量的考驗,若是網站的服務能力和健壯性等達不到要求,你的系統就會被沖垮。
三、用戶體驗
用戶體驗要好,除了產品設計的因素以外,就要求訪問網站的速度要快,具備高可用性,別用一會就掛。
網站各子系統如何進行部署,如何提升系統的健壯性和高可用性,如何實現網站的安全,如何提升訪問速度,如何進行負載均衡,甚至於採用什麼的硬件設備,另外,網站發展的不一樣時期會可能會採用不一樣的架構,如何實現架構的平滑過渡,如何使目前的架構具備彈性,具有可擴展的能力,這都是大型網站必須解決的問題,也是小網站成長過程當中早晚會遇到的問題。我後面的文章將會逐步就這個話題展開。
網站機構包括網站的軟件架構和系統架構兩部分,軟件架構主要是指子系統和邏輯層的劃分結構;系統架構,通常是系統部署結構。
系統架構師的知識體系比較龐雜,所謂的見多識廣,多數是由運維工程師成長起來的,他們開發能力不強,編碼很少,但動手能力很強,腳本編寫很是熟練,常常會作各類類型的實驗,密切跟蹤最新技術最新產品的相關信息。固然,一個大型的網站,須要一個架構師團隊,他們各自承擔擅長領域的架構設計,好比安全架構、存儲架構等等。
我以爲通常的開發人員仍是很難走上這條路的,這份工做須要經驗,須要不斷實踐,但若是開發人員一旦走上了這條路,會有很大的發展,主要源於開發人員的思考習慣和技術的深度。個人這系列文章,開發人員能夠做爲參考,好比如何開發可分佈式部署的系統,另外不少朋友都是身兼數職,從開發到實施,到部署所有包辦。我我的深感精力有限,因此又特地找了幾個朋友從Unix/Linux系統和Windows系統不一樣角度進行探索,以造福正在摸索中的朋友,有興趣的朋友也能夠參與。
其實,這部份內容我一直在寫,好比php深度探索系列,寫了大量的關於apache的內容,我已經大致把apache代碼閱讀了一遍,很費時間,進度緩慢,但我想這有助於咱們理解apache的配置和調優。