一文讀懂Spring Boot、微服務(wù)架構(gòu)和大數(shù)據(jù)治理之間的故事

微服務(wù)架構(gòu)

微服務(wù)的誕生并非偶然幸撕,它是在互聯(lián)網(wǎng)高速發(fā)展薇组,技術(shù)日新月異的變化以及傳統(tǒng)架構(gòu)無法適應(yīng)快速變化等多重因素的推動(dòng)下誕生的產(chǎn)物∽互聯(lián)網(wǎng)時(shí)代的產(chǎn)品通常有兩類特點(diǎn):需求變化快和用戶群體龐大律胀,在這種情況下,如何從系統(tǒng)架構(gòu)的角度出發(fā)挑童,構(gòu)建靈活累铅、易擴(kuò)展的系統(tǒng)跃须,快速應(yīng)對需求的變化站叼;同時(shí),隨著用戶的增加菇民,如何保證系統(tǒng)的可伸縮性尽楔、高可用性,成為系統(tǒng)架構(gòu)面臨的挑戰(zhàn)第练。

如果還按照以前傳統(tǒng)開發(fā)模式阔馋,開發(fā)一個(gè)大型而全的系統(tǒng)已經(jīng)很難滿足市場對技術(shù)的需求,這時(shí)候分而治之的思想被提了出來娇掏,于是我們從單獨(dú)架構(gòu)發(fā)展到分布式架構(gòu)呕寝,又從分布式架構(gòu)發(fā)展到 SOA 架構(gòu),服務(wù)不斷的被拆分和分解婴梧,粒度也越來越小下梢,直到微服務(wù)架構(gòu)的誕生客蹋。

微服務(wù)架構(gòu)是 SOA 架構(gòu)的傳承,但一個(gè)最本質(zhì)的區(qū)別就在于微服務(wù)是真正的分布式的孽江、去中心化的讶坯。把所有的“思考”邏輯包括路由、消息解析等放在服務(wù)內(nèi)部岗屏,去掉一個(gè)大一統(tǒng)的 ESB辆琅,服務(wù)間輕通信,是比 SOA 更徹底的拆分这刷。微服務(wù)架構(gòu)強(qiáng)調(diào)的重點(diǎn)是業(yè)務(wù)系統(tǒng)需要徹底的組件化和服務(wù)化婉烟,原有的單個(gè)業(yè)務(wù)系統(tǒng)會(huì)拆分為多個(gè)可以獨(dú)立開發(fā),設(shè)計(jì)暇屋,運(yùn)行和運(yùn)維的小應(yīng)用隅很,這些小應(yīng)用之間通過服務(wù)完成交互和集成。

大約 2009 年開始率碾,Netflix 完全重新定義了它的應(yīng)用程序開發(fā)和操作模型叔营,拉開了微服務(wù)探索的第一步,直到2014年3月 Martin Fowler 寫的一篇文章 Microservices 以更加通俗易懂的形式為大家定義了什么是微服務(wù)架構(gòu)所宰。Martin Fowler 在文中闡述了對微服務(wù)架構(gòu)的設(shè)想绒尊,認(rèn)為微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù)仔粥,服務(wù)之間互相協(xié)調(diào)婴谱、互相配合,為用戶提供最終價(jià)值躯泰。

每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中谭羔,服務(wù)和服務(wù)間采用輕量級的通信機(jī)制互相溝通(通常是基于 HTTP 的 RESTful API)。每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建麦向,并且能夠被獨(dú)立地部署到生產(chǎn)環(huán)境瘟裸、類生產(chǎn)環(huán)境等。另外诵竭,應(yīng)盡量避免統(tǒng)一的话告、集中式的服務(wù)管理機(jī)制,對具體的一個(gè)服務(wù)而言卵慰,應(yīng)根據(jù)業(yè)務(wù)上下文沙郭,選擇合適的語言、工具對其進(jìn)行構(gòu)建裳朋。

微服務(wù)架構(gòu)和數(shù)據(jù)治理

