-
1 # 工業級智慧家居
-
2 # ROSAN
任何一個新的技術引入的時候必然會帶來新的問題,在瞭解分散式系統之前,首先要了解的是為什麼要使用分散式系統架構?分散式系統系統的好處?是隻有弄清楚了這些問題,我們才能真正弄清楚分散式系統帶來的問題是什麼
1. 為什麼要使用分散式系統?
這個問題要從軟體工程學的角度上面出發,在軟體開發的初期,由於開發的人數較少,所有的模組程式碼都是在一個專案工程裡面,隨著業務的不斷擴充套件以及人員的規模越來越大,這個就會帶來一些問題,任何一個小的邏輯改動影響都是所有模組的,而講專案中的模組逐步的拆分開來,可以降低專案的複雜性,這個是為什麼要用分散式系統的起源
2.分散式系統的好處?
1)專案模組之間關係明確
2)每一個模組可以交給不同的團隊來維護,便於團隊管理
3)由於採用分散式服務了,那麼在部署的時候的成本會變低
4)提高了可拓展性,當某一個結點在線上壓力比較大的時候,可以動態拓展壓力大的結點即可
3.分散式系統所帶來的問題?
1.如何保證高可用,當某個服務部署多個結點的時候,當請求到達某個宕機的結點後,如何保證服務可用
2.如何保證資料一致性,服務都是部署在不同的結點之上的,如何保證各個中介軟體的資料一致性
3.如何解決多結點鏈路問題
以上就是我的一點思考吧,望採納
-
3 # 會點程式碼的大叔
分散式系統在增大系統容量、提高系統複用性、使系統擴充套件性更高的同時,同時也有不少難點和缺點。
網路開銷傳統架構,所有的業務邏輯都被打成一個程式碼包進行部署,所有模組執行都是在同一個JVM中,不會存在網路的開銷(應用到資料庫的網路開銷不討論,這裡和主要指程式碼和程式碼之間的呼叫);而分散式架構中,模組和模組可能會被部署到不同的機器上,它們之間的訪問需要透過遠端呼叫的方式來實現,網路IO就成為不可忽視的效能瓶頸了。
特別是在微服務的階段,服務被拆分的比較小,一次完整的業務流程可能需要幾個微服務,這時候網路問題更會凸顯出來。
通常我們會增加頻寬、使用專線等方式,降低網路開銷;程式碼方面,會採用失敗重試或者非同步化的方式,來解決網路延遲問題,後者也無疑增加了程式碼實現難度。
服務依賴性問題一個完整的應用,被拆分成了多個服務,服務和服務之間肯定是有依賴性的;如果有一個關鍵性的服務掛掉了,那麼整個服務鏈路上的所有服務,都會產生問題。
這時候就需要進行服務治理,梳理出來關鍵業務和非關鍵業務,以及服務的呼叫路徑;資料庫要做響應的隔離;避免非關鍵性業務把資料庫搞死,從而導致關鍵性業務也變成不可用;所以,理論上每個服務都要有獨立的資料庫,資料不做共享,但是現實中經常無法做到。
資料一致性問題Consistency:強一致性,事務保障,ACID模型;
Availiablity:高可用性,避免單點;
Partition tolerance:高可擴充套件性。
我們經常會說的CAP原理,也就是CAP這三個因素不可能兼顧,最多隻能滿足兩個;分散式系統來說更為強調A和P,所以會選擇適當放棄一致性,或者說分散式系統通常會選擇保證最終一致性;為解決這個問題,架構中需要引入訊息表、MQ(事務訊息)或其他的補償手段,這無疑也加大了專案實現的難度。
另外,分散式系統也會讓測試變得更加的複雜,多層的架構也讓運維變得複雜;分散式架構在提高系統可用性的同時,也帶來了更多的挑戰。
-
4 # MR杜wy
看了下下面的回答都是“照本宣科”,“複製貼上”的回答,晦澀難懂,毫無新意。
站在我個人的角度:
設計難點:
如何保證每臺伺服器能均衡的分擔使用者的請求?
如何保證某一臺伺服器宕機,而正在該伺服器訪問的使用者們在毫無感覺中後臺切換到其他伺服器中繼續訪問?
如何保證使用者寫內容/改內容/刪內容到某臺伺服器,而其他伺服器能夠同步更新?
解決上述問題用到哪些開源工具(比如訊息中介軟體、搜尋引擎……)?如何使用這些工具?
希望真正的大牛能夠給出一些見解解決方案,而不是照本宣科,打著IT開發工程師的幌子沽名釣譽來濫竽充數。 -
5 # 數通暢聯
分散式系統是將系統功能進行模組化,並且部署到不同的伺服器上,每臺伺服器實現不同的功能,處理不同的資料。分散式主要是用於減輕伺服器的壓力,提升效率,以及降低系統維護的難度。但由於每臺伺服器處理的業務不同,如果一臺伺服器出現問題,必然會導致系統故障,所以一般分散式系統會和叢集結合使用。
解耦:解耦是分散式系統的重點,在系統設計之初就要確定如何進行解耦、模組劃分,由於不同的模組可能會由不同的團隊進行開發和維護,如果模組間出現業務重疊或者交集過多,就會加大開發以及後期維護的難度。
分佈事務:由於分散式系統將業務進行了拆分,而對於整個系統而言,事務是面向整個業務的,這就要求不同模組如果存在事務,則必須採用分佈事務的機制來保證業務的完整性。
資料處理:分散式系統雖然將業務功能進行了模組化,但是整個系統的資料必然是完整的,那麼在系統設計時要確定好資料的儲存方式,是統一管理還是分開管理,從而保證資料準確性的同時提升系統的執行效率。
回覆列表
分散式系統,指的是一個相同的服務功能或資料運算功能,分別部署到各個地區的伺服器上執行,技術難點資料處理的併發能力,資料分發均衡能力,任務節點鄰近伺服器相應演算法,空閒伺服器任務動態分擔,多虛擬機器命中後結果彙總,以及任務終止功能。以上是分散式的難點和系統必備的特色。