以Hazelcast + Spring Session建立Cluster Web
Hazelcast 就像她首頁講的: 分散式計算的記憶體網格 ,簡單來說就是把資料分散放在各個伺服器的記憶體中;像 Hazelcast 類似的架構還有像 Redis 、 memcached 、 Infinispan …(網路上也可以找到很多的比較),那為什麼我選 Hazelcast 呢?很簡單,因為像 Redis 可以在伺服器單獨建置而無須Java,而 Hazelcast 則是採用Java開發,所以程式在單元測試開始時可以一併建置 Hazelcast ,而無須確認記憶體網格伺服器啟動後後再來進行測試,而且因為可隨程式一起建置,更方便開發者在不同的環境內進行測試(比如您下載我的程式,就可以直接執行了,除了Java環境外不須要再建置任何系統)。另外, Hazelcast 有Atomic與Transaction的機制,可適用於開發一些特殊的系統,例如:搶票系統( Hazelcast 支援AWS)。 由於記憶體網格的特性,所以Java Web程式有機會在不同的電腦中複製Session資料,從而實質上達到 Cluster Web。 以前要用Java 建立Cluster Web無疑是煩瑣與費用高昂,而現今仍然也是需要一些成本(近來像 Nginx 這種反向代理伺服器可以用Sticky的方式建立叢集,也就是把用戶各自分配到不同的機器,然後從此用戶就黏著到特定的機器,當然,除非您自己結合 nginx-sticky-module 來編譯 Nginx ,否則也是要花錢買她的商業版本才有提供,而社群版只提供Round Robin的方式將來自用戶的存取分配到各伺服器,但這樣就沒法Keep Session了); Hazelcast 的商業版本目前有提供Tomcat Cluster,而 Redis 目前也只提供Tomcat7的solution,那麼其它的 Web Server咋辦呢(JBoss有,但設定煩瑣)?所以 Spring Session 實做了各種不同Cluster儲存機制的Session Cluster,最棒的是我們根本不用改變我們的程式寫法,因為當我們使用 Session.setAttribute() 時, Spring Session 在背後已經將資料寫入到Cluster Memories了。 後面我要來實做Web Cluster,前提是在開發編譯要先有 Maven...