一文讀懂Spring Boot、微服務架構和大數據治理之間的故事(文末有彩蛋!)

微服務架構

微服務的誕生並不是偶然,它是在互聯網高速發展,技術突飛猛進的變化以及傳統架構沒法適應快速變化等多重因素的推進下誕生的產物。互聯網時代的產品一般有兩類特色:需求變化快和用戶羣體龐大,在這種狀況下,如何從系統架構的角度出發,構建靈活、易擴展的系統,快速應對需求的變化;同時,隨着用戶的增長,如何保證系統的可伸縮性、高可用性,成爲系統架構面臨的挑戰。html

若是還按照之前傳統開發模式,開發一個大型而全的系統已經很難知足市場對技術的需求,這時候分而治之的思想被提了出來,因而咱們從單獨架構發展到分佈式架構,又從分佈式架構發展到 SOA 架構,服務不斷的被拆分和分解,粒度也愈來愈小,直到微服務架構的誕生。前端

微服務架構是 SOA 架構的傳承,但一個最本質的區別就在於微服務是真正的分佈式的、去中心化的。把全部的「思考」邏輯包括路由、消息解析等放在服務內部,去掉一個大一統的 ESB,服務間輕通訊,是比 SOA 更完全的拆分。微服務架構強調的重點是業務系統須要完全的組件化和服務化,原有的單個業務系統會拆分爲多個能夠獨立開發,設計,運行和運維的小應用,這些小應用之間經過服務完成交互和集成。sql

大約 2009 年開始,Netflix 徹底從新定義了它的應用程序開發和操做模型,拉開了微服務探索的第一步,直到2014年3月 Martin Fowler 寫的一篇文章 Microservices 以更加通俗易懂的形式爲你們定義了什麼是微服務架構。Martin Fowler 在文中闡述了對微服務架構的設想,認爲微服務架構是一種架構模式,它提倡將單一應用程序劃分紅一組小的服務,服務之間互相協調、互相配合,爲用戶提供最終價值。數據庫

每一個服務運行在其獨立的進程中,服務和服務間採用輕量級的通訊機制互相溝通(一般是基於 HTTP 的 RESTful API)。每一個服務都圍繞着具體業務進行構建,而且可以被獨立地部署到生產環境、類生產環境等。另外,應儘可能避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。後端

微服務架構和數據治理

隨着微服務架構的落地,人們發現微服務架構雖然改進了開發模式,但同時也引入了一些問題,在這全部的問題中,最重要的也是立刻要面臨的一個問題就是數據的問題。在微服務架構中咱們強調完全的組件化和服務化,每一個微服務均可以獨立的部署和投產,其實也就意味着不少的微服務有本身獨立的數據庫。安全

整個業務數據被分散在各個子服務以後會帶來兩個最明顯的問題:一、業務管理系統對數據完整的查詢,好比分頁查詢、多條件查詢等,數據被割裂後如何來整合?二、如何對數據進一步的分析挖掘?這些需求可能須要分析全量的數據,而且在分析時不能影響到當前業務。架構

從技術方案來說,咱們通常有兩種選擇來處理這些問題,第一種是在線處理數據,第二種是離線處理數據。負載均衡

在線處理數據的方案就是按照微服務的標準接口來進行,後端須要哪一個系統的數據就去調用某個微服務提供的接口來獲取。後端管理平臺根據前端的需求去不一樣的微服務系統去獲取數據,而後將返回的數據進行處理後將數據返回。這種方案有兩個弊端:1)一方面微服務數據方須要提供數據接口,一方面數據的使用者須要去寫調用方法,而且調用者須要編寫大量的代碼進行數據處理;2)在對各個微服務進行調取數據時會影響微服務的正常業務處理性能。框架

離線處理數據方案,就是將業務數據準實時的同步到另一個數據庫中,在同步的過程當中進行數據整合處理,以知足業務方對數據的需求,數據同步過來後,再提供另一個服務接口專業負責對外輸出數據信息。這種方案有兩個特色:1)數據同步方案是關鍵,技術選型有不少,如何選擇切合公司業務的技術方案;2)離線數據處理對微服務正常業務處理沒有影響。運維

在我以往的工做中兩種方案都實施過,我的更傾向於使用第二種方案。

MongoDB 和數據分析

MongoDB 稱之爲對開發人員最友好的數據庫,再也不強調傳統關係數據庫中的行和列,整個表能夠看做一個 Json 文檔,MongoDB 也被認爲在 Nosql 中最像關係數據庫的 Nosql 數據庫,保留了相似關係數據庫的數據庫(DataBase)、集合(Collection)、文檔對象(Document)。

MongoDB 是目前最熱門非關係數據庫的之一,在最新的數據庫排行榜中 MongoDB 排名第五,在全部的非關係數據庫中排名第一,很是普遍的應用於國內外的互聯網公司。

MongoDB 最大的特色是支持的查詢語言很是強大,其語法有點相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據創建索引。MongoDB 在高可用和讀寫負載均衡上的實現很是簡潔和友好,MongoDB 自帶了副本集的概念,經過設計恰當的副本集和驅動程序,能夠很是便地實現高可用、讀寫負載均衡。

MongoDB 的這些特性很是方便對數據進行高性能查詢,MongoDB 支持 Aggregate 和 Mapreduce 利用分而治之的理念來處理大規模數據分析。Spring Boot 對 MongoDB 的支持很是友好,使用 Spring Boot 很是便利的處理對 MongoDB 查詢和操做,Spring Boot 也提供了組件包來支持對 MongoDB的使用。

MongoDB 4.0 宣佈將正式支持 ACID 事務,將來 MongoDB 的想象空間更加巨大!所以 MongDB + Spring Boot 是微服務架構中數據分析的理想選擇之一。

再來聊聊 Spring Boot

Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。採用 Spring Boot 能夠大大的簡化開發模式,全部你想集成的經常使用框架,它都有對應的組件支持。

Spring Boot 基於 Spring 開發,Spirng Boot 自己並不提供 Spring 框架的核心特性以及擴展功能,只是用於快速、敏捷地開發新一代基於 Spring 框架的應用程序。也就是說,它並非用來替代 Spring 的解決方案,而是和 Spring 框架緊密結合用於提高 Spring 開發者體驗的工具。同時它集成了大量經常使用的第三方庫配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 應用中這些第三方庫幾乎能夠零配置的開箱即用,大部分的 Spring Boot 應用都只須要很是少許的配置代碼,開發者可以更加專一於業務邏輯。

Spring Boot 一經推出就受到開源社區的追捧,Spring Boot 官方提供了不少 Starters 方便集成第三方產品,不少主流的框架也紛紛進行了主動的集成,好比 Mybatis。Spring 官方很是重視 Spring Boot 的發展,在 Spring 官網首頁進行重點推薦介紹,是目前 Spring 官方重點發展的項目之一。

一文讀懂Spring Boot、微服務架構和大數據治理之間的故事(文末有彩蛋!)

Spring Boot 自己發展特別快,自從 2014 年 4 月發佈 Spring Boot 1.0 以後,版本更新很是頻繁,我在 2016 年使用的時候是 1.3.X,到如今 Spring Boot 已經發布了 Spring Boot 2.0,Spring Boot 2.0 集成了不少最新優秀的技術和新特性,而且對 Spring Boot 1.0 的 API 進行了大幅優化。Spring Boot 一經推出就迅速的成爲一門熱門的技術,從下圖也能夠看出這個結論:

一文讀懂Spring Boot、微服務架構和大數據治理之間的故事(文末有彩蛋!)

上圖爲2014年到2018年 Spring Boot 的百度指數,能夠看出 Spring Boot 2.0 的推出引起了搜索高峯。

Spring Boot 和 微服務架構

隨着 Spring 不斷的發展,涉及的領域愈來愈多,項目整合開發須要配合各類各樣的文件,慢慢變得不那麼易用簡單,違背了最初的理念,甚至人稱配置地獄。Spring Boot 正是在這樣的一個背景下被抽象出來的開發框架,目的爲了讓你們更容易的使用 Spring 、更容易的集成各類經常使用的中間件、開源軟件;另外一方面,Spring Boot 誕生時,正處於微服務概念在慢慢醞釀中,Spring Boot 的研發融合了微服務架構的理念,實現了在 Java 領域內微服務架構落地的技術支撐。

Spring Boot 做爲一套全新的框架,來源於 Spring 你們族,所以 Spring 全部具有的功能它都有,並且更容易使用;Spring Boot 以約定大於配置的核心思想,默認幫咱們進行了不少設置,多數 Spring Boot 應用只須要不多的 Spring 配置。Spring Boot 開發了不少的應用集成包,支持絕大多數開源軟件,讓咱們以很低的成本去集成其餘主流開源軟件。