隨著微服務(wù)架構(gòu)的落地病线,人們發(fā)現(xiàn)微服務(wù)架構(gòu)雖然改進(jìn)了開發(fā)模式,但同時(shí)也引入了一些問題,在這所有的問題中送挑,最重要的也是馬上要面臨的一個(gè)問題就是數(shù)據(jù)的問題夜矗。在微服務(wù)架構(gòu)中我們強(qiáng)調(diào)徹底的組件化和服務(wù)化,每個(gè)微服務(wù)都可以獨(dú)立的部署和投產(chǎn)让虐,其實(shí)也就意味著很多的微服務(wù)有自己獨(dú)立的數(shù)據(jù)庫紊撕。

整個(gè)業(yè)務(wù)數(shù)據(jù)被分散在各個(gè)子服務(wù)之后會(huì)帶來兩個(gè)最明顯的問題:
1、業(yè)務(wù)管理系統(tǒng)對數(shù)據(jù)完整的查詢赡突,比如分頁查詢对扶、多條件查詢等,數(shù)據(jù)被割裂后如何來整合惭缰?
2浪南、如何對數(shù)據(jù)進(jìn)一步的分析挖掘?這些需求可能需要分析全量的數(shù)據(jù)漱受,并且在分析時(shí)不能影響到當(dāng)前業(yè)務(wù)络凿。

從技術(shù)方案來講,我們一般有兩種選擇來處理這些問題昂羡,第一種是在線處理數(shù)據(jù)絮记,第二種是離線處理數(shù)據(jù)。

在線處理數(shù)據(jù)的方案就是按照微服務(wù)的標(biāo)準(zhǔn)接口來進(jìn)行虐先,后端需要哪個(gè)系統(tǒng)的數(shù)據(jù)就去調(diào)用某個(gè)微服務(wù)提供的接口來獲取怨愤。后端管理平臺(tái)根據(jù)前端的需求去不同的微服務(wù)系統(tǒng)去獲取數(shù)據(jù),然后將返回的數(shù)據(jù)進(jìn)行處理后將數(shù)據(jù)返回蛹批。這種方案有兩個(gè)弊端:
1)一方面微服務(wù)數(shù)據(jù)方需要提供數(shù)據(jù)接口撰洗,一方面數(shù)據(jù)的使用者需要去寫調(diào)用方法,并且調(diào)用者需要編寫大量的代碼進(jìn)行數(shù)據(jù)處理腐芍;
2)在對各個(gè)微服務(wù)進(jìn)行調(diào)取數(shù)據(jù)時(shí)會(huì)影響微服務(wù)的正常業(yè)務(wù)處理性能差导。

離線處理數(shù)據(jù)方案,就是將業(yè)務(wù)數(shù)據(jù)準(zhǔn)實(shí)時(shí)的同步到另外一個(gè)數(shù)據(jù)庫中猪勇,在同步的過程中進(jìn)行數(shù)據(jù)整合處理设褐,以滿足業(yè)務(wù)方對數(shù)據(jù)的需求,數(shù)據(jù)同步過來后埠对,再提供另外一個(gè)服務(wù)接口專業(yè)負(fù)責(zé)對外輸出數(shù)據(jù)信息络断。這種方案有兩個(gè)特點(diǎn):
1)數(shù)據(jù)同步方案是關(guān)鍵裁替,技術(shù)選型有很多项玛,如何選擇切合公司業(yè)務(wù)的技術(shù)方案;
2)離線數(shù)據(jù)處理對微服務(wù)正常業(yè)務(wù)處理沒有影響弱判。

在我以往的工作中兩種方案都實(shí)施過襟沮,個(gè)人更傾向于使用第二種方案。

MongoDB 和數(shù)據(jù)分析

MongoDB 稱之為對開發(fā)人員最友好的數(shù)據(jù)庫,不再強(qiáng)調(diào)傳統(tǒng)關(guān)系數(shù)據(jù)庫中的行和列开伏,整個(gè)表可以看作一個(gè) Json 文檔膀跌,MongoDB 也被認(rèn)為在 Nosql 中最像關(guān)系數(shù)據(jù)庫的 Nosql 數(shù)據(jù)庫,保留了類似關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫(DataBase)固灵、集合(Collection)捅伤、文檔對象(Document)。

