集群、分布式和微服務


一、架構演變

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

二、集群

  程序單機處理達到瓶頸時,就將程序部署在多台服務器上,這樣就構成了一個“集群”。集群中的每台服務器是這個集群的一個節點。每台機器都提供相同的服務,這樣系統的處理能力就相同於提升了好幾倍

  一)集群分為三種類型

  1、LB:Load Balancing:負載均衡,多個主機組成,每個主機只承擔一部分的訪問請求

  2、HA:High Availiablity:高可用,避免單點故障SPOF(single point of failure)

  • MTBF:mean time between failure 平均無故障時間,正常時間
  • MTTR:mean time to restoration(repair)平均恢復前時間,故障時間
  • A = MTBF / (MTBF+MTTR )  (0,1): 99%,99.5%,99.9%,99.99%,99.999%

  SLA:服務等級協議(全稱:service level agreement) 是在一定開銷下為保障服務的性能和可用性,服務提供商與用戶定義的一種雙方認可的協定。這個開銷是驅動提供服務質量的主要因素。在常規的領域中,總是設定所謂的三個9,四個9進行表示,當沒有達到這種水平的時候,就會有一些列的懲罰措施。而運維的目標就是達成這種服務水平。

  停機時間又分為兩種,一種是計划內停機時間,一種是計划外停機時間。而運維主要關注計划外停機時間。

  3、HPC:high-performance computing 高性能 https://top500.org/

三、分布式

  一)分布式系統

  1、分布式結構概述

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

  2、分布式常見應用

  • 分布式應用:服務按照功能拆分,使用微服務
  • 分布式靜態資源:靜態資源放在不同的存儲集群上
  • 分布式數據和存儲:使用key-value緩存系統
  • 分布式計算:對特殊業務使用分布式計算,比如Hadoop集群

  二)注意事項

  1、注意事項

  分布式不一定就是不同的組件,同一組件也可以,關鍵在於是否通過交換消息的方式進行協作;分布式系統也可以是一個集群

  例如:zookeeper的節點都是對等的,但它自己構成了一個分布式系統。

  2、舉例說明

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

  三)分布式的好處

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

  四)分布式的實現

  分布式的核心就一個字:拆。只要是將一個項目拆分成了多個模塊,並將這些模塊分開部署,那就算是分布式。(分布式拆了就行)

  如何拆呢?有兩種方式:水平拆分,垂直拆分(也稱為“橫向拆分”和“垂直拆分”)

  1、水平拆分

  根據“分層”的思想進行拆分。例如,可以將一個項目根據“三層架構”拆分成 表示層(jsp+servlet)、業務邏輯層(service)和數據訪問層(dao),然后再分開部署

  2、垂直拆分

  根據業務進行拆分。例如,可以根據業務邏輯,將“電商項目”拆分成“訂單項目”、“用戶項目”和“秒殺項目”。顯然這三個拆分后的項目,仍然可以作為獨立的項目使用。像這種拆分的方法,就成為垂直拆分。

 

四、微服務

  微服務就是非常微小的服務。微服務可以理解為非常細粒度的垂直拆分。

  細粒度的垂直拆分

“訂單項目”本來就是垂直拆分后的子項目,但實際上“訂單項目”還能進一步拆分為“購物項目”、“結算項目”和“售后項目

 

五、簡述集群、分布式和微服務的區別與關系

  一)集群

  集群的意義在於利用多個服務器實現統一業務來提高運行效率

  例如:一個任務需要消耗一台服務器一個小時,四個服務器一起運行運行,只需要一個小時

  二)分布式

  分布式的意義在於把不同的業務分配給不同的服務器來完成,實現多服務器共同工作的效果,提高運行效率

  例如:一個產品有A+B+C+D四個子業務,每個業務耗時一台服務器一個小時,一台服務器需要1*4=4個小時
  使用分布式,不考慮各個服務器之間的通信時間等消耗,只需要1個小時

  三)微服務

  微服務是一種架構風格

  分布式和微服務很像,把一個系統的業務拆分成多個獨立的服務,系統中的各個微服務的各個微服務可以獨立部署,各個服務之間松耦合的

  微服務的設計是為了不因為某個模塊的bug影響現有的系統業務。

  微服務與分布式的細微差別是:微服務的應用不一定是分散在多個服務器上,他可以是同一服務器。

  嚴格來說:分布式是也是一種微服務,但是微服務不一定是分布式

  四)總結

  • 集群:多個服務器部署相同的模塊,干相同的事
  • 分布式:多個服務器部署多個子模塊,分別干不同的事
  • 微服務:不一定是多個服務器,可能在一個服務器上,部署多個子模塊分別干不同的事
  • 好的設計應該是分布式和集群的結合,先分布式再集群
    • 具體實現就是業務拆分成多個子業務,然后針對每個子業務進行集群部署
    • 好處:每個子業務若出了問題,整個系統完全不會受影響


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM