一、架構演變
- 從單機結構到集群結構,你的代碼基本無需要作任何修改,你要做的僅僅是多部署幾台服務器,每台服務器上運行相同的代碼就行了。
- 但是,當你要從集群結構演進到微服務結構的時候,之前的那套代碼就需要發生較大的改動了。
- 所以對於新系統我們建議,系統設計之初就采用微服務架構,這樣后期運維的成本更低。
- 但如果一套老系統需要升級成微服務結構的話,那就得對代碼大動干戈了。所以,對於老系統而言,究竟是繼續保持集群模式,還是升級成微服務架構,這需要你們的架構師深思熟慮、權衡投入產出比。
二、集群
程序單機處理達到瓶頸時,就將程序部署在多台服務器上,這樣就構成了一個“集群”。集群中的每台服務器是這個集群的一個節點。每台機器都提供相同的服務,這樣系統的處理能力就相同於提升了好幾倍
一)集群分為三種類型
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影響現有的系統業務。
微服務與分布式的細微差別是:微服務的應用不一定是分散在多個服務器上,他可以是同一服務器。
嚴格來說:分布式是也是一種微服務,但是微服務不一定是分布式
四)總結
- 集群:多個服務器部署相同的模塊,干相同的事
- 分布式:多個服務器部署多個子模塊,分別干不同的事
- 微服務:不一定是多個服務器,可能在一個服務器上,部署多個子模塊分別干不同的事
- 好的設計應該是分布式和集群的結合,先分布式再集群
- 具體實現就是業務拆分成多個子業務,然后針對每個子業務進行集群部署
- 好處:每個子業務若出了問題,整個系統完全不會受影響