MongoDB 是目前最熱門非關(guān)系數(shù)據(jù)庫的之一巫玻,在最新的數(shù)據(jù)庫排行榜中 MongoDB 排名第五丛忆,在所有的非關(guān)系數(shù)據(jù)庫中排名第一,非常廣泛的應(yīng)用于國內(nèi)外的互聯(lián)網(wǎng)公司仍秤。

MongoDB 最大的特點(diǎn)是支持的查詢語言非常強(qiáng)大熄诡,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能诗力,而且還支持對數(shù)據(jù)建立索引凰浮。MongoDB 在高可用和讀寫負(fù)載均衡上的實(shí)現(xiàn)非常簡潔和友好,MongoDB 自帶了副本集的概念苇本,通過設(shè)計(jì)恰當(dāng)?shù)母北炯万?qū)動(dòng)程序袜茧,可以非常便地實(shí)現(xiàn)高可用、讀寫負(fù)載均衡瓣窄。

MongoDB 的這些特性非常方便對數(shù)據(jù)進(jìn)行高性能查詢惫周,MongoDB 支持 Aggregate 和 Mapreduce 利用分而治之的理念來處理大規(guī)模數(shù)據(jù)分析。Spring Boot 對 MongoDB 的支持非常友好康栈,使用 Spring Boot 非常便利的處理對 MongoDB 查詢和操作递递,Spring Boot 也提供了組件包來支持對 MongoDB的使用。

MongoDB 4.0 宣布將正式支持 ACID 事務(wù)啥么,未來 MongoDB 的想象空間更加巨大登舞!因此 MongDB + Spring Boot 是微服務(wù)架構(gòu)中數(shù)據(jù)分析的理想選擇之一。

再來聊聊 Spring Boot

Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的全新框架悬荣,其設(shè)計(jì)目的是用來簡化新 Spring 應(yīng)用的初始搭建以及開發(fā)過程菠秒。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置氯迂。采用 Spring Boot 可以大大的簡化開發(fā)模式践叠,所有你想集成的常用框架,它都有對應(yīng)的組件支持嚼蚀。

Spring Boot 基于 Spring 開發(fā)禁灼,Spirng Boot 本身并不提供 Spring 框架的核心特性以及擴(kuò)展功能,只是用于快速轿曙、敏捷地開發(fā)新一代基于 Spring 框架的應(yīng)用程序弄捕。也就是說僻孝,它并不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開發(fā)者體驗(yàn)的工具守谓。同時(shí)它集成了大量常用的第三方庫配置(例如 Redis穿铆、MongoDB、Jpa斋荞、RabbitMQ荞雏、Quartz 等等),Spring Boot 應(yīng)用中這些第三方庫幾乎可以零配置的開箱即用平酿,大部分的 Spring Boot 應(yīng)用都只需要非常少量的配置代碼讯檐,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。

Spring Boot 一經(jīng)推出就受到開源社區(qū)的追捧染服,Spring Boot 官方提供了很多 Starters 方便集成第三方產(chǎn)品别洪,很多主流的框架也紛紛進(jìn)行了主動(dòng)的集成,比如 Mybatis柳刮。Spring 官方非常重視 Spring Boot 的發(fā)展挖垛,在 Spring 官網(wǎng)首頁進(jìn)行重點(diǎn)推薦介紹,是目前 Spring 官方重點(diǎn)發(fā)展的項(xiàng)目之一秉颗。

Spring Boot 本身發(fā)展特別快痢毒,自從 2014 年 4 月發(fā)布 Spring Boot 1.0 之后,版本更新非常頻繁蚕甥,我在 2016 年使用的時(shí)候是 1.3.X哪替,到現(xiàn)在 Spring Boot 已經(jīng)發(fā)布了 Spring Boot 2.0,Spring Boot 2.0 集成了很多最新優(yōu)秀的技術(shù)和新特性菇怀,并且對 Spring Boot 1.0 的 API 進(jìn)行了大幅優(yōu)化凭舶。Spring Boot 一經(jīng)推出就迅速的成為一門熱門的技術(shù),從下圖也可以看出這個(gè)結(jié)論:

