1. 程式人生 > >Tomcat分散式----單機部署多應用

Tomcat分散式----單機部署多應用

分散式架構演進

大型網站都是通過小型網站發展而來的。

1-----在專案的初始化階段,我們構建一個專案只是需要一臺伺服器,裡面包括了應用程式,檔案服務,資料庫服務!

2-----隨著網站業務的發展,越來越多的使用者訪問導致效能越來越跟不上,資料儲存空間不足夠,這個時候就需要進行應用和資料分離,由一臺伺服器變成三臺,即應用伺服器,檔案伺服器,資料庫伺服器!

3-----網站的訪問的特點通常遵循二八定律,80%的業務幾種在20%的客戶上,因此可有通過快取把訪問頻繁客戶或者內容給快取起來,減少資料庫的壓力,通過訪問速度和效能,因此開始進行資料快取?

------本地快取:在應用伺服器上跟隨應用程式的快取,速度快,但是同樣大小有限

------遠端分散式快取:建立遠端分散式快取伺服器

4-----使用快取後,減少了 程式的壓力,但是單一伺服器能夠處理的請求仍然存在著上限,在高峰期仍然會造成網站瓶頸,因此可以通過負載均衡排程實現分散式部署伺服器(多機單應用部署)

5-----在使用快取後,絕大部分資料讀操作可以不通過資料庫完成,但是對於快取沒有的或者過期的以及寫操作,仍然需要操作到資料庫,當網站到達一定程度後,資料庫會因為負載壓力過來而不滿足需求!因此需要對資料庫進行讀寫分離,通過主從機制,降低壓力!也即是資料庫讀寫分離!當前Sprng框架使用的都是橋接模式(資料庫訪問模組),部署在應用伺服器中

6-----CDN和反向代理都是快取,區別在於CDN是部署在網路提供商的機房,客戶請求的時候從距離自己最近的網路提供商哪裡獲取資料;而反向代理則是部署在網站的中心機房,客戶請求到達後首先呢仍然是先訪問反向代理的伺服器!

7-----當網站進一步發展,我們只能通過增加部署伺服器來提高效能,除此之外就可是優化業務以及提高資料訪問能力!比較優化資料庫訪問模組為統一資料訪問模組,增加搜尋引擎和NoSQL伺服器

8-----業務拆分,當業務發展到一定程度,那麼我們則會將一個網站分拆為許多個不同的應用,每個應用用獨立部署維護!應用之間可以通過一個超連結建立關係,也可以通過訊息佇列進行資料分發

9-----既然每一個應用系統都需要執行許多相同的業務功能。那麼可以將這些相同的業務功能給提取出來成為一個獨立部署的系統。由這些可複用的業務連線資料庫,提供共用的業務服務而應用系統就可以只需要管理使用者介面,通過分散式服務呼叫公用業務服務來完成具體操作!

當事物發展到這裡,基本技術上的難題和業務問題都被完善了!那麼事物要麼走向尋求突破自身的機會和方向要麼慢慢贅於體質和繁瑣的業務慢慢停滯,以期業務上的突破可以改變現狀!

==========================================================================================

架構模式:

分層:  企業應用的基本架構模式,在橫向維度上切割成幾個部分,每個部分負責一部分相對單一的職責,通過上層和下層的依賴和呼叫組成一個系統。例如三層MVC架構就是一種分層方法,分為應用層,服務層和資料層,而其中應用層也可以再細分為檢視層,業務邏輯層,服務層可以分為資料介面層和邏輯處理層。但是在這個過程中,分層也合理地規劃好層次和邊界介面。

分割:如果將分層當成縱向結構上的劃分,那麼分割就是針對業務在橫向上的分割,當系統足夠龐大時候,為了保證系統的維護和執行需要,我們需要將每個部分的業務(邏輯或者業務部署上可以獨立的模組)包裝成高內聚低耦合的模組單元甚至是系統,這個時候系統的分割粒度將會非常小。

分散式處理:包括分散式應用和服務,分散式靜態資源,分散式資料儲存,分散式計算,分散式快取

叢集:部署多臺伺服器

注意:叢集和分散式來說,他們之間的區別,叢集可以說是物理形態的部署,而分散式是指業務處理模式上的,兩者描述的是同一模式在不同領域上的形態!

==========================================================================================

分散式部署伺服器:分散式部署Tomcat伺服器,的難點在於每臺機器要怎麼配置多個Tomcat,並部署好Nginx的負載均衡轉發,因此只要學會單機部署多應用和Nginx負載均衡轉發,其他的都差不多!

1-----第一臺Tomcat:

保持不變

