單機和集羣和分佈式和微服務區別

分佈式架構下,木桶理論同樣存在,其性能高低是由於運行最慢的那個節點
決定的,因此一個集羣中的機器配置儘量一致,Primary與mirror實例的分佈
也需要規劃好。(例如:如果一個segment上的所有primary實例對應的
mirror實例都在另外一個節點上,則當一個節點宕機時,整體性能下降50%

下面就正經解釋下三種結構的區別吧~

單機結構

我想大家最最最熟悉的就是單機結構,一個系統業務量很小的時候所有的代碼都放在一個項目中就好了,然後這個項目部署在一臺服務器上就好了。整個項目所有的服務都由這臺服務器提供。這就是單機結構。

那麼,單機結構有啥缺點呢?我想缺點是顯而易見的,單機的處理能力畢竟是有限的,當你的業務增長到一定程度的時候,單機的硬件資源將無法滿足你的業務需求。此時便出現了集羣模式,往下接着看。

集羣結構

集羣模式在程序猿界有各種裝逼解釋,有的讓你根本無法理解,其實就是一個很簡單的玩意兒,且聽我一一道來。

單機處理到達瓶頸的時候,你就把單機複製幾份,這樣就構成了一個“集羣”。集羣中每臺服務器就叫做這個集羣的一個“節點”,所有節點構成了一個集羣。每個節點都提供相同的服務,那麼這樣系統的處理能力就相當於提升了好幾倍(有幾個節點就相當於提升了這麼多倍)。

但問題是用戶的請求究竟由哪個節點來處理呢?最好能夠讓此時此刻負載較小的節點來處理,這樣使得每個節點的壓力都比較平均。要實現這個功能,就需要在所有節點之前增加一個“調度者”的角色,用戶的所有請求都先交給它,然後它根據當前所有節點的負載情況,決定將這個請求交給哪個節點處理。這個“調度者”有個牛逼了名字——負載均衡服務器。

集羣結構的好處就是系統擴展非常容易。如果隨着你們系統業務的發展,當前的系統又支撐不住了,那麼給這個集羣再增加節點就行了。但是,當你的業務發展到一定程度的時候,你會發現一個問題——無論怎麼增加節點,貌似整個集羣性能的提升效果並不明顯了。這時候,你就需要使用微服務結構了。

分佈式結構

先來對前面的知識點做個總結。

從單機結構到集羣結構,你的代碼基本無需要作任何修改,你要做的僅僅是多部署幾臺服務器,每臺服務器上運行相同的代碼就行了。但是,當你要從集羣結構演進到微服務結構的時候,之前的那套代碼就需要發生較大的改動了。所以對於新系統我們建議,系統設計之初就採用微服務架構,這樣後期運維的成本更低。但如果一套老系統需要升級成微服務結構的話,那就得對代碼大動干戈了。所以,對於老系統而言,究竟是繼續保持集羣模式,還是升級成微服務架構,這需要你們的架構師深思熟慮、權衡投入產出比。

OK,下面開始介紹所謂的分佈式結構。

分佈式結構就是將一個完整的系統,按照業務功能,拆分成一個個獨立的子系統,在分佈式結構中,每個子系統就被稱爲“服務”。這些子系統能夠獨立運行在web容器中,它們之間通過RPC方式通信。

舉個例子,假設需要開發一個在線商城。按照微服務的思想,我們需要按照功能模塊拆分成多個獨立的服務,如:用戶服務、產品服務、訂單服務、後臺管理服務、數據分析服務等等。這一個個服務都是一個個獨立的項目,可以獨立運行。如果服務之間有依賴關係,那麼通過RPC方式調用。

這樣的好處有很多:

  1. 系統之間的耦合度大大降低,可以獨立開發、獨立部署、獨立測試,系統與系統之間的邊界非常明確,排錯也變得相當容易,開發效率大大提升。
  2. 系統之間的耦合度降低,從而系統更易於擴展。我們可以針對性地擴展某些服務。假設這個商城要搞一次大促,下單量可能會大大提升,因此我們可以針對性地提升訂單系統、產品系統的節點數量,而對於後臺管理系統、數據分析系統而言,節點數量維持原有水平即可。
  3. 服務的複用性更高。比如,當我們將用戶系統作爲單獨的服務後,該公司所有的產品都可以使用該系統作爲用戶系統,無需重複開發。

 

分佈式是指將不同的子業務分佈在不同的地方。而集羣指的是將幾臺服務器集中在一起,實現同一業務。

分佈式中的每一個節點,都可以做集羣。而集羣並不一定就是分佈式的。

分佈式是按照業務劃分,把一個業務劃分成一堆子業務,,每個子業務又按照集羣管理,分佈在不同服務器上,

微服務概念是把一個業務劃分成很多細微服務,每個微服務可以分在一個服務器上也可以不同服務器(這點導致分佈式一定是微服務,微服務不一定是分佈式)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章