今天和一個做某超市的電商的一個技術核心聊的時候,發現了一個很重要的信息,我不斷的去思考和挖掘它們是怎么去應對大數據已經淘寶的電商網站的架構是如何的。其中得出一下幾點心得,第一:服務器負責均衡,第二:數據庫主從分離,第三:安全性。
第一點服務器負責均衡:
web 負載均衡的作用就是把請求均勻的分配給各個節點,它是一種動態均衡,通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把請求理分配出去。對于不同的應用環境(如電子商務網站,它的計 算負荷大;再如網絡數據庫應用,讀寫頻繁,服務器的存儲子系統系統面臨很大壓力;再如視頻服務應用,數據傳輸量大,網絡接口負擔重壓。),使用的均衡策略 (算法)是不同的。 所以均衡策略(算法)也就有了多種多樣的形式,廣義上的負載均衡既可以設置專門的網關、負載均衡器,也可以通過一些專用軟件與協議來實現。在OSI七層協議模型中的第二(數據鏈路層)、第三(網絡層)、第四(傳輸層)、第七層(應用層)都有相應的負載均衡策略(算法),在數據鏈路層上實現負載均衡的原理是根據數據包的目的MAC地址選擇不同的路徑;在網絡層上可利用基于IP地址的分配方式將數據流疏通到多個節點;而傳輸層和應用層的交換(Switch),本身便是一種基于訪問流量的控制方式,能夠實現負載均衡。
目前,基于負載均衡的算法主要有三種:輪循(Round-Robin)、最小連接數(Least Connections First),和快速響應優先(Faster Response Precedence)。
①輪循算法,就是將來自網絡的請求依次分配給集群中的節點進行處理。
②最小連接數算法,就是為集群中的每臺服務器設置一個記數器,記錄每個服務器當前的連接數,負載均衡系統總是選擇當前連接數最少的服務器分配任務。 這要比"輪循算法"好很多,因為在有些場合中,簡單的輪循不能判斷哪個節點的負載更低,也許新的工作又被分配給了一個已經很忙的服務器了。
③快速響應優先算法,是根據群集中的節點的狀態(CPU、內存等主要處理部分)來分配任務。 這一點很難做到,事實上到目前為止,采用這個算法的負載均衡系統還很少。尤其對于硬件負載均衡設備來說,只能在TCP/IP協議方面做工作,幾乎不可能深入到服務器的處理系統中進行監測。但是它是未來發展的方向。
上面是負載均衡常用的算法,基于以上負載均衡算法的使用方式上,又分為如下幾種:
1、DNS輪詢
最早的負載均衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。
DNS負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須盡量保證不同的 客戶計算機能均勻獲得不同的地址。由于DNS數據具備刷新時間標志,一旦超過這個時間限制,其他DNS服務器就需要和這個服務器交互,以重新獲得地址數 據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使刷新時間盡量短,不同地方的DNS服務器能更新對應的地址,達到隨機獲得地址,然而將過 期時間設置得過短,將使DNS流量大增,而造成額外的網絡問題。DNS負載均衡的另一個問題是,一旦某個服務器出現故障,即使及時修改了DNS設置,還是 要等待足夠的時間(刷新時間)才能發揮作用,在此期間,保存了故障服務器地址的客戶計算機將不能正常訪問服務器
2、反向代理服務器
使用代理服務器,可以將請求轉發給內部的服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。然而,也可以考慮這樣一種技術,使用代理服務器將請求均勻轉發給多臺服務器,從而達到負載均衡的目的。
這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部服務器,而這種代理方式是代理多個客戶訪問內部服務器,因此也被稱為反向代理模式。雖然實現這個任務并不算是特別復雜,然而由于要求特別高的效率,實現起來并不簡單。
使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。
代理服務器本身雖然可以達到很高效率,但是針對每一次代理,代理服務器就必須維護兩個連接,一個對外的連接,一個對內的連接,因此對于特別高的連接請求, 代理服務器的負載也就非常之大。反向代理方式下能應用優化的負載均衡策略,每次訪問最空閑的內部服務器來提供服務。但是隨著并發連接數量的增加,代理服務 器本身的負載也變得非常大,最后反向代理服務器本身會成為服務的瓶頸。
3、地址轉換網關
支持負載均衡的地址轉換網關,可以將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態使用其中一個內部地址,達到負載均衡的目的。很多 硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現,一般采用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡 策略來分配負載。由于地址轉換相對來講比較接近網絡的低層,因此就有可能將它集成在硬件設備中,通常這樣的硬件設備是局域網交換機。
第二:數據庫主從關系的映射:
很重要一個信息就是數據庫的分離,電商的數據庫業務是這樣做的,業務數據的增刪改進行的是在主數據庫的操作,全部的查詢都是在從數據庫操作,大家可能就會有疑問了,那么怎么保證數據的一致性呢,是因為數據庫服務進行映射和配置,當主數據庫發生了數據變化會立刻同步到所有的從數據庫。這樣的做法的好處就是減少數據庫服務器的壓力。從而大大的提升查詢和性能。真是一種聰明的做法。
采用的架構是:Springmvc+Mybatis+Freemarker+Nginx+Tomcat6.x+Mysql數據庫。