SpringCloud微服務部署與發布:部署微服務面臨的挑戰

2020-09-16 程式設計師高級碼農II

微服務的部署與發布:部署微服務將面臨的挑戰

當單塊架構被劃分成微服務之後,隨著微服務數量的增多,毫無疑問,將會面臨比單塊架構更複雜的問題。

部署微服務將面臨的問題

部署微服務將會面臨以下問題。

1.運維負擔

對傳統的單塊架構系統來說,產品通常只有一個發布包,升級、部署系統往往只需要部署這個發布包即可。現在,面臨著這麼多的微服務,顯然運維的負擔要比之前更重了。對於運維工程師來說,部署的服務呈指數上升,傳統的手工部署方式往往已經不能適應日益增長的服務運維需求。

⒉服務間的依賴

在一個微服務結構中,你更容易遇到的錯誤是來自依賴的問題。在微服務架構系統中,某些業務功能需要幾個微服務協同才能完成,這些服務之間難免存在一定的依賴關係。特別是以某種方式更新某個服務的API時,同時也會影響其他服務,造成某些服務的不可用。例如,在天氣預報系統中,天氣預報微服務是依賴於天氣數據API微服務及城市數據API微服務的,只要這兩個數據API微服務其中一個不可用,則會導致整個天氣預報微服務不可用。所以在更新服務時,需要先確定哪些服務需要更新,而後評估更新對其他服務的影響是什麼。

3.更多的監控

每個微服務往往需要設置單獨的監控,這意味著更多的監控。而且每個微服務可能使用不同的技術或語言,依靠不同的機器或容器,使用其特有的版本控制,這也大大增加了監控的複雜性。

4.更頻繁的發布

每個微服務都需要單獨部署,這就意味著需要更多的服務發布。微服務的顆粒度相對較小,修改和發布也較為容易,所以發布也會相對更加頻繁。這是微服務的優點,但同時也是實施微服務所要解決的難題。

5.更複雜的測試

微服務化之後,服務可以獨立開發和測試,團隊或成員之間可以並行快跑,這極大提高了系統的研發效率,但也給測試工作帶來了挑戰。除了驗證各個獨立微服務之外,我們還需要考慮通過具有分布式特性的微服務架構檢查全部關鍵性事務的執行路徑。由於微服務的目標之一在於實現快速變更,因此我們必須更加關注服務的依賴性,以及性能、可訪問性、可靠性和彈性等非功能性要求。

如何解決上述問題

針對上面的部署和發布的問題,一般採取如下的解決思路。

1.自動化運維

微服務顯著增加了開發團隊的運維和工具負擔。每個服務都需要一個部署管道、一個監控系統、自動報警、輪流電話值班等。在這種情況下,採用自動化運維手段,可以有效提升運維的效率。

微服務需要大量的基礎設施用於開發和部署,因此要使用一個自動化運維平臺。Kubernetes ,Swarm、Mesos、Docker及其他類似產品可以提供很大的幫助。

2.處理服務間的依賴關係

服務越多,服務間的依賴關係就越複雜。其中解決其複雜關係的一個基本原則是:永遠只有不同層級的單向依賴,即上層依賴下層,高層服務可以依賴低層服務,同層服務間不互相依賴。這樣就能讓系統有一個清晰的依賴關係,而且這樣的話,單向依賴就永遠不可能形成環狀。如果出現了同層服務間依賴,就說明服務分層出現了問題,此時需要抽象出一個更高層次的服務或者提升其中一個服務的層次。

3.日誌收集

由於微服務的數量眾多,每個服務都有自己的日誌,那麼通過這些散落的日誌來查看服務的狀態將會變成一個難題。針對微服務的日誌,我們傾向於將所有的微服務的日誌進行收集,儘量統一到一個平臺中,這樣就能在同一個平臺中監控所有微服務的狀態。

日誌收集方式也儘量做到統一。由於很多設計裡對於業務日誌、容器日誌、宿主機日誌等採用不同的agent,這是一個不好的設計方式,因為agent也是需要管理的,引入太多agent只會給自己增加不必要的管理成本。

在日誌收集方面的方案有Splunk、Logstash、Flume、Fluentd等。本書後續章節也會對微服務的日誌管理展開詳細的討論。

4.監控和告警

從功能上來說,服務的監控可以分為兩種類型,一種是對主機的監控,另一種是對服務的監控。

對於服務的監控,是指在不知道服務具體運行的情況下去檢查這個服務本身是否可用,以及在它出了故障以後如何進行故障的恢復。這種監控方式在容器和非容器上差異性比較小,但是與具體使用的技術棧或平臺會有比較大的關聯性。例如,如果使用JConsole工具來監控程序的性能,顯然這裡的程序只能是Java程序。對於主機的監控,是指我們需要去了解這個伺服器內部的運行狀態,如CPU使用率是否爆滿,磁碟佔用一段時間是否出現異常。對於主機監控主要作用有兩點,一種是出現嚴重故障的時候,我們要對發生故障的現場進行回溯,另一種是我們通過監控數據能夠去預測—些可能發生的問題。

