內容來源:2017年5月6日,鏈家網架構師程天亮在“Spring Cloud中國社群技術沙龍-北京站”進行《Spring Boot在鏈家網實踐》演講分享。IT大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。
閱讀字數:2133 | 5分鐘閱讀
摘要
SpringBoot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Boot致力於在蓬勃發展的快速應用開發領域成為領導者。
Spring Boot實踐
Spring Boot是什麼?
SpringBoot是基於spring4以上生態的一個框架,是一個優化並簡化Spring開發的框架,也是一個微服務的入門級框架。
SpringBoot主要是簡化開發,也改變了傳統Web的部署方式,將一些容器內建,使得我們的部署和執行都比較方便,通過一個jar包就可以執行。它還提供了自動配置的功能,讓開發更簡單。Spring Boot自帶程式內部的監控,以及JMX的封裝,這樣我們就可以把程式內部的資訊接到監控平臺上去,能夠掌握更多程式程式內部的情況。因為Spring Boot已經內建了Web容器,就不再需要打WAR包了。
鏈家網的平臺策略技術主要是與平臺資料驅動和資料探勘等方向相關,所以基本都是一些服務。
如圖可見,在最上層有API閘道器,用來連線下面的服務,提供非java系列的API轉換以及API的路由分發等等。對於java相關的我們提供了服務的SDK。
中間一層主要是業務上的一些基礎服務平臺。有RDC作為服務的提供者,主要是以dubbo形式。在這過程中我們做了配置和註冊中心。在整個過程中我們有程式內部的監控和服務監控。由於我們做的是基礎平臺,還要做一些灰度釋出、流量實驗,所以我們會有一個流量實驗平臺。這些平臺最初是基於Spring,現在我們把它改成在Spring Boot的基礎上重做這些服務。
最下面是資料實施流和實時計算流。
鏈家網平臺策略部發展遇到的問題
服務配置複雜。基礎服務多,服務的資源配置複雜。傳統方式管理服務複雜。
服務之間呼叫複雜。檢索服務、使用者中心服務等,其之間的呼叫複雜,依賴多,需要微服務化。
服務監控難度大。服務比較多,機器部署複雜,服務存活監控、業務是否正常監控尤為重要。
服務化測試問題。服務依賴性比較大,測試一個小的功能,周邊服務也需要啟動。
SpringBoot把凌亂的配置集中化。傳統Spring是採用XML的方式進行配置,容器和業務上的配置很難分離。使用Spring Boot之後,就能把這兩塊分開,把容器的注入通過Spring4的Java Config方式進行配置。
和業務相關的業務配置可以通過yml、properties等方式進行管理。
做到這裡還只是第一步,把容器相關的管理和業務的配置分離。但是這遠遠不夠,我們仍然很難維護資料庫的資源,以及資料庫的使用者名稱密碼和它的連結等都是暴露出來的。這對於安全性來說是一個很大的隱患。所以我們接下來就要把這些通用的、異變的、保密性的資源集中到伺服器的Config Center。其餘一些基本不變的業務相關的配置放在本地。
於是就形成了上圖中的方式。我們有一個資源配置或註冊中心,檢索平臺、資料探勘平臺和使用者中心都是依賴於註冊中心和一些少量的本地配置檔案。
通過這種方式簡化了配置,在ID編碼上也有比較整潔簡單的接入,以及對一些重點資源的安全進行統一管理,從而大大提升了安全性。
解決單程式多應用低吞吐量
單應用單處理,使用Spring Boot fat jar模式,將tomcat等容器內嵌。
每個tomcat只管理一個應用,提高應用的吞吐量。
服務的管理更加清晰化,打包工程更加流程化。
服務內嵌tomcat,測試更加容易控制程式,更容易實現自動化測試。
傳統方法是通過xml、Spring各種依賴、SDK依賴等等非常繁雜,版本控制、版本依賴都容易出現問題,導致SSO或許可權管理很複雜。我們通過擴充套件Spring把它的配置資訊放到配置中心,只需要一個配置中心的地址就可以。再加上一些本地不太變化的配置,最後再做一個SSO/User-starter。使我們的整合使用者中心和許可權系統變得非常容易,為我們鏈家網所有系統需要的使用者相關的接入減少很多成本,以及它的除錯成本都會很低。
我們所有的服務之前都是用dubbo或者native自己寫的一些RPC,在這過程中我們通過Spring Boot對dubbo也進行了一次改造。
關於dubbo的配置解析,在原有的SpringXML的配置解析基礎上,新增了Spring Config Parser以及Spring Boot Start。在傳輸協議上加了restful和Restful兩個協議。改造後在寫服務的時候只需要一個註冊中心配置+註解就可以了。
微服務治理
SpringBoot也是一個輕量級的微服務入口,我們進行了一些微服務治理,當然現在還不是很健全。
我們主要做的是一些API的服務閘道器、dubbo的原生admin,在模組上增加了呼叫鏈追蹤、查詢和診斷,以及在Spring Boot Actutor的基礎上增加了服務內部的監控。還整合了jolokia,豐富JMX監控和控制。
困難與挑戰
線上運維問題
以前單Tomcat很容易維護,因為它是一個很標準的容器。Op可以通過它進行一些控制、配置和管理。
現在經過Spring Boot改造後變成每個應用自己就帶有Tomcat,這樣必然將Tomcat的配置下發到應用程式。如果沒有一個程式設計規範和配置規範的話,會導致每個應用程式的配置不一定合格,還會產生一些安全風險。
在這種情況下就需要做一些編碼規範以及配置規範,把Tomcat相關的資訊再次剝離,到配置中心交給Op去執行。
之前有標準的啟停指令碼,通過Spring Boot改造後的啟動指令碼會隨意化,導致啟停指令碼五花八門難以維護。所以我們對指令碼進行了規範化,自動生成指令碼從而達到統一。
編碼上的問題
程式碼閱讀難度加大:程式碼的入口更加隱蔽,不如web.xml和spring xml邏輯清晰。要求更高的程式設計規範。
學習成本加大:新的技術都有學習成本。Spring Boot入門簡單,用好或擴充套件需要更深的學習或原始碼學習。
入門級微服務框架:Spring Boot主要還是對Spring的再封裝,解決Spring易用。Spring Boot做微服務,還需要對周邊進行豐富。
今天的分享到此結束,謝謝大家!