爲何要使用微服務架構?

微服務架構已經流行了很長時間,可是想要回答爲何要使用微服務架構的問題,首先應該瞭解一體化架構。git

什麼是一體化架構?

一體化架構顧名思義,將應用各層打成一個包來部署。爲了讓代碼正常工做,一體化應用的全部組件缺一不可。github

以典型的3層傳統web應用爲例,該應用由用戶界面、數據庫、服務器端應用組成。這裏的服務器端應用被稱爲monolith(一體化),包含表現、業務層、數據層。全部代碼都存在於同一個代碼庫中。爲了讓代碼工做起來,它被部署成爲一個單元。任何一個小的改動變化,都須要從新構建和部署整個應用。web

什麼是微服務架構?

微服務架構是一種架構風格,整個應用被劃分並設計爲以業務域爲模型的鬆散耦合的獨立服務。微服務中的「微」很是具備欺騙性,事實上它沒有規定服務的規模有多小或多大。數據庫

這裏的重點是每一個獨立服務都有一個業務邊界,能夠獨立開發、測試、部署、監控和擴展,甚至能夠用不一樣的編程語言開發它們。編程

在基於微服務的架構中,每一個組件或服務都有本身的數據庫。沒有集中式數據庫,咱們能夠根據須要爲每一個單獨的微服務使用NoSQL、RDBMS或任何其餘數據庫,這也是讓微服務真正獨立的緣由之一。服務器

一體化架構的問題

或者說是微服務架構所解決的問題。微信

難以擴展

一體化架構應用只能經過在負載均衡器後面放置整個應用程序的多個實例來進行水平擴展。若是應用中的特定服務須要擴展,則沒有簡單的選項。咱們須要完整地擴展應用程序,這顯然會形成沒必要要的資源浪費。 架構

相比之下,基於微服務的應用程序容許咱們根據須要獨立擴展單個服務。在上圖中,若是須要縮放服務B,則能夠有10個實例,同時保持其餘實例,並能夠根據須要隨時更改。負載均衡

交付時間長

一體化架構在單個應用的任何部分/層中進行的任何更改都須要構建和部署整個應用程序。我的開發人員還須要下載整個應用程序代碼來修復和測試,而不只僅是受影響的模塊,這就影響到了持續部署的效率。框架

而在微服務架構中,若是僅在一百個微服務中的一箇中須要改變,則僅構建和部署改變的微服務,沒有必要部署一切。咱們甚至能夠在短期內屢次部署。

應用複雜性

過去,隨着應用規模的增加(功能、功能等),團隊也會相應擴張,應用很快就就會變得複雜和交織在一塊兒。隨着不一樣的團隊不斷修改代碼,維護模塊化結構慢慢變得愈來愈困難,並慢慢致使像意大利麪同樣交織的代碼。這不只會影響代碼質量,還會影響整個組織。

在基於微服務的應用中,每一個團隊都在單獨的微服務上工做,代碼會有序不少。

沒有明確的全部權

在一體化應用中,看起來獨立的團隊實際上並非獨立的。它們同時在相同的代碼庫上工做,嚴重依賴於彼此。

在基於微服務的應用中,獨立團隊處理單獨的微服務。一個團隊將擁有一個完整的微服務。工做的明確全部權明確控制服務的一切,包括開發、部署和監控。

故障級聯

若是沒有正確設計,一體化交媾應用的一部分失敗可能會級聯並致使整個系統崩潰。

在基於微服務的架構的狀況下,咱們可使用斷路器來避免這種故障。

Dev和Ops之間的牆

開發團隊一般會進行開發、測試,一旦部署,就會將維護和支持的全部權交給運維團隊,應用此時與開發團隊無關了,而運維團隊須要努力在生產環境中支持一體化架構應用。

在基於微服務的應用中,團隊的組織理解爲「構建它、運行它」,開發團隊繼續在生產中擁有該應用。

陷入某種技術/語言

使用一體化架構,意味着被某種已實現的技術/語言鎖定。若是須要更改技術/語言,則必須重寫整個應用程序。

使用微服務,每一個服務能夠根據需求和業務以不一樣的技術或語言實現。任何改變服務技術/語言的決定都只須要重寫該特定服務,由於全部微服務都是相互獨立的。

支持微服務的正確工具/技術的可用性

幾年前,咱們尚未適當的工具和技術來支持微服務。但自從Docker容器和雲基礎設施(特別是PaaS)向大衆提供服務以來,微服務正在大規模採用,由於它們提供了咱們所需的「自由」,而無需進行傳統的配置程序。

小結

簡單來講,使用微服務架構會得到如下好處:

  • 獨立開發部署服務
  • 速度和敏捷性
  • 更高的代碼質量
  • 得到圍繞業務功能建立/組織的代碼
  • 提升生產力
  • 更容易擴展
  • 自由(在某種程度上)選擇實施技術/語言

關於Rainbond

當下,已經有很大一部分公司完成了單體架構向微服務架構的遷移改造,並在疲於應對大量微服務間通訊問題時,開始考慮採用Service Mesh微服務架構做爲服務與服務直接通訊的透明化管理框架,以插件式的方式實現各類業務所需的高級管理功能。

而開源PaaS Rainbond提供了開箱即用的Service Mesh微服務架構,部署在Rainbond上的應用原生便是Service Mesh微服務架構應用。

相關文章
相關標籤/搜索