當監控到異常時,監控軟體最好能自動做出一些處置機制。例如,在集成伺服器中,當檢測到提交的代碼有問題時,集成伺服器會自動將部署的版本回溯到上一個可用的版本,以保證現場部署的服務始終可用。

當監控軟體檢測到系統超過閾值時,應該要發送告警信息給運維人員。常見的告警方式有簡訊、郵件、閃光燈、音響喇叭等。

5.微服務的發布

由於同一個微服務可能會被發布到多個主機上進行水平擴展,這就要求不同的主機之間部署的是相同的軟體。同時,微服務能夠獨立於其他微服務發布或者取消發布,在部署時,微服務之間的功能不會產生相互影響。

一種比較好的方式是把微服務打包成鏡像,這樣就保證了不同主機之間能夠使用相同的鏡像。

同時,由於鏡像中包含了服務的配置文件和環境,這樣,就可以儘可能地避免主機環境對軟體部署產生的影響。

考慮使用Docker容器,這將會使構建、發布、啟動微服務變得十分快捷。

通過Kubernetes能夠進一步擴展Docker 的能力,能夠從單個Linux主機擴展到Linux集群,支持多主機,管理容器的位置,提供服務發現等功能,這些都是微服務需求的重要特性。因此,利用Kubernetes管理微服務和容器的發布,是一個非常有力的方案。

6.API版本控制

版本控制應當適用於任何API,對微服務也一樣。如果有某些改動打破了API的格式,那麼就應當針對該改動單獨發布另外一個版本。無論是公共接口還是其他內部服務使用的接口,在我們不清楚誰在使用這些接口的前提下,必須要保證向下兼容,或者至少要給用戶足夠的時間去適應。

一種比較好的實踐是,在部署新的接口時,保持老的接口暫時不變。新老接口並存的好處是,我們可以儘快地發布新的服務,其中包含了新的接口,同時,我們也給老的接口用戶遷移到新接口的時間。當所有的用戶都遷到了新接口後,就能將老的接口及相關代碼進行移除。這種部署方式,我們也稱為「藍―綠部署(Blue-Green Deployment) 」。

本篇文章內容給大家講解的是微服務的部署與發布

  1. 下篇文章給大家講解持續交付與持續部署微服務;
  2. 覺得文章不錯的朋友可以轉發此文關注小編;
  3. 感謝大家的支持!

本篇內容篇理論知識,比較枯燥一些,也希望大家仔細閱讀。

