linux 網站架構的演變

今天我們學習影響互聯網最重要服務web服務(應用服務)。什麼是web服務呢?就是我們平常在瀏覽器輸入一個網站的地址,然後能給我們提供服務的就是web服務器。Web服務器的發展歷史我就不多說了,我直接說下現在流行的搭建這種服務的常用軟件。在Linux下比較常用的有三種分別是apache軟件,tomcat軟件,nginx軟件。這三款是我在工作都接觸過的,當然還有別的,其原理都是一樣的,在這裏我就不多說了。w_0001.gif

   Web服務器的工作原理前面我已經講過了就是三次握手使用的是80端口。那我們前面都已經講過了,今天講什麼呢?今天我們講解下Web服務架構的演變

   網站我們常聽說有靜態網站和動態網站,那什麼是靜態網站和動態網站呢?官方的回答我就不引用了,我說下我的理解,有數據庫的網站就是動態網站,沒有數據庫的就是靜態網站。他們之間的區別是什麼呢?看下面

靜態網站w_0039.gif

1、         靜態網頁是以.htm.html.shtml.xml等爲後綴的

2、         靜態網頁的內容相對穩定,因此容易被搜索引擎檢索;

3、         靜態網頁的交互性較差,在功能方面有較大的限制

4、         靜態網頁是實實在在保存在服務器上的文件,每個網頁都是一個獨立的文件;

5、         靜態網頁沒有數據庫的支持,在網站製作和維護方面工作量較大,因此當網站信息量很大時完全依靠靜態網頁製作方式比較困難。

動態網站w_0038.gif

1、         採用動態網頁技術的網站可以實現更多的功能,如用戶註冊、用戶登錄、在線調查、用戶管理、訂單管理等等;

2、         動態網頁以數據庫技術爲基礎,可以大大降低網站維護的工作量;

3、         動態網頁實際上並不是獨立存在於服務器上的網頁文件,只有當用戶請求時服務器才返回一個完整的網頁。

在網站開始之初只有靜態網站,後來才衍生出了動態網站,對於動靜態網頁最簡單的最直接的判斷就是看網址的後綴。


網站的初期,我們經常會在一臺服務器上跑我們所有的程序和軟件包括數據庫。

wKioL1bbp7bzljXMAACNuXOeYws715.png

隨着網站的上線,訪問量逐步上升,服務器的負載慢慢提高,在服務器還沒有超載的時候,我們應該就要做好準備,提升網站的負載能力。假如我們 代碼層面已難以優化,在不提高單臺機器的性能的情況下,增加機器是一個不錯的方式,不僅可以有效地提高系統的負載能力,而且性價比高。

增加的機器用來做什麼呢?此時我們可以把數據庫,web服務器拆分開來,這樣不僅提高了單臺機器的負載能力,也提高了容災能力。

wKiom1bbqRfh6k5nAADKzzTONrM106.png

隨着訪問量繼續增加,單臺應用服務器已經無法滿足需求了。在假設數據庫服務器沒有壓力的情況下,我們可以把應用服務器從一臺變成了兩臺甚至多臺,把用戶的請求分散到不同的服務器中,從而提高負載能力。多臺應用服務器之間沒有直接的交互,他們都是依賴數據庫各自對外提供服務。這時有負載均衡方案和高可用方案。w_0032.gif

wKioL1bbqx2QLVA9AACfWkOrXHQ109.png        註釋:高可用方案指的是當一個web服務器宕機了,另一臺會自動接管。w_0027.gif


wKiom1bcEy6wkRbkAACiG_xBWfk474.png         註釋:負載均衡方案是當訪問用戶多了,負載均衡器把任務分配到不同Web服務器上


上面我們總是假設數據庫負載正常,但隨着訪問量的的提高,數據庫的負載也在慢慢增大。那麼可能有人馬上就想到跟應用服務器一樣,把數據庫一份爲二再負載均衡即可。但對於數據庫來說,並沒有那麼簡單。假如我們簡單的把數據庫一分爲二,然後對於數據庫的請求,分別負載到A機器和B機器,那麼顯而 易見會造成兩臺數據庫數據不統一的問題。那麼對於這種情況,我們可以先考慮使用讀寫分離的方式。

