分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
集群主要分為:高可用集群(High Availability Cluster),負載均衡集群(Load Balance Cluster,nginx即可實現),科學計算集群(High Performance Computing Cluster)。
分布式是指將不同的業務分布在不同的地方;而集群指的是將幾臺服務器集中在一起,實現同一業務。分布式中的每一個節點,都可以做集群。 而集群并不一定就是分布式的。
為了解決大型網站的訪問量大、并發量高、海量數據的問題,我們一般會考慮業務拆分和分布式部署。我們可以把那些關聯不太大的業務獨立出來,部署到不同的機器上,從而實現大規模的分布式系統。但這之中也有一個問題,那就是用戶如何選擇相應的機器的問題,這也被稱為訪問統一入口問題,而解決的方法是我們可以在集群機器的前面增加負載均衡設備,實現流量分發(總圖如下)。這里得先解釋一下何為“負載均衡”,負載均衡就是將負載(工作任務、訪問請求等)進行平衡、分攤到多個操作單元(服務器、組件等)上進行執行,是解決高性能,單點故障(高可用,如果你是單機版網絡,一旦服務器掛掉了,那么用戶就無法請求了,但對于集群來說,一臺服務器掛掉了,負載均衡器會把用戶的請求發送給其他的服務器進行處理),擴展性(這里主要是指水平伸縮)的終極解決方案。

在這里,本人主要討論負載均衡設備為Nginx(至于為啥不講講F5,因為人家太貴了,不過人家比較穩定),這是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,具有占用內存少、并發能力強等,中國大陸使用nginx網站用戶有:百度、網易、新浪、騰訊等(該介紹來自百科)。
nginx大家可以上其 官網 去下載最新版,解壓后復制到部署目錄,對于Nginx的配置網上的資料很多,這里就不再贅述了,只總結一下Nginx使用的注意事項:
1.nginx的負載均衡配置中默認是采用輪詢的方式,這種方式中,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除,但存在各個服務器的session共享問題。
2.另外一種方式是ip_hash:每個請求按訪問的ip的hash結果分配,如果訪問的IP是固定的,那么在正常情況下,該用戶的請求都會分配到后臺的同一臺服務器去處理,但是如果用戶每次請求的IP都不同呢?所以這種方式也同1的方式一樣都存在這么一個問題:session在各個服務器上的共享問題。
3.,如果集群中的服務器的性能不一,可以通過配置各個服務器的權值來實現資源利用率的最大化,即性能好的優先選擇
也許你會問,既然IP可能變化,那么用戶用頁面請求時的cookie的ID應該是確定的吧!那么我們可以用cookie_id來進行hash,然后在通過負載均衡器分發到對應的服務器上,這樣就可以解決session問題了,其實當初本人也有想到這個方案,但最后本人也放棄這個方案了,因為是根據cookid_id確實可以把該用戶的請求唯一的分發到那臺獨一無二的服務器上,那如果這臺服務器掛掉了,那么根據這種分發策略,豈不是在這服務器上請求資源的用戶都不能訪問了,你說是不是呢?
#### 解決服務器共享session問題:
使用redis來共享各個服務器的session,并同時通過redis來緩存一些常用的資源,加快用戶獲得請求資源的速度(個人比較喜歡redis,當然你們也可以使用memcache來實現,不過,memcache不能做到持久化,這樣這臺服務器一掛掉,那么所有的資源也都沒有了......)。
不過,本人覺得這樣進行集群部署,最好配上數據庫的主從部署,因為如果在集群中只分配一個數據庫服務器,那么這個系統的瓶頸將會出現在數據庫的操作上,雖然redis能減輕這種負擔,但對于數據量大的還是有一定影響的,而且數據庫的主從部署也可以防止因某個數據庫服務器的掛掉而丟失用戶的信息。
- 簡介
- Cookie
- HTML5 LocalStorage
- session
- 當瀏覽器關閉后,Session就銷毀了嗎?
- mysql數據庫保存session
- HTTP協議的由來
- fsockopen異步請求
- http防盜鏈
- Apache偽靜態知識補充
- 大并發量解決方案
- 大型網站是怎樣解決多用戶高并發訪問
- 網站高并發 大流量訪問的處理及解決方法
- 并發數與在線客戶數?注冊用戶數的關系
- 即時聊天程序
- 反向Ajax實現
- ob緩存作用
- 淺聊并發之戰
- php擴展安裝
- php安裝redis擴展
- SQLMap自動化實施SQL注入共計
- 命名空間namespace
- 集群和分布式之【session共享】
- php Redis存儲Session 【1】
- php Redis存儲Session 【2】
- php mysql存儲session【1】
- php緩存
- 文件緩存
- memcache和redis的比較
- 原生session與session in redis對比
- XSS攻擊【1】
- XSS攻擊【2】
- PHP消息隊列
- php+mysql 模擬發送郵件隊列
- php+mysql 模擬訂單處理隊列
- php+redis 模擬秒殺隊列
- RabbitMQ 消息隊列系統
- beanstalkd
- PHP構建即時通訊
- WebSocket協議
- workerman
- PHP變量的作用域
- PHP傳值和傳引用的區別
- PHP匿名函數
- PHP遞歸函數&應用
- PHP單例模式
- PHP性能優化
- RESTful
- 集群
- 增加pgsql擴展
- php.ini路徑查找
- Swoole Compiler
- mysql 主從
- 主從
- mysql-proxy
- window docker環境