微服務分布式
1. 3分鍾讀懂何為分布式,微服務和集群
微架構也是SOA的一種,只是其component更小而已。Spring等框架中,常有依賴注入,Ioc等技術,通過配置文件,決定API調用,
2. 微服務架構會和分布式單體架構高度重合嗎
共享類庫是整個服務運行過程中最需要的部分;另一方面,這些類庫總的來說也可以被認為是「一種平台」。包括像Spring、Guava和那些通常被用在路由消息和日誌記錄里的類庫。在最後,一個系統的性能優劣取決於是否具備100+類庫的組合。如果一個服務不能和系統進行互動的話,只能說明這些類庫的可用性有問題,Christensen稱這種情況為分布式單體架構。
本質上來講,你所做的那些將成本花在分布式系統上的事情,其實只是在網路上推廣單體架構,但是並沒有從微服務架構裡面獲得任何好處。至於丟失的這些好處就包括多語言特點,也就意味著你所開發的這個服務錯過了利用最好的技術來解決特殊問題的可能性,包含組織上和技術解藕方面的問題。解決處理了這些問題有助於團隊進行技術升級,而不需要在第一時間去獲得授權。
不妨在這里簡單介紹一下單體架構應用(Monolith),網上對微服務進行介紹的文章常常以單體架構開始。這里也不例外,只有在知道了單體架構的不便之後才能更容易地理解微服務架構模式所具備的各種優點。
開發出來的服務應該是什麼樣子呢?通常情況下,這個服務所對應的代碼是由多個項目所組成,各個項目會根據自身所提供功能的不同具有一個明確的邊界。在編譯時,這些項目會被打包成為一個個JAR包,並最終合並在一起形成一個WAR包。
接下來,開發者需要將該WAR包上傳到Web容器中進行解壓,並重新啟動伺服器。在執行完這一系列操作之後,對服務的編譯及部署流程也就完成了。如果按照單體架構組織的代碼來運行的話,會生成一個包含了所有功能的WAR包,因此在對服務的容量進行擴展的時候,我們只能選擇重復部署這些WAR包來擴展服務能力,而不是僅僅擴展系統瓶頸的組成。
但是這種擴展方式極大地浪費了資源。比如(上圖):在一個服務中,某個組成的負載已經達到了90%,也就是到了不得不對服務能力進行擴容的時候了。而同一服務的其它三個組成的負載還沒有到其處理能力的20%。
由於單體架構服務中的各個組成是打包在同一個WAR包中的,因此通過添加一個額外的服務實例,可以將需要擴容的負載降低到45%,但是也使得其它各組成的利用率更為低下。可以說,所有的不便都是由於單體架構服務中一個WAR包包含了該服務的所有功能所導致的。而解決該問題的方法就是微服務架構模式。
Don』t Repeat Yourself的字母縮寫DRY對很多人來說都不陌生,意即不要重復造輪子。在共享代碼的業務邏輯中,孤立的去部署變化條件的方式正在被摒棄,因為這種做法會直接影響服務執行代碼的效果。Christensen強調共享代碼在服務邊界裡面是相當完美的,可是一旦泄漏的話,就會有潛在的耦合可能性。Sam Newman在他的新書《Building Microservices》里提到:
The evils of too much coupling between services are far worse than the problems caused by code plication。
服務之間太多的耦合所帶來的弊端,遠比簡簡單單復制代碼所帶來的問題還要嚴重很多倍。
Christensen認為可替代的解決方案就是採用穩定的協議,隱藏所有的實現細節,只將數據契約和網路協議暴露出來,在不依賴服務實現的前提下,用戶都能夠使用任何技術和編程語言,這才是網路該做的事情。Christensen還指出,雖然在如日誌記錄、分布式跟蹤、路由等領域沒有強制的標准化需求,但還是應該啟用獨立的類庫,這樣用戶才有權選擇是否使用這些網路服務。
Christensen認為,這樣的低級錯誤是很容易經常性犯的,因為我們都知道如何使用共享類庫,我們也常常在短期內進行優化來達到更高效率。他還說,雖然推遲解藕的成本較高,可是解決方案也是有的,努力在剛開始的時候就把合適的工具用在合適的地方,物盡所用才能發揮最大效果。
在最後的問答過程中他提到,使用一個大的框架無可厚非,只要這個框架被當作內部一個獨立的服務使用就行,但如果整個系統的架構不採用這個大的框架也並無大礙,因為這會避免出現長期耦合。微架構或者SOA架構真正發揮所長的地方在於,根據彼此獨立部署的邏輯服務,這些邏輯服務可以獨立於其他服務進行擴展,而且能夠實現獨立的故障切換。
紅帽公司中間件部門工程副總裁Mark Little博士也曾說過:「我在微服務架構方面擔心的問題之一就是,你有一個整體式單體架構應用,假設你隨意把它分解成多個服務,到頭來就會分解得過細,最後會有10個、100個甚至1000個微服務。但是這些微服務又彼此高度依賴,以至於如果某一個服務出現故障,其餘服務很有可能也會出現故障。這種情況下,你將一無所獲。你有999個服務就在那裡乾等著另一個服務恢復正常運行之後才能工作。」
3. 什麼是微服務架構啊
微服務架構其實沒有一個非常准確的定義,大概描述的是一個大型復專雜軟體應用系統由若屬干個微服務組成。系統中的各個微服務能被獨立部署和擴展,每個微服務還能提供一個穩固的模塊邊界。各個微服務之間是松耦合的,微服務很小,專注於做好一件事情。微服務框架帶了良好的技術異構性、彈性、擴展性,它的簡化部署為持續交付提供了巨大推動力。但是它同時也帶來一些挑戰,比如分布式事務一致性,網路性能消耗等問題。所以選用的時候要結合實際業務考慮,若想深入學習的話建議使用些現成的一些大廠商開源的微服務框架開發試試手,用一用spring cloud、servicecomb,網上資料都很多,希望這個回答對你有幫助。
4. 分布式服務架構與微服務架構概念的區別與聯系是怎樣的
微架構也是SOA的一種,抄只是其component更小更多而已。
Spring等框架中,常有依賴注入,Ioc等技術,通過配置文件,決定API調用,一個不是很恰當的比喻,把這些API分開,包裝成Service,放在網路上,每個有自己的process,通過與語言無關的協議通訊,類似Rest之類的,這就成了微架構。
據說,好處是容易deploy,更靈活,解耦;壞處是網路限制性能,不易確定系統state等等。
個人感覺,微架構只是把復雜性推到了其他的地方,過分強調解耦,可能造成不必要的細化,導致系統更為復雜,難以維護,不是很看好這種思路。
5. 微服務架構的分布式事務問題如何處理
分布式系統架構中,分布式事務問題是一個繞不過去的挑戰。而微服務架構的流行,讓分布式事問題日益突出!
下面我們以電商購物支付流程中,在各大參與者系統中可能會遇到分布式事務問題的場景進行詳細的分析!
6. Java使用微服務,分布式
消息隊列了解下啊
7. 分布式微服務為什麼很難
分布式光伏已經是大多數光伏企業工作的重點,比如說古瑞瓦特今年就將分布式列為重點專。除了政屬府的提倡和支持下,分布式光伏發電不僅能夠有效提高同等規模光伏電站的發電量,同時還能有效解決了電力在升壓及長途運輸中的損耗問題。
8. 為什麼說分布式事務不再適用於微服務架構
樓主這個說法很標准,不是不可用,只是不適用。我們看下為什麼分布式事務不再適用於微服務架構。
多個微服務應用就構成了分布式系統,由此會帶來固有的復雜性。開發者需要在RPC或者消息傳遞之間選擇並完成進程間通訊機制。更甚於,他們必須寫代碼來處理消息傳遞中速度過慢或者不可用等局部失效問題。當然這並不是什麼難事,但相對於單體式應用中通過語言層級的方法或者進程調用,微服務下這種技術顯得更復雜一些。
另外一個關於微服務的挑戰來自於分區的資料庫架構。商業交易中同時給多個業務分主體更新消息很普遍。這種交易對於單體式應用來說很容易,因為只有一個資料庫。在微服務架構應用中,需要更新不同服務所使用的不同的資料庫。使用分布式交易並不一定是好的選擇,不僅僅是因為CAP理論,還因為今天高擴展性的NoSQL資料庫和消息傳遞中間件並不支持這一需求。最終你不得不使用一個最終一致性的方法,從而對開發者提出了更高的要求和挑戰。
部署一個微服務應用也很復雜,一個分布式應用只需要簡單在復雜均衡器後面部署各自的伺服器就好了。每個應用實例是需要配置諸如資料庫和消息中間件等基礎服務。相對比,一個微服務應用一般由大批服務構成。例如,根據Adrian Cockcroft,Hailo有160個不同服務構成,NetFlix有大約600個服務。每個服務都有多個實例。這就造成許多需要配置、部署、擴展和監控的部分,除此之外,你還需要完成一個服務發現機制,以用來發現與它通訊服務的地址(包括伺服器地址和埠)。傳統的解決問題辦法不能用於解決這么復雜的問題。接續而來,成功部署一個微服務應用需要開發者有足夠的控制部署方法,並高度自動化。
總而言之,一句話概括,由於每個微服務實現方式五花八門,當微服務多了情況下,一個服務流程可能會涉及多個服務,如果這些微服務耦合過於強,那必然要確保其事務的一致性,但是這是個及其困難的事情。
9. 什麼叫分布式服務框架
主要提供微來服務發布,服務自治理和服務監控,因為復雜的業務需求,會造成線上服務的混亂,和連接資料庫的混亂.
微服務的好處是:
業務解耦,方便擴容,方便系統按模塊升級,模塊重用,開發新業務簡單,開發人員可以專注某一業務,方便代碼管理,方便資料庫優化
微服務的壞處:(分布式服務框架要解決的問題)
每個系統之間的關系變得非常復雜
隨著調用的業務增多,底層的模塊需要高可用性和並發
需要分布式Session框架支持
分層後增加測試復雜度