相關焦點

  • SpringCloud微服務部署與發布:部署微服務面臨的挑戰
    微服務的部署與發布:部署微服務將面臨的挑戰 當單塊架構被劃分成微服務之後,隨著微服務數量的增多,毫無疑問,將會面臨比單塊架構更複雜的問題。
  • SpringCloud微服務架構開發實戰:微服務的集中化配置
    微服務的集中化配置:為什麼需要集中化配置應用一般都會有配置文件,即便號稱是「零配置」的Spring Boot應用,也無法完全做到不使用配置文件,畢竟配置文件就是為了迎合軟體的個性化需求。一個帶配置的應用程式,部署了多個實例在若干臺機器上,如果配置發生了變化,那麼,就需要對該應用所有的實例進行配置的變更。
  • 容器微服務和持續集成,(一)Spring cloud搭建部署
    從今天開始,我會以多個篇幅,詳細介紹和整理容器微服務和持續集成,主要通過Spring Cloud微服務改造、容器化部署和Jenkins持續集成,完成基本的微服務架構實現。微服務採用Spring Cloud,平臺架構採用Docker、Devops採用GitLab、Jenkins。爭取寫清楚,講明白。希望能幫助到有需要的朋友們。第一篇,就從Spring cloud開始。
  • 面試刷題37:微服務是什麼?springcloud,springboot是什麼?
    面試中被問到為什麼要使用微服務架構?springcloud的核心組件有哪些?微服務微服務是一種架構風格:把單體系統拆分成各種微服務(進程集群裡面),服務之間通過HTTP或者RPC協議進行通信。服務內部是圍繞某一個問題領域的業務,有自己單獨的業務流程,數據存儲,自動化測試,和自動化獨立部署機制。
  • Rancher部署Spring Cloud微服務(初探)
    >2.4 查看頁面初始頁面要設置密碼三、部署單節點spring cloud微服務4.1 新建項目(命名空間)部署taco-config-server查看配置文件部署eureka集群,計劃是部署兩個eureka服務eureka01服務eureka02服務
  • SpringCloud微服務架構開發實戰:微服務的集中化配置
    一個帶配置的應用程式,部署了多個實例在若干臺機器上,如果配置發生了變化,那麼,就需要對該應用所有的實例進行配置的變更。 隨著單塊架構向微服務架構演進之後,微服務的應用數量也會劇增。同時,每個微服務都有自己的配置文件,這些文件如果都散落在各自的應用中,必然會對應用的升級和配置管理帶來挑戰,畢竟誰也沒有能力去手工配置那麼多微服務的配置文件。
  • SpringCloud微服務架構開發實戰:實現微服務熔斷機制
    dependencies {//添加Spring Cloud Starter Netflix Hystrix依賴compile ('org. springframework. cloud: spring-cloud- starter-netflix-hystrix')}
  • 如何用Spring Boot和Cloud實現微服務
    如何用Spring Boot和Cloud實現微服務 本文將向您介紹如何使用Spring Boot和Cloud來實現微服務的基本部署和相互通信。
  • 基於SpringBootSpringCloud實現微服務架構
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring Scala:為Scala語言編程提供的spring框架的封裝(新的程式語言,Java平臺的Scala於2003年底/2004年初發布)。
  • 基於Spring Cloud開發前後端分離企業級微服務框架,源碼分享
    基於layui+springcloud的企業級微服務框架(用戶權限管理,配置中心管理,應用管理,....),其核心的設計目標是分離前後端,快速開發部署,學習簡單,功能強大,提供快速接入核心接口能力,其目標是幫助企業搭建一套類似百度能力開放平臺的框架;基於layui前後端分離的企業級微服務架構兼容spring cloud netflix & spring cloud alibaba
  • Spring Cloud Alibaba 微服務商城系統
    mall-cloud-alibaba微服務學習教程Spring Cloud Alibaba (Nacos,Sentinel,Feign,Gateway,RabbitMQ,Ribbon等)微服務教程項目介紹mall-cloud-alibaba 是一套基於開源商城 mall 改造的 spring cloud alibaba 體系微服務商城系統。
  • 容器微服務和持續集成,(三)微服務docker容器部署
    繼前面兩篇,對Spring Cloud和容器的介紹後,大家應該了解了微服務的基礎。今天整理和介紹Spring Cloud的容器化部署。後面幾篇將介紹持續集成Gitlab和Jenkins,歡迎朋友們關注。
  • SpringCloud微服務架構實戰:微服務治理
    . cloud</groupid><artifactid>spring-cloud-starter co sul discovery</artifactid></dependency><dependency><group d>org spri gframework cloud</groupid><artifactid
  • Spring Cloud:微服務入門,案例準備
    微服務架構和微服務的優點:微服務很小,便於特定業務功能的聚焦。微服務很小,每個微服務都可以被一個小團隊單獨實施(開發、測試、部署上線、運維),團隊合作一定程度解耦,便於實施敏捷開發。微服務很小,便於重用和模塊之間的組裝。微服務獨立,不同的微服務可以使用不同的語言開發,鬆耦合。
  • 深度解析springcloud分布式微服務的實現
    分布式則是偏向與機器將諾大的系統劃分為多個模塊部署在不同伺服器上。微服務和分布式就是作用的「目標不一樣」。微服務與Cloud微服務是一種概念,spring-cloud是微服務的實現。微服務也不一定必須使用cloud來實現,只是微服務中有許多問題,如:負載均衡、服務註冊與發現、路由等等。而cloud則是將這些處理問題的技術整合了。
  • 深度解析spring cloud分布式微服務的實現
    分布式則是偏向與機器將諾大的系統劃分為多個模塊部署再不同伺服器上。微服務和分布式就是作用的「目標不一樣」。微服務與Cloud微服務是一種概念,spring-cloud是微服務的實現。微服務也不一定必須使用cloud來實現,只是微服務中有許多問題,如:負載均衡、服務註冊與發現、路由等等。而cloud則是將這些處理問題的技術整合了。
  • 線上SpringCloud網關調用微服務跨機房了,咋整?
    ,會進行服務的降級,進而熔斷該節點微服務的調用,快速返回」錯誤」的響應信息。當檢測到該節點微服務調用響應正常後恢復調用鏈路。-- 將微服務provider側註冊進eureka -->  <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-eureka
  • Spring Cloud系列各子項目在微服務架構中的作用分析
    Springcloud一般用於搭建微服務項目,那麼微服務項目是怎麼工作的呢?Springcloud的幾個子項目分別扮演什麼角色?spring:  cloud:    gateway:      globalcors: #跨域配置        cors-configurations:  
  • 資深架構師解析springcloud分布式微服務的實現
    分布式則是偏向與機器將諾大的系統劃分為多個模塊部署在不同伺服器上。微服務和分布式就是作用的「目標不一樣」。微服務與Cloud微服務是一種概念,spring-cloud是微服務的實現。微服務也不一定必須使用cloud來實現,只是微服務中有許多問題,如:負載均衡、服務註冊與發現、路由等等。而cloud則是將這些處理問題的技術整合了。
  • SpringCloud微服務:基於Nacos組件,整合Dubbo框架
    2、微服務框架SpringCloud是一系列框架的有序集合。它利用SpringBoot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用SpringBoot的開發風格做到一鍵啟動和部署。