Spring Cloud在國內中小型公司能用起來嗎?

ityouknow發表於2017-09-12

今天吃完飯休息的時候瞎逛知乎,突然看到這個一個問題Spring Cloud在國內中小型公司能用起來嗎?,吸引了我的注意。仔細的看了題主的問題,發現這是一個好問題,題主經過了一番思考,並且用圖形全面的將自己的疑問表達了出來,作為一個研究並使用Spring Boot和Spring Cloud近兩年的程式設計師,看的我手癢癢不答不快呀。

好問題

好問題必須配認真的回答,仔細的看了題主的問題,發現這個問題非常具有代表性,可能是廣大網友想使用Spring Cloud卻又對Spring Cloud不太瞭解的共同想法,題主對Spring Cloud使用的方方面面都進行過了思考,包括市場,學習、前後端、測試、配置、部署、開發以及運維,下面就是題主原本的問題:

想在公司推廣Spring Cloud,但我對這項技術還缺乏瞭解,畫了一張腦圖,總結了種種問題。

Spring Cloud在國內中小型公司能用起來嗎?

微服務是這樣一個結構嗎?

前端或二方 - > ng叢集 -> zuul叢集 -> eureka-server叢集 -> service provider叢集

(二方指其他業務部門)

想要明白這個問題,首先需要知道什麼是Spring Boot,什麼是Spring Cloud,以及兩者之間有什麼關係?

什麼是Spring Boot

Spring Boot簡化了基於Spring的應用開發,通過少量的程式碼就能建立一個獨立的、產品級別的Spring應用。 Spring Boot為Spring平臺及第三方庫提供開箱即用的設定,這樣你就可以有條不紊地開始。多數Spring Boot應用只需要很少的Spring配置。

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。用我的話來理解,就是Spring Boot其實不是什麼新的框架,它預設配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring Boot整合了所有的框架(不知道這樣比喻是否合適)。

Spring Boot的核心思想就是約定大於配置,一切自動完成。採用Spring Boot可以大大的簡化你的開發模式,所有你想整合的常用框架,它都有對應的元件支援。如果你對Spring Boot完全不瞭解,可以參考我的這篇文章:Springboot(一):入門篇

什麼是Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝遮蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包。

微服務是可以獨立部署、水平擴充套件、獨立訪問(或者有獨立的資料庫)的服務單元,Spring Cloud就是這些微服務的大管家,採用了微服務這種架構之後,專案的數量會非常多,Spring Cloud做為大管家就需要提供各種方案來維護整個生態。

Spring Cloud就是一套分散式服務治理的框架,既然它是一套服務治理的框架,那麼它本身不會提供具體功能性的操作,更專注於服務之間的通訊、熔斷、監控等。因此就需要很多的元件來支援一套功能,如果你對Spring Cloud元件不是特別瞭解的話,可以參考我的這篇文章:springcloud(一):大話Spring Cloud

Spring Boot和Spring Cloud的關係

Spring Boot 是 Spring 的一套快速配置腳手架,可以基於Spring Boot 快速開發單個微服務,Spring Cloud是一個基於Spring Boot實現的雲應用開發工具;Spring Boot專注於快速、方便整合的單個微服務個體,Spring Cloud關注全域性的服務治理框架;Spring Boot使用了預設大於配置的理念,很多整合方案已經幫你選擇好了,能不配置就不配置,Spring Cloud很大的一部分是基於Spring Boot來實現,可以不基於Spring Boot嗎?不可以。

Spring Boot可以離開Spring Cloud獨立使用開發專案,但是Spring Cloud離不開Spring Boot,屬於依賴的關係。

Spring -> Spring Boot > Spring Cloud 這樣的關係。


回答

以下為我在知乎的回答。

首先樓主問的這些問題都挺好的,算是經過了自己的一番思考,我恰好經歷了你所說的中小公司,且都使用Spring Cloud並且已經投產上線。第一家公司技術開發人員15人左右,專案例項 30多,第二家公司開發人員100人左右,專案例項達160多。

實話說Spring Boot、Spring Cloud仍在高速發展,技術生態不斷的完善和擴張,不免也會有一些小的bug,但對於中小公司的使用來將,完全可以忽略,基本都可以找到解決方案,接下來回到你的問題。

1、市場

據我所知有很多知名網際網路公司都已經使用了Spring Cloud,比如阿里、美團但都是小規模,沒有像我經歷的這倆家公司,業務線全部擁抱Spring Cloud;另外Spring Cloud並不是一套高深的技術,普通的Java程式設計師經過一到倆個月完全就可以上手,但前期需要一個比較精通人的來帶隊。

