## 集群
* 現在如果要構造一個真正在生產環境上可使用的可靠的系統,基本都離不開集群的概念,總的來說集群是指由若干互相獨立的機器通過高速網絡組成的一個整體服務,整個集群的內部實現相對外部是透明的,對外部而言它就像一個獨立的服務器。要使若干機器協同工作不是一件簡單的事,其核心是如何在多機器之間進行通信及各種任務調度使之協同工作。
* 在工程上常見的兩種集群是——負載均衡集群和高可用集群。
* 負載均衡集群(Load Balance Cluster),隨著系統的處理量的不斷增加,很快到達一臺機器的處理極限,所以需要更多的機器來分擔處理,負載均衡集群一般是通過一定的分發算法把訪問流量均勻分布到集群里面的各個機器上進行處理,理想的集群是通過添加機器使處理能力達到線性增長,但現實中往往處理過程并非是無狀態的,會涉及到一些共享狀態變量,所以當集群數量達到一定程度后處理能力并不能按線性增長且可靠性可能也會降低。關于負載均衡集群如何協調分配分發請求的問題,即可以使用專門的負載均衡硬件如F5,也可以使用軟件級別的方式實現負載均衡如LVS、HAProxy等。
* 高可用集群(High Available Cluster),高可用集群通過軟件把若干機器連接起來,這種集群更偏重的是當集群中某個機器發生故障后能通過自動切換或流量轉移等措施來保證整個集群對外的可用性。在實際運用中很經典的就是mysql數據庫的主從節點,一般情況如果是一主多從我們會使用讀寫分離措施,主節點負責執行寫操作而從節點執行讀操作,一旦主節點發生故障后系統將自動從多個從節點中選舉出一個節點作為主節點繼續對外提供服務,保證了服務的高可用。高可用集群與負載均衡集群一般不會絕對地劃分開,我們不會將一臺機器什么也不做就放著就等其他機器出故障再去候補,為了使用地更加高效可以把這些備用(standby)的機器用于負載均衡,故障發生后再接管故障節點的職責。
喜歡java的同學可以交個朋友:?