讀寫分離後的數據庫系統結構如下:w_0041.gif

wKiom1bcAraB0DPpAAEI8x_9Crw512.png


   隨着訪問量的增加,逐漸出現了許多用戶訪問同一部分內容的情況,對於這些比較熱門的內容,沒必要每次都從數據庫讀取。我們可以使用緩存技術,例如可以使用google的開源緩存技術guava者使用memcacahe作爲應用層的緩存,也可以使用redis作爲數據庫層的緩存。

wKioL1bcBviy0-VYAAEg78rdJKk395.png

   我們的網站演進到現在,交易、商品、用戶的數據都還在同一個數據庫中。儘管採取了增加緩存,讀寫分離的方式,但隨着數據庫的壓力繼續增加,數據庫的瓶頸越來越突出,此時,我們可以有數據垂直拆分和水平拆分兩種選擇。

數據垂直拆分w_0036.gif

垂直拆分的意思是把數據庫中不同的業務數據拆分道不同的數據庫中,結合現在的例子,就是把交易、商品、用戶的數據分開。


數據水平拆分w_0037.gif

數據水平拆分就是把同一個表中的數據拆分到兩個甚至多個數據庫中。產生數據水平拆分的原因是某個業務的數據量或者更新量到達了單個數據庫的瓶頸,這時就可以把這個表拆分到兩個或更多個數據庫中。

   我們的網站到現在雖然進行的垂直拆分和水平拆分,可能會有一些相同的代碼,如用戶相關的代碼,商品和交易都需要用戶信息,所以在兩個系統中都保留差不多的操作用戶信息的代碼。如何保證這些代碼可以複用是一個需要解決的問題。

解決方法:w_0048.gif

   通過走服務化的路線來解決

   什麼是服務化呢?

爲了解決上面拆分應用後所出現的問題,我們把公共的服務拆分出來,形成一種服務化的模式,簡稱SOA(即服務化)

有了服務化概念之後,我們如何進行遠程的服務調用

解決方法:    

我們可以通過下面的引入消息中間件來解決。

   隨着網站的繼續發展,我們的系統中可能出現不同語言開發的子模塊和部署在不同平臺的子系統。此時我們需要一個平臺來傳遞可靠的,與平臺和語言無關的數據,並且能夠把負載均衡透明化,能在調用過程中收集調用數據並分析之,推測出網站的訪問增長率等等一系列需求,對於網站應該如何成長做出預測。 開源消息中間件有阿里的dubbo,可以搭配Google開源的分佈式程序協調服務zookeeper實現服務器的註冊與發現。

  現在我們的網站的已經達到了頂峯,我們把我們的網站放在一個地方,在中國不同地區的人訪問的速度不一樣,怎麼樣讓不同地區的人能有相差無極的訪問呢?

  有些童鞋可能立馬想到把我們的網站分開放不就可以了嘛!對就是這樣,我們在上海的機房放置一套這樣網站服務,然後在在北京也放置一套這樣的網站服務。以此類推,這樣叫分佈式網站。這些分佈式網站之間會過一段時間進行數據同步一次,這樣我們看起來網站的內容是一樣的。

  這就是我們的網站演變路程,接下來我們會從單臺服務器的搭建到一個服務器集羣的搭建,給大家演示下,並告訴大傢什麼情況下采用什麼樣的架構!童鞋們簡單吧!

  如果有把前面的基礎命令學好,這些無非就是一些原理上的理解,你理解了這些原理,然後通過前面學習的命令找到相應的軟件。就可以搭建出一個網站。當然我這裏只是做了很簡單的總結。後面我會細講每一個不同架構的網站怎麼實現。今天就到這裏了,希望大家努力點兒!j_0028.gif



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章