微服務:更愉快還是更嘈雜?
微服務的部署規模在不斷擴大。容器架構的採用和隨後的微服務部署並不是按下一個簡單的按鈕就能完成的,這是一個持續演變的過程。這個演變過程發生在應用程式開發、架構、打包和基礎設施的各個方面。軟體的建立和交付方式在過去幾年中發生了重大轉變。
隨著團隊在這個持續演化的軟體生命週期環境中不斷地探索,他們所在組織的一些獨特方面——他們個人的集體體驗和特定的專案需求——正塑造著這個演化旅程,也就是說,並非每一條通向雲原生的道路都是相同的。應用程式和團隊將利用其中一種或一些甚至是全部方法開啟走向雲原生的道路。
在這裡,我們將專注於微服務。並非所有嘗試建立微服務的應用程式或團隊(從頭開始或拆解單體)都能夠真正意識到微服務架構的好處。通常,由於應用程式設計要求具備前所未有的監控和管理水平,團隊一般都未能取得顯著成功。從建立能夠支援分散式系統問題的環境和基礎設施,到組織和培訓團隊、培養文化和制定運營實踐,再到應用可觀察性和基礎設施即程式碼,以及融入現代DevOps監控工具,團隊的第一次微服務體驗可能是非常混亂的。然而,一旦形成了持續交付的穩定節奏,它們的好處(例如交付速度)卻是其他企業架構應用程式所無法比擬的。
微服務可以幫助團隊實現更快的交付和迭代。微服務為獨立的服務開發團隊帶來語言和技術選擇的民主化——團隊一邊迭代和持續交付軟體(通常作為服務),一邊快速地建立新功能。作為一種設計可擴充套件、可獨立交付的服務的雲原生方法,微服務讓團隊可以以最佳的方式確定服務需求的優先順序。這種提供鬆散耦合功能的做法推動了敏捷性和迭代交付,並強制實現它們所暴露的API的“契約義務”。
來自各個方面的挑戰
由於每個微服務都需要對外暴露API,微服務行為的一致性和版本控制方案的一致性就成了部署微服務時需要面臨的兩大挑戰。大量的微服務不僅加劇了在一致的環境中建立功能、注入DevOps文化和實踐的挑戰,還加劇了確保多個新服務具備互操作性的挑戰。部署的微服務越多,這些挑戰就越嚴峻。
在部署微服務時,更多的移動部件和額外的服務增加了監控的難度。想象一下:你有一個由五個服務組成的應用程式,每個服務又由大約10個容器組成。你對應用程式的物理拓撲及其服務間的邏輯互動的瞭解很快就會過時,因為它的元件會移動。與傳統監控工具支援的靜態虛擬機器不同,微服務的監控工具需要支援臨時構造和原生服務發現。如果你正在使用過時的監控工具,無異於在蒙著眼睛走鋼絲。
微服務部署還可能帶來額外的組織開銷和複雜性。專注於一個服務而不是多個服務可以實現持續交付和敏捷,同時也允許開發人員和運營團隊彼此獨立工作。因此,團隊之間必須保持持續的溝通和協作,才能確保快速迭代服務,而不是去否定DevOps文化。
考慮到所有這些因素,服務團隊應該如何避免責任和工作的擴散,以確保跨微服務的成功交付和運營?
緩解挑戰以獲得收益
雖然服務網格不是什麼銀彈,但它卻試圖解決一個眾所周知的分散式系統的核心挑戰(即沒有同質、可靠、不變的網路)。為了直接解決這些挑戰,服務網格提供了一層新的雲原生可見性、安全性和控制。
服務網格是一個新興的領域,雖然它沒有被納入雲原生應用程式,但為非容器化、非微服務工作負載提供了很多價值。這個額外的工具層為微服務提供了基於策略的網路,描述了網路在面對不斷變化的條件和網路拓撲時的行為。
最後,服務網格提供了一種服務優先的網路,將應用程式開發人員從基礎設施問題中解放出來,如果你願意,還可以通過為服務管理提供可獨立定址的工具層(Layer 5)來擴充套件服務管理職責。服務網格建立了一個網路,讓運營人員能夠定義細粒度的流量控制,在不需要與開發人員互動的情況下影響應用程式的行為。通過宣告性策略,運營人員可以重新控制流經其基礎設施的服務請求。
服務網格提供分散式應用程式服務的可見性、彈性、流量和安全控制,並提供對請求數量、分散式跟蹤和延遲的可觀測性。通過在服務網格上部署微服務,DevOps團隊可以立即獲得指標、日誌和跟蹤資訊,而無需更改應用程式程式碼。服務網格有助於瞭解應用程式執行緩慢的原因,這個問題是服務所有者面臨的最麻煩的問題之一,因為他們不知道是什麼導致應用程式執行緩慢。
DevOps團隊可以從大多數服務網格提供的增強安全性中受益。服務網格可以幫助DevOps團隊識別出不良參與者、標記並阻止使用者傳送大量的非法請求、控制經過身份驗證但沒有呼叫服務許可權的人。
在實踐時,你需要知道些什麼
有很多服務網格部署模型可用在你的微服務架構中。你可以嘗試遵循一些最佳實踐:
衡量必要性:當服務網格變成一種必需品時,這是一種進步。環境越動態,服務越複雜,服務網格的價值就越大。團隊通常先從單個節點的幾個容器開始,當需要擴充套件到幾個節點來獲得彈性時,需要進行容器編排,然後進入服務網格部署階段,因為隨著部署的增長,他們最終將面臨更加嚴峻的挑戰。
瞭解你的應用場景:瞭解對服務網格的依賴程度,以及需要讓服務網格做些什麼,這是使用服務網格的第一步。先從小規模開始,並在進一步深入之前確保它能為你提供你想要的價值。你的基礎設施型別和服務型別將有助於確定要使用哪種服務網格。
例如,某些網格更多地關注容器化環境,而其他網格則更適用於直接在虛擬機器或裸機作業系統上執行的服務。你需要知道你的環境中適合部署哪種服務網格(有些服務網格比較簡單,有些服務網格更容易部署),以及服務網格需要具備哪些功能。Layer5.io為此提供了一些有用的見解。
搞清楚你對網路和應用程式的期望是什麼:你希望從連線微服務的網路中得到什麼好處?你可能希望你的網路儘可能智慧和彈性,讓流量遠離故障以提高叢集的總體可靠性,避免不必要的開銷,如高延遲路由或具有冷快取的伺服器。你可能希望你的網路能夠確保服務之間的流量可以抵禦來自外界的攻擊。你可能希望你的網路能夠通過突顯意外的依賴關係和服務通訊故障為你提供見解。你可能希望你的網路能夠自行收集有關請求的服務級度量指標。
結論
成功部署微服務或採用容器架構並非一蹴而就的事情,大多數團隊肩負維護現有基礎設施和服務的重擔。因此,你可能是循序漸進地轉向雲原生。微服務具有顯著的優勢,並且服務網格可能是解決問題的最佳工具。在實現或考慮使用服務網格時,首先要衡量必要性。在確定有必要使用服務網格之後,請在選擇部署模型之前考慮你的應用場景。如果控制和管理得當,微服務架構會讓你變得更加愉快。
英文原文:https://containerjournal.com/2018/12/05/microservices-the-more-the-merrier-or-meshy-er/
相關文章
- Java微服務 vs Go微服務,究竟誰更強!?Java微服務Go
- IT行業更看重學歷還是更看重技術?行業
- [鬥魚] 沒人比我更懂微服務--Go 微服務框架 Jupiter微服務Go框架
- 還是更喜歡 java 和 eclipseJavaEclipse
- 更安全、更低耗的微服務架構改造之道微服務架構
- 單體優先還是微服務?微服務
- 難住了,微服務之間的呼叫方式哪種更優?微服務
- Dice:Android開發者更喜歡Kotlin還是JavaAndroidKotlinJava
- 微服務選擇Spring Cloud還是Dubbo?微服務SpringCloud
- 微服務架構下的鑑權,怎麼做更優雅?微服務架構
- Anno 讓微服務、混合程式設計更簡單(Net love Java)微服務程式設計Java
- 服務應該去版本化,不管是微服務還是SOA微服務
- 如何更愉快地使用em —— 別說你懂CSS相對單位CSS
- 如何更愉快地使用rem —— 別說你懂CSS相對單位REMCSS
- Scala比java更復雜嗎?是的..但是Java
- 更專用還是更靈活,AI處理器的選擇 | ISSCC 2019數字篇AI
- Linux更換jdk版本,java -version還是原來的版本問題LinuxJDKJava
- JavaScript 複雜判斷的更優雅寫法JavaScript
- JavaScript複雜判斷的更優雅寫法JavaScript
- 微服務架構(一):什麼是微服務微服務架構
- 更開放、更自由的世界是武俠遊戲的下一站?遊戲
- 如何設定iis服務更安全
- 微服務是什麼?微服務
- 什麼是微服務?微服務
- 什麼是微服務微服務
- 微服務指南走北(一):微服務是什麼微服務
- 小白入門微服務(0) - 什麼是微服務微服務
- DDD中簡單模型比複雜模型更危險模型
- 微服務思考(01):什麼是微服務?微服務的優勢和劣勢微服務
- 軟體開發到底是業務複雜還是UI複雜UI
- springboot~封裝依賴引用包jar還是pom,哪種更規範Spring Boot封裝JAR
- 【變更】線上庫的變更操作
- ??微服務架構:軟體開發的革命還是短暫潮流?微服務架構
- Java“微服務”還能這麼玩!Java微服務
- [我是傻X] 記錄一次 Git 更換倉庫更換金鑰Git
- 01、什麼是微服務微服務
- 微服務複雜查詢之快取策略微服務快取
- 微服務是什麼?帶你簡單瞭解微服務微服務