上圖為2014年到2018年 Spring Boot 的百度指數(shù)爱沟,可以看出 Spring Boot 2.0 的推出引發(fā)了搜索高峰帅霜。

Spring Boot 和 微服務(wù)架構(gòu)

隨著 Spring 不斷的發(fā)展,涉及的領(lǐng)域越來越多呼伸,項(xiàng)目整合開發(fā)需要配合各種各樣的文件身冀,慢慢變得不那么易用簡單,違背了最初的理念括享,甚至人稱配置地獄搂根。Spring Boot 正是在這樣的一個(gè)背景下被抽象出來的開發(fā)框架,目的為了讓大家更容易的使用 Spring 铃辖、更容易的集成各種常用的中間件剩愧、開源軟件;另一方面澳叉,Spring Boot 誕生時(shí)隙咸,正處于微服務(wù)概念在慢慢醞釀中沐悦,Spring Boot 的研發(fā)融合了微服務(wù)架構(gòu)的理念成洗,實(shí)現(xiàn)了在 Java 領(lǐng)域內(nèi)微服務(wù)架構(gòu)落地的技術(shù)支撐五督。

Spring Boot 作為一套全新的框架,來源于 Spring 大家族瓶殃,因此 Spring 所有具備的功能它都有充包,而且更容易使用;Spring Boot 以約定大于配置的核心思想遥椿,默認(rèn)幫我們進(jìn)行了很多設(shè)置基矮,多數(shù) Spring Boot 應(yīng)用只需要很少的 Spring 配置。Spring Boot 開發(fā)了很多的應(yīng)用集成包冠场,支持絕大多數(shù)開源軟件家浇,讓我們以很低的成本去集成其他主流開源軟件。

Spring Boot 特性

  • 使用 Spring 項(xiàng)目引導(dǎo)頁面可以在幾秒構(gòu)建一個(gè)項(xiàng)目
  • 方便對外輸出各種形式的服務(wù)碴裙,如 REST API钢悲、WebSocket、Web舔株、Streaming莺琳、Tasks
  • 非常簡潔的安全策略集成
  • 支持關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫
  • 支持運(yùn)行期內(nèi)嵌容器,如 Tomcat载慈、Jetty
  • 強(qiáng)大的開發(fā)包惭等,支持熱啟動(dòng)
  • 自動(dòng)管理依賴
  • 自帶應(yīng)用監(jiān)控
  • 支持各種 IED,如 IntelliJ IDEA 办铡、NetBeans

Spring Boot 的這些特性非常方便辞做、快速構(gòu)建獨(dú)立的微服務(wù)。所以我們使用 Spring Boot 開發(fā)項(xiàng)目寡具,會(huì)給我們傳統(tǒng)開發(fā)帶來非常大的便利度凭豪,可以說如果你使用過 Spring Boot 開發(fā)過項(xiàng)目,就不會(huì)再愿意以以前的方式去開發(fā)項(xiàng)目了晒杈。

總結(jié)一下嫂伞,使用 Spring Boot 至少可以給我們帶來以下幾方面的改進(jìn)

  • Spring Boot 使編碼變簡單,Spring Boot 提供了豐富的解決方案拯钻,快速集成各種解決方案提升開發(fā)效率帖努。
  • Spring Boot 使配置變簡單,Spring Boot 提供了豐富的 Starters粪般,集成主流開源產(chǎn)品往往只需要簡單的配置即可拼余。
  • Spring Boot 使部署變簡單,Spring Boot 本身內(nèi)嵌啟動(dòng)容器亩歹,僅僅需要一個(gè)命令即可啟動(dòng)項(xiàng)目匙监,結(jié)合 Jenkins 凡橱、Docker 自動(dòng)化運(yùn)維非常容易實(shí)現(xiàn)。
  • Spring Boot 使監(jiān)控變簡單亭姥,Spring Boot 自帶監(jiān)控組件稼钩,使用 Actuator 輕松監(jiān)控服務(wù)各項(xiàng)狀態(tài)。

