1. 程式人生 > >Spring Cloud在國內中小型公司能用起來嗎?

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

spring cloud

今天吃完飯休息的時候瞎逛知乎,突然看到這個一個問題 Spring Cloud在國內中小型公司能用起來嗎?,吸引了我的註意。仔細的看了題主的問題,發現這是一個好問題,題主經過了一番思考,並且用圖形全面的將自己的疑問表達了出來,作為一個研究並使用 Spring Boot 和 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 Boo t的核心思想就是約定大於配置,一切自動完成。采用 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 的相關資源可以參考,找到博客也就找到人和組織了。

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 主要的組件,以及它的訪問流程


技術分享


1、外部或者內部的非 Spring Cloud 項目都統一通過 API 網關(Zuul)來訪問內部服務

2、網關接收到請求後,從註冊中心(Eureka)獲取可用服務

3、由 Ribbon 進行均衡負載後,分發到後端的具體實例

4、微服務之間通過 Feign 進行通信處理業務

5、Hystrix 負責處理服務超時熔斷

6、Turbine 監控服務間的調用和熔斷相關指標


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


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


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




作者:純潔的微笑

出處:www.ityouknow.com/

版權歸作者所有,轉載請註明出處


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