2、學習

有很多種方式,現在Spring Cloud越來越火的情況下,各種資源也越來越豐富,檢視官方文件和示例,現在很多優秀的部落格在寫spirng cloud的相關教程,我這裡收集了一些Spring Boot和Spring Cloud的相關資源可以參考,找到部落格也就找到人和組織了。

3、前後職責劃分

其實這個問題是每個系統架構都應該考慮的問題,Spring Cloud只是後端服務治理的一套框架,唯一和前端有關係的是thymeleaf,Spring推薦使用它做模板引擎。一般情況下,前端app或者網頁通過zuul來呼叫後端的服務,如果包含靜態資源也可以使用nginx做一下代理轉發。

4、測試

Spring-boot-starter-test支援專案中各層方法的測試,也支援controller層的各種屬性。所以一般測試的步奏是這樣,首先開發人員覆蓋自己的所有方法,然後測試微服務內所有對外介面保證微服務內的正確性,再進行微服務之間整合測試,最後交付測試。

5、配置

session共享有很多種方式,比如使用tomcat sesion共享機制,但我比較推薦使用redis快取來做session共享。完全可以分批引入,我在上一家公司就是分批過渡上線,新舊專案通過zuul進行互動,分批引入的時候,最好是新業務線先使用Spring Cloud,老業務做過渡,當完全掌握之後在全部替換。如果只是請求轉發,zuul的效能不一定比nginx低,但是如果涉及到靜態資源,還是建議在前端使用nginx做一下代理。另外Spring Cloud有配置中心,可以非常靈活的做所有配置的事情。

6、部署

多環境不同配置,Spring Boot最擅長做這個事情了,使用不同的配置檔案來配置不同環境的引數,在服務啟動的時候指明某個配置檔案即可,例如:java -jar app.jar --spring.profiles.active=dev就是啟動測試環境的配置檔案;Spring Cloud 沒有提供釋出平臺,因為jenkins已經足夠完善了,推薦使用jenkins來部署Spring Boot專案,會省非常多的事情;灰度暫時不支援,可能需要自己來做,如果有多個例項,可以一個一個來更新;支援混合部署,一臺機子部署多個是常見的事情。

7、開發

你說的包含html介面就是前端頁面吧,Spring Boot可以支援,但其實也是Spring Mvc在做這個事情,Spring Cloud只做服務治理,其它具體的功能都是整合了各種框架來解決而已;excel報表可以,其實除過swing專案外,其它Java專案都可以想象;Spring Cloud和老專案可以混合使用,通過zuul來支援。是否支援callback,可以通過MQ來實現,還是強調Spring Cloud只是服務治理。

8、運維

Turbine、zipkin可以用來做熔斷和效能監控;動態上下線某個節點可以通過jenkins來實現;provider下線後,會有其它相同的例項來提供服務,Eureka會間隔一段時間來檢測服務的可用性;不同節點配置不同的流量權值目前還不支援。註冊中心必須做高可用叢集,註冊中心掛掉之後,服務例項會全部停止。

總結,中小企業是否能用的起來Spring Cloud,完全取決於自己公司的環境,如果是一個技術活躍型的團隊就大膽的去嘗試吧,目前Spring Cloud是所有微服務治理中最優秀的方案,也是一個趨勢,未來一兩年可能就會像Spring一樣流行,早接觸早學習豈不更好。

希望能解答了你的疑問。


Spring Cloud 架構

我們從整體來看一下Spring Cloud主要的元件,以及它的訪問流程

Spring Cloud在國內中小型公司能用起來嗎?
  • 1、外部或者內部的非Spring Cloud專案都統一通過API閘道器(Zuul)來訪問內部服務.
  • 2、閘道器接收到請求後,從註冊中心(Eureka)獲取可用服務
  • 3、由Ribbon進行均衡負載後,分發到後端的具體例項
  • 4、微服務之間通過Feign進行通訊處理業務
  • 5、Hystrix負責處理服務超時熔斷
  • 6、Turbine監控服務間的呼叫和熔斷相關指標

圖中沒有畫出配置中心,配置中心管理各微服務不同環境下的配置檔案。

以上就是一個完整的Spring Cloud生態圖。

最後送一個完整示例的Spirng Cloud開源專案等你去spring-cloud-examples

相關文章