2-----第二臺Tomcat:

Tomcat的server.xml
server     port-->統一遞增加1000
Connect port-->port為9080

Connect port-->8009-->9009

開啟第二個tomcat的catalina.bat和startup.bat,並修改裡面:

 “CATALINA_BASE”為“CATALINA_2_BASE”

“CATALINA_HOME”為“CATALINA_2_HOME”

“TOMCAT_HOME”為“TOMCAT_2_HOME”

在系統變數中新增變數:

 “CATALINA_BASE”和“CATALINA_2_BASE”:路徑為到tomcat中bin目錄的上一級目錄

“CATALINA_HOME”為“CATALINA_2_HOME”:路徑為到tomcat中bin目錄的上一級目錄

在處理完配置後,請前往Tomcat2目錄中的ROOT目錄下替換tomcat.png為任意一自己能識別的圖片,而後分別重啟 伺服器,並反問http://localhost:8080 和http://localhost:9080/

============================================================================

Nginx負載均衡處理器:用於請求和轉發,提供專案的橫向擴充套件能力,對多個Tomcat請求進行轉發

1---負載均衡的幾種模式:

-----輪詢:實現簡單,不考慮伺服器處理能力,每臺伺服器的權重都是1,代表相對訪問的概率相同

-----權重:考慮每臺伺服器的效能和處理能力,按照權重不同適當傾斜(生產最常用)

-----IP Hash:實現同一個使用者只能訪問同一個伺服器,但是IP Hash的分配會不平均,導致伺服器傾斜不同

-----URL Hash:頻繁請求會導致被分佈到同一個伺服器,導致分佈不平均,第三方需要安裝外掛

-----fair第三方公平:按照後端伺服器的響應時間請求,時間短的優先分配,在節點下增加fair

2---域名負載均衡配置

upstream backserver{
   ip_hash;
   server 127.0.0.1:9090 down;(down表示當前的server暫時不參與負載)
   server 127.0.0.1:8080 weight=2;(weight預設為1,負載越大,權重越大)
   server 127.0.0.1:6060;
   server 127.0.0.1:7070 backup;(其他的非所有的backup機器down或者忙得時候,請求backup機器)

 }  

3----常用設定

在Nginx中的conf資料夾下的.conf檔案中配置,此外接檔案,然後過載

include vhos/*.conf
   過載
   linux sudo ./nginx -s reload   
   windows nginx.exe -s reload 再開啟新的視窗

在該目錄下建立vhost檔案,在檔案裡面建立要維護的域名權重負載均衡配置

檔案命名格式:www.cyqxm.com.conf  域名加字尾

upstream www.cyqxm.com{
    server 127.0.0.1:8080 weight=10;
    server 127.0.0.1:9080 weight=15;
}
server { 
listen 80; 
autoindex on; 
server_name www.cyqxm.com;                        #虛擬的訪問代理域名,瀏覽器訪問的網址
access_log D:/CYQJAVA/Nginx/nginx-1.10.2/logs/mylogs/access.log combined;                   #錯誤日誌記錄
index index.html index.htm index.jsp index.php; 
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){ 
return 404; 


location / { 
  proxy_pass http://www.cyqxm.com;           #正確的訪問地址,server_name即是服務代理輸入的域名,當輸入此域名,則會轉到      proxy_pass            指定的地址中來
  add_header Access-Control-Allow-Origin *;

}

流程: Nginx先訪問server,server讀取到後訪問location,location後訪問upstream

關於在沒有買域名的情況下測試:

因為考慮到個人開發的成本問題,單獨購買域名和伺服器可能會花費很大,因此可以通過本地自測試的方式,在Host檔案中維護server_name 的域名指向:

開啟系統:C:\Windows\System32\drivers\etc\hosts  裡面的hosts檔案進行修改

維護:www.cyqxm.com      127.0.0.1的域名轉換,以後訪問本地則可以代理localost進行訪問

關於一些極可能遇到的問題:

------Nginx啟動出錯:過載後重新開啟,windows頁面下開啟後不關閉cmd

------Nginx啟動失敗:Nginx一旦修改檔案必須對檔案進行過載

------Host許可權不足:

對於需要修改Hosts檔案時候,當前存在的Host許可權不足的問題,現在網上常見的有給檔案賦值,給當前使用者賦值,使用管理員許可權開啟修改,直接複製檔案出來修改後替換!以上行為都是屬於正確的又合理的,但是建立使用者的本身具備許可權或者管理本身存在其許可權組內,才可以順利修改!在以上方法均失敗的情況下,只有進入安全模式才可以修改,否則即使重灌系統也不一定有用!