為什么要使用集群?主要有兩方面原因:一是對于一些核心系統要求長期不能中斷服務,為了提供高可用性我們需要由多臺機器組成的集群;另外一方面,隨著訪問量越來越大且業務邏輯越來越復雜,單臺機器的處理能力已經不足以處理如此多且復雜的邏輯,于是需要增加若干臺機器使整個服務處理能力得到提升。
創新互聯公司專業為企業提供潮州網站建設、潮州做網站、潮州網站設計、潮州網站制作等企業網站建設、網頁設計與制作、潮州企業網站模板建站服務,10余年潮州做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。集群難點在哪?如果說一個web應用不涉及會話的話,那么做集群是相當簡單的,因為節點都是無狀態的,集群內各個節點無需互相通信,只需要將各個請求均勻分配到集群節點即可。但基本所有web應用都會使用會話機制,所以做web應用集群時整個難點在于會話數據的同步。
當然你可以通過一些策略規避復雜的額數據同步操作,例如前面說到的把會話信息保存在分布式緩存或數據庫中統一集中管理,如下圖,每個tomcat實例只需去寫入或讀取數據庫即可,避免了tomcat集群之間的通信。但這種方式也有不足,要額外引入數據庫或緩存服務,同時也要保證它們的高可用性,增加了機器和維護成本。
全節點會話同步模型鑒于統一將會話存放到數據庫或緩存上存在的不足,提供另一種解決思路就是tomcat集群節點自身完成各自的數據同步,不管訪問到哪個節點都能找到對應的會話,如下圖,客戶端第一次訪問生成會話,tomcat自身會將會話信息同步到其他節點上,而且是每次請求完成都會同步此次請求過程中對session的所有操作,這樣一來下一次請求到集群中任意節點都能找到響應的會話信息,且能保證信息的及時性。而且任意一個節點宕掉了也不影響整體對外的服務。
會話備份單節點模型Tomcat提供的第二種集群會話管理的機制就是單節點備份機制,下面看看這種方式具體的工作機制,集群一般是通過負載均衡對外提供整體服務,所有節點被隱藏在后端組成一個整體。前面各種模式的實現都無需負載均衡協助,所以圖中都把負載均衡省略了。最常見的負載方式是前面用apache拖所有節點,它支持將類似“326257DA6DB76F8D2E38F2C4540D1DEA.tomcat1”的會話id進行分解,定位到tomcat集群中以tomcat1命名的節點上(這種方式稱為Session Stick,由apache jk模塊實現)。每個會話存在一個原件和一個備份,且備份與原件不會保存在同一個節點上,如下圖,例如當客戶端發起請求后通過負載均衡被分發到tomcat1實例節點上,生成一個包含.tomcat1后綴的會話標識,并且tomcat1節點根據一定策略選出此次會話對象備份的節點,然后將包含了{會話id,備份ip}的信息發送給tomcat2、tomcat3、tomcat4,如圖中虛線所示,這樣每個節點都有一個會話id、備份ip列表,即每個節點都有每個會話的備份ip地址。
完成上面一步后就是將會話內容備份到備份節點上,假如tomcat1的s1、s2兩個會話的備份地址為tomcat2,則把會話對象備份到tomcat2中,類似的有tomcat2把s3會話備份到tomcat4,tomcat4把s4、s5兩個對話備份到tomcat3,這樣集群中所有的會話都已經有了一份備份。當tomcat1一直不出故障,由于Session Stick技術客戶端將一直訪問到tomcat1節點上,保證一直能獲取到會話。而當tomcat1出故障了,這時tomcat也提供了一個failover機制,apache感知到后端集群tomcat1節點被移除了,這時它會把請求隨機分配到其他任意節點上,接下去會有兩種情況:
①剛好分到了備份節點tomcat2上,此時仍能獲取到s1會話,除此之外,tomcat2還要另外做的事是將這個s1會話標記為原件且繼續選取一個備份地址備份s1會話,這樣一來又有了備份。
②假如分到了非備份節點tomcat3,此時肯定找不到s1會話,于是它將向集群所有節點發問,“請問誰有s1會話的備份ip地址信息?”,因為只有tomcat2有s1的備份地址信息,它接收到詢問后應答告知tomcat3節點s1會話的備份在tomcat2,根據這個信息就能查到s1會話了,并且tomcat3在自己本地生成s1會話并標為原件,tomcat2上的副本不變,這樣一來同樣能找到s1會話,正常完整整個請求處理。
生產部署選型以上兩種模型都有各自的優缺點,在實際生產上部署應該根據實際情況選擇適合的模型。
對于全節點會話同步模型
細看很容易發現集群的節點之間的會話是兩兩互相復制的,一旦集群節點數量及訪問量大起來,將導致大量的會話信息需要互相復制同步,很容易導致網絡阻塞,而且這些同步操作很可能會成為整體性能的瓶頸,根據經驗,此種方案在實際生產上推薦的集群節點個數為3-6個,它無法組建更大的集群,而且冗余了大量的數據,利用率較低。
對于集群增量會話管理器,可通過配置server.xml文件使用它,在tomcat中使用集群模式需要在<Engine>節點下添加<cluster>節點,而集群增量會話管理器正是在此節點下添加一個子節點<Manager className="org.apache.catalina.ha.session.DeltaManager"/>。
對于會話備份模型
針對上面全節點會話同步模型的網絡流量隨節點數量增加呈平方趨勢增長的問題,也正是因為這個因素導致無法構建較大規模的集群,為了使集群節點能更加大,首要解決的就是數據復制時流量增長的問題,tomcat提出會話備份模型對前面的模型進行優化,它使會話備份的網絡流量隨節點數量的增加呈線性趨勢增長,每個會話只會有一個備份,大大減少了網絡流量和邏輯操作,此模型可構建較大的集群。生產上可以組成十個以上的節點作為一個集群。
對于集群備份會話管理器,可通過配置server.xml文件使用它,它的配置與DeltaManager的配置基本相似,在<cluster>節點下添加一個子節點<Manager className="org.apache.catalina.ha.session.BackupManager"/>。
新聞名稱:tomcat集群機制剖析及其生產部署選型
URL標題:http://vcdvsql.cn/article34/choope.html
成都網站建設公司_創新互聯,為您提供做網站、App設計、營銷型網站建設、Google、手機網站建設、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