Spring Boot在鏈家網技術實踐


內容來源:2017年5月6日,鏈家網架構師程天亮在「Spring Cloud中國社區技術沙龍-北京站」進行《Spring Boot在鏈家網實踐》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
java

閱讀字數:2133 | 5分鐘閱讀web

嘉賓PPT及演講視頻: t.cn/Rp022Hh

摘要

SpringBoot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。經過這種方式,Boot致力於在蓬勃發展的快速應用開發領域成爲領導者。spring

Spring Boot實踐

Spring Boot是什麼?

SpringBoot是基於spring4以上生態的一個框架,是一個優化並簡化Spring開發的框架,也是一個微服務的入門級框架。數據庫

SpringBoot主要是簡化開發,也改變了傳統Web的部署方式,將一些容器內置,使得咱們的部署和運行都比較方便,經過一個jar包就能夠運行。它還提供了自動配置的功能,讓開發更簡單。Spring Boot自帶進程內部的監控,以及JMX的封裝,這樣咱們就能夠把進程內部的信息接到監控平臺上去,可以掌握更多程序進程內部的狀況。由於Spring Boot已經內置了Web容器,就再也不須要打WAR包了。編程


鏈家網的平臺策略技術主要是與平臺數據驅動和數據挖掘等方向相關,因此基本都是一些服務。tomcat

如圖可見,在最上層有API網關,用來鏈接下面的服務,提供非java系列的API轉換以及API的路由分發等等。對於java相關的咱們提供了服務的SDK。
安全

中間一層主要是業務上的一些基礎服務平臺。有RDC做爲服務的提供者,主要是以dubbo形式。在這過程當中咱們作了配置和註冊中心。在整個過程當中咱們有進程內部的監控和服務監控。因爲咱們作的是基礎平臺,還要作一些灰度發佈、流量實驗,因此咱們會有一個流量實驗平臺。這些平臺最初是基於Spring,如今咱們把它改爲在Spring Boot的基礎上重作這些服務。
服務器

最下面是數據實施流和實時計算流。
restful

鏈家網平臺策略部發展遇到的問題

服務配置複雜。基礎服務多,服務的資源配置複雜。傳統方式管理服務複雜。架構

服務之間調用複雜。檢索服務、用戶中心服務等,其之間的調用複雜,依賴多,須要微服務化。

服務監控難度大。服務比較多,機器部署複雜,服務存活監控、業務是否正常監控尤其重要。

服務化測試問題。服務依賴性比較大,測試一個小的功能,周邊服務也須要啓動。


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作微服務,還須要對周邊進行豐富。

今天的分享到此結束,謝謝你們!

相關文章
相關標籤/搜索