近年來分布式架構火遍了大江南北,自己也去學習了一些諸如dubbo,springcloud之類的分布式架構,可是學了之後不由得就會問自己一個問題,為什麼非得用這個東西啊?
看了一些部落格文章,總結了下,分布式架構其實是偏向于,大型網站,高并發,高QPS的情況。對于一些通路量較小的應用和網站,考慮到項目成本,其實沒有必要強行分布式。是以技術選型要根據實際情況,靈活開發的大環境下,炫技什麼的沒有意義。
但這并不影響我學習分布式的熱情。
那我們先看一下傳統單節點應用的優缺點吧
優點:
1.開發簡單:你開發需要調用的接口,查的表,都可以在你這一套應用中找到,即使是跨業務子產品,也沒關系,因為其他業務的代碼你是看得到的,對你而言是透明的。
2.測試簡單:
3.部署簡單:
測試和部署一起說,其實就是一句話,單個應用,一個包,甚至說一個庫,相當于一整個生态都在你手中,與外系統互動少,兩個字:可控。
缺點:
1.項目臃腫,維護成本高,業務代碼犬牙交錯,不易定位bug,即使定位到bug,也有可能解決了舊bug,引發了新bug。
2.資源無法隔離,共享一個資料庫,或者一塊記憶體,一旦某個功能出現故障,很可能導緻整個系統性能下降甚至不可用 --這是最不能忍的
3.無法靈活擴充。我相信你又要說了,單體應用也可以叢集部署啊,咋不能擴充啦。那我問你,如果我隻是某一個功能子產品出現瓶頸,你告訴我要整個系統水準擴充,這靈活嗎?成本是不是太高了?
4.傳遞周期長,單個應用你是不是要等所有的功能開發測試完成一起上線傳遞?這樣風險太大,任何一個環節出了問題,都有可能拖慢傳遞周期。
那麼分布式架構的優點就不言而喻了吧,分布式就是為了解決這些問題的。
我們重點關注的應該是他的缺點:
1.性能,分布式系統是跨程序,跨網絡的,受帶寬和網絡延遲的影響
2.還是對于網絡的依賴,任何一次遠端調用都可能會失敗,故障點會更多。
3.引入各種中間件,異步操作,增加了功能實作的複雜度
4.需要在C(一緻性) A(可用性)P(分區容錯性)中做出取舍
5.運維成本變高,每個獨立的應用都要部署,日志,監控
什麼是架構?兩個字,取舍。