Spring Boot 特性:

  • 使用 Spring 項目引導頁面能夠在幾秒構建一個項目
  • 方便對外輸出各類形式的服務,如 REST API、WebSocket、Web、Streaming、Tasks
  • 很是簡潔的安全策略集成
  • 支持關係數據庫和非關係數據庫
  • 支持運行期內嵌容器,如 Tomcat、Jetty
  • 強大的開發包,支持熱啓動
  • 自動管理依賴
  • 自帶應用監控
  • 支持各類 IED,如 IntelliJ IDEA 、NetBeans

Spring Boot 的這些特性很是方便、快速構建獨立的微服務。因此咱們使用 Spring Boot 開發項目,會給咱們傳統開發帶來很是大的便利度,能夠說若是你使用過 Spring Boot 開發過項目,就不會再願意以之前的方式去開發項目了。

總結一下,使用 Spring Boot 至少能夠給咱們帶來如下幾方面的改進:

  • Spring Boot 使編碼變簡單,Spring Boot 提供了豐富的解決方案,快速集成各類解決方案提高開發效率。
  • Spring Boot 使配置變簡單,Spring Boot 提供了豐富的 Starters,集成主流開源產品每每只須要簡單的配置便可。
  • Spring Boot 使部署變簡單,Spring Boot 自己內嵌啓動容器,僅僅須要一個命令便可啓動項目,結合 Jenkins 、Docker 自動化運維很是容易實現。
  • Spring Boot 使監控變簡單,Spring Boot 自帶監控組件,使用 Actuator 輕鬆監控服務各項狀態。

總結,Spring Boot 是 Java 領域最優秀的微服務架構落地技術,沒有之一。

三者之間的糾葛

瞭解完微服務架構、Spring Boot、大數據治理以後,咱們就發現這樣一個有趣的事情:微服務架構是一種架構思想,是架構不斷髮展的必然結果,具備構建靈活、易擴展、快速應用、可伸縮性、高可用等特色;微服務架構思想的推出對技術有了更高的要求,在這樣的背景下 Spring Boot 孕育而生,Spring Boot 出生名門,從一開始就站在一個比較高的起點,又通過這幾年的發展,生態足夠完善,Spring Boot 已經當之無愧成爲 Java 領域最熱門的技術。

微服務架構下,數據被分隔到 N 個獨立的微服務中,如何應對市場、業務對大量數據的查詢、分析就變的很是急迫,利用 Spring Boot 和 MongoDB 能夠輕鬆的解決這個問題,經過技術手段將分裂到 N 個微服務的數據同步到 MongoDB 集羣中,在同步的過程當中進行數據清洗,來知足公司的各項業務需求。Spring Boot 對 MongoDB 的支持很是友好,一方面 Spring Data 技術預生成不少經常使用方法便於使用,另外一方面 Spring Boot 封裝了分佈式計算的相關函數,可讓咱們以較簡潔的方式來實現統計查詢。

Spring Boot 是 Java 領域微服務架構最優落地技術,Spring Boot+MongoDB 方案是在微服務架構下數據治理的最佳方案之一。

固然若是咱們對微服務架構、Spring Boot 、MongoDB 不熟悉的話,可能須要走不少的彎路。錯誤的技術方案會對後期的微服務落地帶來很是大的困擾,增長額外的開發工做量,我本身深有體會,合適的技術方案能夠節省60%以上的工做量。

爲此我特地寫了一個專欄《微服務技術架構和大數據治理實戰》,講解微服務架構和大數據治理的技術落地。將工做中實踐過最具實戰表明性的一些內容整理出來,以 51CTO 專欄的形式來展示。課程內容將站在全局的角度去看待微服務實踐和數據分析,講解微服務架構、Spring Boot、MongoDB、同步方案、數據分析等內容,幫助廣大的技術朋友們少走彎路,掌握微服務和數據分析的技術。

本專欄共18節課程,圍繞四大塊內容:

  • 1、微服務架構和 Spring Boot;
  • 2、Spring Boot 和 MongoDB 實戰詳解,介紹實戰中遇到的典型問題;
  • 3、微服務架構下的數據治理,數據同步、實時變動;
  • 4、微服務架構實踐的經驗和教訓。

認真學完此專欄以後,會對微服務架構實踐、Spring Boot 和 MongoDB 使用、微服務架構下數據處理有進一步的瞭解,具有使用 Spring Boot 開發微服務項目、利用相關技術解決微服務架構中數據治理的疼點。

專欄地址:微服務技術架構和大數據治理實戰
一文讀懂Spring Boot、微服務架構和大數據治理之間的故事(文末有彩蛋!)

相關文章
相關標籤/搜索