負載均衡和分散式是一個意思嗎,有哪些區別?
並不是同一回事,目前常用實現負載均衡的伺服器是Nginx,接下來我就用Nginx來舉例,說明分散式和負載均衡的差別。
負載均衡你應該經常聽人說Nginx具有負載均衡的能力,但是這是什麼意思呢?舉個例子,某公司開發了一個服務,後端服務布置在Tomcat上,這個Tomcat目前能夠承受的qps最多只有5000,但是隨著公司規模擴大,用戶越來越多,這個伺服器逐漸無法承擔瞬時間大量的請求了,時不時的就宕機。總是重啟服務也不行,因為停服期間,對用戶使用體驗是有很糟糕的影響的。
那怎麼辦呢,此時就該引入Nginx,利用Nginx的負載均衡能力。
我們部署兩台Tomcat,然後對外暴露給用戶的host和port指向這個Nginx,當用戶發送請求的時候,Nginx會根據兩個Tomcat的健康情況決定把這個請求分給哪個(經過測試,兩台伺服器健康度相同的時候,Nginx會均勻的將請求分給兩台伺服器)。這樣,從用戶的角度,這個服務的qps的上限就達到了10000。
這就是負載均衡,可以看見,Nginx是將請求分給兩台相同的機器,即這兩台機器的功能和作用是相同的,可以理解為這兩台機器組成了一個集群。
分散式分散式與集群的區別在於,分散式是對外提供一個整體的服務,但是內部其實是將不同的服務模塊部署在不同的Tomcat上。從某種程度上說,與微服務有點像,但是又有差別。分散式也需要用到Nginx,用的是Nginx的反向代理功能。舉例,一個點外賣產品提供下單與查詢的能力(非常簡化,細節勿究),這兩個功能分布部署在兩個Tomcat上,從域名上看分別是
http://xxx.yyy.cn/order/
...和http://xxx.yyy.cn/search
/...,但是其實http://xxx.yyy.cn/
其實綁定的是Nginx,請求發送到Nginx之後,Nginx根據配置再決定是將請求發給負責查詢的Tomcat還是負責下單的Tomcat。從架構上看,兩台不同功能的Tomcat,這叫分散式。以上是我的淺見,歡迎各位在下方評論區交流。
我是蘇蘇思量,來自BAT的Java開發工程師,每天分享科技類見聞,歡迎關注我,與我共同進步。
根據我所知道的回答一下這個問題。
負載均衡和分散式還真的不是一個意思。下面就分別說一說。
分散式計算分散式計算是相對於集中式計算而言的,將應用分解成許多小的問題,分配給多台計算機進行處理,各個計算機之間通過高速網路交換數據,實現進程間的通信。可以大大提高計算效率。
一個分散式系統需要若干個網路互連的計算機,這些計算機相互協作完成一個共同的目標。
具體的過程就是:將需要大量計算的項目數據分割成小塊,多台計算機分別計算,再將運算的結果統一後得到數據結論。
如下圖所示:
負載均衡負載均衡主要建立在現有的網路結構基礎之上,通過一種廉價的方法增加網路設備或者伺服器的帶寬,是為了提高數據的吞吐量,提高冗餘度、存在設備或者系統的備份能力,增強網路的靈活性和可用性。
主要的負載均衡技術有二層負載均衡、三層負載均衡、高層負載均衡。
二層負載均衡
二層負載均衡是指網路設備通過鏈路聚合的方式實現負載均衡,如下圖所示,多條物理的鏈路聚合成一條邏輯鏈路,根據特定的演算法和協議(LCAP協議)在兩條物理鏈路中實現負載均衡,同時具有備份鏈路的功能,一條中斷,並不影響網路數據的傳輸。
三層負載均衡
三層負載均衡最常用的技術就是VRRP(網關冗餘協議)通過將不同的網關放在不同的三層設備中,實現負載均衡。還有通過RIP協議、OSPF協議實現等價路由協議的負載均衡。
如下圖所示就是一個OPSF協議實現的等價路由協議負載均衡,R1到R2存在6條物理線路,可以模擬成一條邏輯線路,根據特定的演算法實現數據包的負載均衡,斷了某一條線路不影響數據的傳輸。
高層負載均衡
高層負載均衡是指三層以上的負載均衡技術,比如通過軟體技術實現的負載均衡、http服務的負載均衡、DNS實現的負載均衡等。
其中DNS負載均衡是通過DNS伺服器實現的,將用戶的請求均勻的分不到web伺服器上,可以根據地域區分請求。
nginx負載均衡是通過反向代理伺服器實現的負載均衡,將請求均勻的分擔到應用伺服器上,有5種均衡策略可以選擇。
負載均衡和和分散式的區別數據處理方面
負載均衡提高數據的吞吐量
分布提高數據的並發處理能力
實現機制方面
負載均衡是一種網路設備或者伺服器的冗餘機制,存在備份鏈路
分散式為了完成同一個計算服務,將任務分擔到各個單元執行,各個單元的進程通過網路互傳數據。
對於負載均衡和分散式,大家有什麼看法呢,可以在評論區留言討論。
若需更多幫助,請私信關注。系誒些
不是一個意思,下面按照我的理解說一下什麼是分散式,什麼是集群,如果有理解錯誤的地方,請大家留言指正。
集群同一個業務系統,部署在多台伺服器上,這個就叫做集群。
集群裡面,每一台伺服器實現的功能沒有差別,代碼都是一樣的。
比如我有一個系統A,提供一個很簡單的介面,根據員工編號查詢員工姓名和他的考勤記錄。
當有一個系統調用這個介面的時候,我部署一台伺服器就夠用了。
當有一百個系統調用這個介面的時候,我就部署十台伺服器,前面掛一個負載均衡。
這就是集群部署,當一台伺服器掛了以後,不影響功能使用。
我接觸過的負載均衡軟體有Nginx、LB、HAProxy,也有硬體諸如F5。
分散式一個業務被拆成多個子業務,部署在多台伺服器上,這個就叫做分散式。
分散式裡面,每一台伺服器實現的功能是有差別的,代碼也是不一樣的,分散式每台伺服器功能加起來,才是完整的業務。
還是這個業務場景,我有一個系統A,提供一個很簡單的介面,根據員工編號查詢員工姓名和他的考勤記錄。
我拆開兩個系統:人員管理系統B和考勤系統C,分別部署在兩台伺服器上。
這個就是分散式。
好處是什麼呢?如果有系統D也需要使用人員信息,傳統的方式系統A和D都要有人員信息管理功能,意味著兩個系統各自維護人員信息,那新入職一個員工,可能要在系統A和D裡面都維護;如果是有EFGHI系統都需要人員信息呢?
而分散式解決了這個問題,人員信息單獨拎出來是一個系統,維護人員信息,同時對外提供查詢服務。
分散式+集群很多時候要結合起來一起用。
還是這個業務場景,我有一個系統A,提供一個很簡單的介面,根據員工編號查詢員工姓名和他的考勤記錄。
我拆開兩個系統:人員管理系統B和考勤系統C。
那麼系統B部署在十台伺服器上,系統C部署在十台伺服器上;前面分別掛負載均衡;這樣保證了每個子業務功能的高可用。
希望我的回答,能夠幫助到你!
我會持續分享Java程序開發、架構設計、職業發展等方面的知識和見解,希望能得到你的關注今日頭條【會點代碼的大叔】,轉載請註明出處。
負載均衡
舉例說明:一個人扛1000斤大米,對於普通人絕對被壓死,但10個人分攤一下,1個人扛100斤,那應該輕鬆一點;如果還扛不動,就要100個人分攤,那1個人扛10斤應該就沒問題了。
這個應該就明白了吧,就是多找人分攤,壓力分散開。
分散式舉例說明:有個男人比較疼老婆,既能燒飯,洗衣服,帶孩子,還能賺錢。之前都是他一個人忙著,還能夠應付的來;但有一天公司提拔了他,但佔用了他很多的時間,那他時間就不夠用了,怎麼辦?那隻能請保姆(伺服器)安排好保姆去燒飯,洗衣服,帶孩子。但保姆又不願意都做。那就多請幾個唄。各個保姆的職責分配好,各自完成各自的任務。
這樣就多出來一個溝通問題,之前就這個男人做,他什麼都知道;現在多個保姆再做。這樣就增加了系統複雜度。
說到底就是職責劃分明確
首先說什麼是分散式
按照功能點把一個系統進行拆分,拆分成獨立的功能,單獨為某一個節點添加伺服器,需要系統之間配合才能完成的邏輯,各系統之間通信就需要Dubbo+Zookeeper了。
負載均衡
可以說是為了解決前台訪問人員過多而導致伺服器崩潰的一種方法。有用Nginx做負載也有用Apache做負載均衡的。一般有的用Nginx代理Tomcat伺服器或者WebLogic伺服器來緩解伺服器壓力。
負載均衡,很明顯,可以分擔流量,而做到流量均衡,可以指技術,用在網路和伺服器上,增加帶寬,分擔壓力,做到流量均衡,也可以指負載均衡設備,有的設備如防火牆也有負載均衡,主要是流量分擔。而分散式,這個就很難去定義你到底指的是什麼,針對伺服器的話,一般是指部署方式,分散式部署,將一部分的功能或組件放到其他地方,從而實現功能上的分擔。還有集中式部署,等,很明顯,他們有相同點,但是區別還是很大的。
架構思維 一個新系統 ,在架構階段基於實際業務及使用場景 ,對系統進行模塊拆分成多個小系統 (這時要考慮好小模塊之間的通信用什麼rpc框架 資料庫 安全等這些問題) 這個過程可以稱為分散式設計;多個小模塊小系統有些是需要集群設計有些不需要 ,對於負載量大例如訂單系統可以預見後續負載量會很大一台機子肯定是hold不住的要部署多台機子的 那就需要集群,對於比如郵件服務可能一台機子就夠了 那就不用考慮.... 沒完
一家餐廳,本來廚房只有一位師傅,由師傅負責洗菜、擇菜、切菜、炒菜,後來顧客增多了;就請了個幫廚負責洗菜、擇菜和切菜,之前的師傅只負責炒菜了;後來顧客更多了,就又請了一位師傅炒菜,這樣就有一個幫廚負責洗菜、擇菜還有切菜,有兩位師傅負責炒菜。以上就是分散式和集群[靈光一閃]
分散式是一種架構,負載均衡是一種技術手段。負載均衡就是分散式的一種應用情況。
推薦閱讀:
※面向現代機器人的分散式驅動技術Synapticon 中國首秀
※分散式系統概念解疑
※分散式理論(三) - 2PC協議
※分散式理論(四) - 3PC協議
※關於分散式計算的一些概念