總結(jié)达罗,Spring Boot 是 Java 領(lǐng)域最優(yōu)秀的微服務(wù)架構(gòu)落地技術(shù)坝撑,沒有之一。

三者之間的糾葛

了解完微服務(wù)架構(gòu)粮揉、Spring Boot巡李、大數(shù)據(jù)治理之后,我們就發(fā)現(xiàn)這樣一個(gè)有趣的事情:微服務(wù)架構(gòu)是一種架構(gòu)思想扶认,是架構(gòu)不斷發(fā)展的必然結(jié)果侨拦,具有構(gòu)建靈活、易擴(kuò)展辐宾、快速應(yīng)用狱从、可伸縮性、高可用等特點(diǎn)螃概;微服務(wù)架構(gòu)思想的推出對技術(shù)有了更高的要求矫夯,在這樣的背景下 Spring Boot 孕育而生,Spring Boot 出生名門吊洼,從一開始就站在一個(gè)比較高的起點(diǎn)训貌,又經(jīng)過這幾年的發(fā)展,生態(tài)足夠完善冒窍,Spring Boot 已經(jīng)當(dāng)之無愧成為 Java 領(lǐng)域最熱門的技術(shù)递沪。

微服務(wù)架構(gòu)下,數(shù)據(jù)被分隔到 N 個(gè)獨(dú)立的微服務(wù)中综液,如何應(yīng)對市場款慨、業(yè)務(wù)對大量數(shù)據(jù)的查詢、分析就變的非常急迫谬莹,利用 Spring Boot 和 MongoDB 可以輕松的解決這個(gè)問題檩奠,通過技術(shù)手段將分裂到 N 個(gè)微服務(wù)的數(shù)據(jù)同步到 MongoDB 集群中,在同步的過程中進(jìn)行數(shù)據(jù)清洗附帽,來滿足公司的各項(xiàng)業(yè)務(wù)需求埠戳。Spring Boot 對 MongoDB 的支持非常友好,一方面 Spring Data 技術(shù)預(yù)生成很多常用方法便于使用蕉扮,另一方面 Spring Boot 封裝了分布式計(jì)算的相關(guān)函數(shù)整胃,可以讓我們以較簡潔的方式來實(shí)現(xiàn)統(tǒng)計(jì)查詢。

Spring Boot 是 Java 領(lǐng)域微服務(wù)架構(gòu)最優(yōu)落地技術(shù)喳钟,Spring Boot+MongoDB 方案是在微服務(wù)架構(gòu)下數(shù)據(jù)治理的最佳方案之一屁使。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末在岂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛮寂,更是在濱河造成了極大的恐慌蔽午,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件共郭,死亡現(xiàn)場離奇詭異祠丝,居然都是意外死亡疾呻,警方通過查閱死者的電腦和手機(jī)除嘹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岸蜗,“玉大人尉咕,你說我怎么就攤上這事×г溃” “怎么了年缎?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铃慷。 經(jīng)常有香客問我单芜,道長,這世上最難降的妖魔是什么犁柜? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任洲鸠,我火速辦了婚禮,結(jié)果婚禮上馋缅,老公的妹妹穿的比我還像新娘扒腕。我一直安慰自己,他們只是感情好萤悴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布瘾腰。 她就那樣靜靜地躺著,像睡著了一般覆履。 火紅的嫁衣襯著肌膚如雪蹋盆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天硝全,我揣著相機(jī)與錄音栖雾,去河邊找鬼。 笑死柳沙,一個(gè)胖子當(dāng)著我的面吹牛岩灭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赂鲤,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼噪径,長吁一口氣:“原來是場噩夢啊……” “哼柱恤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起找爱,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤梗顺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后车摄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寺谤,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年吮播,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了变屁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡意狠,死狀恐怖粟关,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情环戈,我是刑警寧澤曲管,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布迁酸,位于F島的核電站专甩,受9級特大地震影響戏溺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拦止,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一县遣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧创泄,春花似錦艺玲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搁拙,卻和暖如春秒梳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箕速。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工酪碘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盐茎。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓兴垦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子探越,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容