一文讀懂Spring Boot空郊、微服務架構和大數(shù)據(jù)治理之間的愛恨情仇

微服務架構

微服務的誕生并非偶然份招,它是在互聯(lián)網(wǎng)高速發(fā)展,技術日新月異的變化以及傳統(tǒng)架構無法適應快速變化等多重因素的推動下誕生的產(chǎn)物狞甚∷ぃ互聯(lián)網(wǎng)時代的產(chǎn)品通常有兩類特點:需求變化快和用戶群體龐大,在這種情況下哼审,如何從系統(tǒng)架構的角度出發(fā)谐腰,構建靈活、易擴展的系統(tǒng)涩盾,快速應對需求的變化十气;同時,隨著用戶的增加春霍,如何保證系統(tǒng)的可伸縮性砸西、高可用性,成為系統(tǒng)架構面臨的挑戰(zhàn)。

如果還按照以前傳統(tǒng)開發(fā)模式芹枷,開發(fā)一個大型而全的系統(tǒng)已經(jīng)很難滿足市場對技術的需求衅疙,這時候分而治之的思想被提了出來,于是我們從單獨架構發(fā)展到分布式架構鸳慈,又從分布式架構發(fā)展到 SOA 架構饱溢,服務不斷的被拆分和分解,粒度也越來越小走芋,直到微服務架構的誕生绩郎。

微服務架構是 SOA 架構的傳承,但一個最本質的區(qū)別就在于微服務是真正的分布式的翁逞、去中心化的肋杖。把所有的“思考”邏輯包括路由、消息解析等放在服務內部熄攘,去掉一個大一統(tǒng)的 ESB兽愤,服務間輕通信,是比 SOA 更徹底的拆分挪圾。微服務架構強調的重點是業(yè)務系統(tǒng)需要徹底的組件化和服務化浅萧,原有的單個業(yè)務系統(tǒng)會拆分為多個可以獨立開發(fā),設計哲思,運行和運維的小應用洼畅,這些小應用之間通過服務完成交互和集成。

大約 2009 年開始棚赔,Netflix 完全重新定義了它的應用程序開發(fā)和操作模型帝簇,拉開了微服務探索的第一步,直到2014年3月 Martin Fowler 寫的一篇文章?Microservices?以更加通俗易懂的形式為大家定義了什么是微服務架構靠益。Martin Fowler 在文中闡述了對微服務架構的設想丧肴,認為微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務胧后,服務之間互相協(xié)調芋浮、互相配合,為用戶提供最終價值壳快。

每個服務運行在其獨立的進程中纸巷,服務和服務間采用輕量級的通信機制互相溝通(通常是基于 HTTP 的 RESTful API)。每個服務都圍繞著具體業(yè)務進行構建眶痰,并且能夠被獨立地部署到生產(chǎn)環(huán)境瘤旨、類生產(chǎn)環(huán)境等。另外竖伯,應盡量避免統(tǒng)一的存哲、集中式的服務管理機制因宇,對具體的一個服務而言,應根據(jù)業(yè)務上下文宏胯,選擇合適的語言羽嫡、工具對其進行構建。

微服務架構和數(shù)據(jù)治理

隨著微服務架構的落地肩袍,人們發(fā)現(xiàn)微服務架構雖然改進了開發(fā)模式,但同時也引入了一些問題婚惫,在這所有的問題中氛赐,最重要的也是馬上要面臨的一個問題就是數(shù)據(jù)的問題。在微服務架構中我們強調徹底的組件化和服務化先舷,每個微服務都可以獨立的部署和投產(chǎn)艰管,其實也就意味著很多的微服務有自己獨立的數(shù)據(jù)庫。

整個業(yè)務數(shù)據(jù)被分散在各個子服務之后會帶來兩個最明顯的問題:1蒋川、業(yè)務管理系統(tǒng)對數(shù)據(jù)完整的查詢牲芋,比如分頁查詢、多條件查詢等捺球,數(shù)據(jù)被割裂后如何來整合缸浦?2、如何對數(shù)據(jù)進一步的分析挖掘氮兵?這些需求可能需要分析全量的數(shù)據(jù)裂逐,并且在分析時不能影響到當前業(yè)務。

從技術方案來講泣栈,我們一般有兩種選擇來處理這些問題卜高,第一種是在線處理數(shù)據(jù),第二種是離線處理數(shù)據(jù)南片。

在線處理數(shù)據(jù)的方案就是按照微服務的標準接口來進行掺涛,后端需要哪個系統(tǒng)的數(shù)據(jù)就去調用某個微服務提供的接口來獲取。后端管理平臺根據(jù)前端的需求去不同的微服務系統(tǒng)去獲取數(shù)據(jù)疼进,然后將返回的數(shù)據(jù)進行處理后將數(shù)據(jù)返回阿趁。這種方案有兩個弊端:1)一方面微服務數(shù)據(jù)方需要提供數(shù)據(jù)接口,一方面數(shù)據(jù)的使用者需要去寫調用方法吆录,并且調用者需要編寫大量的代碼進行數(shù)據(jù)處理鸡号;2)在對各個微服務進行調取數(shù)據(jù)時會影響微服務的正常業(yè)務處理性能。

離線處理數(shù)據(jù)方案赔癌,就是將業(yè)務數(shù)據(jù)準實時的同步到另外一個數(shù)據(jù)庫中诞外,在同步的過程中進行數(shù)據(jù)整合處理,以滿足業(yè)務方對數(shù)據(jù)的需求灾票,數(shù)據(jù)同步過來后峡谊,再提供另外一個服務接口專業(yè)負責對外輸出數(shù)據(jù)信息。這種方案有兩個特點:1)數(shù)據(jù)同步方案是關鍵,技術選型有很多既们,如何選擇切合公司業(yè)務的技術方案濒析;2)離線數(shù)據(jù)處理對微服務正常業(yè)務處理沒有影響。

在我以往的工作中兩種方案都實施過啥纸,個人更傾向于使用第二種方案号杏。

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

MongoDB 稱之為對開發(fā)人員最友好的數(shù)據(jù)庫,不再強調傳統(tǒng)關系數(shù)據(jù)庫中的行和列斯棒,整個表可以看作一個 Json 文檔盾致,MongoDB 也被認為在 Nosql 中最像關系數(shù)據(jù)庫的 Nosql 數(shù)據(jù)庫,保留了類似關系數(shù)據(jù)庫的數(shù)據(jù)庫(DataBase)荣暮、集合(Collection)庭惜、文檔對象(Document)。

MongoDB 是目前最熱門非關系數(shù)據(jù)庫的之一穗酥,在最新的數(shù)據(jù)庫排行榜中 MongoDB 排名第五护赊,在所有的非關系數(shù)據(jù)庫中排名第一,非常廣泛的應用于國內外的互聯(lián)網(wǎng)公司砾跃。

MongoDB 最大的特點是支持的查詢語言非常強大骏啰,其語法有點類似于面向對象的查詢語言,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能蜓席,而且還支持對數(shù)據(jù)建立索引器一。MongoDB 在高可用和讀寫負載均衡上的實現(xiàn)非常簡潔和友好,MongoDB 自帶了副本集的概念厨内,通過設計恰當?shù)母北炯万寗映绦蚱盹酰梢苑浅1愕貙崿F(xiàn)高可用、讀寫負載均衡雏胃。

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

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

再來聊聊 Spring Boot

Spring Boot 是由 Pivotal 團隊提供的全新框架厂汗,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發(fā)過程委粉。該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置娶桦。采用 Spring Boot 可以大大的簡化開發(fā)模式贾节,所有你想集成的常用框架汁汗,它都有對應的組件支持。

Spring Boot 基于 Spring 開發(fā)栗涂,Spirng Boot 本身并不提供 Spring 框架的核心特性以及擴展功能知牌,只是用于快速、敏捷地開發(fā)新一代基于 Spring 框架的應用程序斤程。也就是說角寸,它并不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結合用于提升 Spring 開發(fā)者體驗的工具忿墅。同時它集成了大量常用的第三方庫配置(例如 Redis袭厂、MongoDB、Jpa球匕、RabbitMQ、Quartz 等等)帖烘,Spring Boot 應用中這些第三方庫幾乎可以零配置的開箱即用亮曹,大部分的 Spring Boot 應用都只需要非常少量的配置代碼,開發(fā)者能夠更加專注于業(yè)務邏輯秘症。

Spring Boot 一經(jīng)推出就受到開源社區(qū)的追捧照卦,Spring Boot 官方提供了很多 Starters 方便集成第三方產(chǎn)品,很多主流的框架也紛紛進行了主動的集成乡摹,比如 Mybatis役耕。Spring 官方非常重視 Spring Boot 的發(fā)展,在 Spring 官網(wǎng)首頁進行重點推薦介紹聪廉,是目前 Spring 官方重點發(fā)展的項目之一瞬痘。

Spring Boot 本身發(fā)展特別快,自從 2014 年 4 月發(fā)布 Spring Boot 1.0 之后板熊,版本更新非常頻繁框全,我在 2016 年使用的時候是 1.3.X,到現(xiàn)在 Spring Boot 已經(jīng)發(fā)布了 Spring Boot 2.0干签,Spring Boot 2.0 集成了很多最新優(yōu)秀的技術和新特性津辩,并且對 Spring Boot 1.0 的 API 進行了大幅優(yōu)化。Spring Boot 一經(jīng)推出就迅速的成為一門熱門的技術容劳,從下圖也可以看出這個結論:

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

Spring Boot 和 微服務架構

隨著 Spring 不斷的發(fā)展竭贩,涉及的領域越來越多蚜印,項目整合開發(fā)需要配合各種各樣的文件,慢慢變得不那么易用簡單娶视,違背了最初的理念晒哄,甚至人稱配置地獄睁宰。Spring Boot 正是在這樣的一個背景下被抽象出來的開發(fā)框架,目的為了讓大家更容易的使用 Spring 寝凌、更容易的集成各種常用的中間件柒傻、開源軟件;另一方面较木,Spring Boot 誕生時红符,正處于微服務概念在慢慢醞釀中,Spring Boot 的研發(fā)融合了微服務架構的理念伐债,實現(xiàn)了在 Java 領域內微服務架構落地的技術支撐预侯。

Spring Boot 作為一套全新的框架,來源于 Spring 大家族峰锁,因此 Spring 所有具備的功能它都有萎馅,而且更容易使用;Spring Boot 以約定大于配置的核心思想虹蒋,默認幫我們進行了很多設置糜芳,多數(shù) Spring Boot 應用只需要很少的 Spring 配置。Spring Boot 開發(fā)了很多的應用集成包魄衅,支持絕大多數(shù)開源軟件峭竣,讓我們以很低的成本去集成其他主流開源軟件。

Spring Boot 特性

使用 Spring 項目引導頁面可以在幾秒構建一個項目

方便對外輸出各種形式的服務晃虫,如 REST API皆撩、WebSocket、Web哲银、Streaming扛吞、Tasks

非常簡潔的安全策略集成

支持關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫

支持運行期內嵌容器,如 Tomcat盘榨、Jetty

強大的開發(fā)包喻粹,支持熱啟動

自動管理依賴

自帶應用監(jiān)控

支持各種 IED,如 IntelliJ IDEA 草巡、NetBeans

Spring Boot 的這些特性非常方便守呜、快速構建獨立的微服務。所以我們使用 Spring Boot 開發(fā)項目山憨,會給我們傳統(tǒng)開發(fā)帶來非常大的便利度查乒,可以說如果你使用過 Spring Boot 開發(fā)過項目,就不會再愿意以以前的方式去開發(fā)項目了郁竟。

總結一下玛迄,使用 Spring Boot 至少可以給我們帶來以下幾方面的改進

Spring Boot 使編碼變簡單,Spring Boot 提供了豐富的解決方案棚亩,快速集成各種解決方案提升開發(fā)效率蓖议。

Spring Boot 使配置變簡單虏杰,Spring Boot 提供了豐富的 Starters,集成主流開源產(chǎn)品往往只需要簡單的配置即可勒虾。

Spring Boot 使部署變簡單纺阔,Spring Boot 本身內嵌啟動容器,僅僅需要一個命令即可啟動項目修然,結合 Jenkins 笛钝、Docker 自動化運維非常容易實現(xiàn)。

Spring Boot 使監(jiān)控變簡單愕宋,Spring Boot 自帶監(jiān)控組件玻靡,使用 Actuator 輕松監(jiān)控服務各項狀態(tài)。

總結中贝,Spring Boot 是 Java 領域最優(yōu)秀的微服務架構落地技術囤捻,沒有之一。

三者之間的糾葛

了解完微服務架構邻寿、Spring Boot最蕾、大數(shù)據(jù)治理之后,我們就發(fā)現(xiàn)這樣一個有趣的事情:微服務架構是一種架構思想老厌,是架構不斷發(fā)展的必然結果,具有構建靈活黎炉、易擴展枝秤、快速應用、可伸縮性慷嗜、高可用等特點淀弹;微服務架構思想的推出對技術有了更高的要求,在這樣的背景下 Spring Boot 孕育而生庆械,Spring Boot 出生名門薇溃,從一開始就站在一個比較高的起點,又經(jīng)過這幾年的發(fā)展缭乘,生態(tài)足夠完善沐序,Spring Boot 已經(jīng)當之無愧成為 Java 領域最熱門的技術。

微服務架構下堕绩,數(shù)據(jù)被分隔到 N 個獨立的微服務中策幼,如何應對市場、業(yè)務對大量數(shù)據(jù)的查詢奴紧、分析就變的非常急迫特姐,利用 Spring Boot 和 MongoDB 可以輕松的解決這個問題,通過技術手段將分裂到 N 個微服務的數(shù)據(jù)同步到 MongoDB 集群中黍氮,在同步的過程中進行數(shù)據(jù)清洗唐含,來滿足公司的各項業(yè)務需求浅浮。Spring Boot 對 MongoDB 的支持非常友好,一方面 Spring Data 技術預生成很多常用方法便于使用捷枯,另一方面 Spring Boot 封裝了分布式計算的相關函數(shù)滚秩,可以讓我們以較簡潔的方式來實現(xiàn)統(tǒng)計查詢。

Spring Boot 是 Java 領域微服務架構最優(yōu)落地技術铜靶,Spring Boot+MongoDB 方案是在微服務架構下數(shù)據(jù)治理的最佳方案之一叔遂。


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市争剿,隨后出現(xiàn)的幾起案子已艰,更是在濱河造成了極大的恐慌,老刑警劉巖蚕苇,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哩掺,死亡現(xiàn)場離奇詭異,居然都是意外死亡涩笤,警方通過查閱死者的電腦和手機嚼吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹬碧,“玉大人舱禽,你說我怎么就攤上這事《鞴粒” “怎么了誊稚?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罗心。 經(jīng)常有香客問我里伯,道長,這世上最難降的妖魔是什么渤闷? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任疾瓮,我火速辦了婚禮,結果婚禮上飒箭,老公的妹妹穿的比我還像新娘狼电。我一直安慰自己,他們只是感情好弦蹂,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布漫萄。 她就那樣靜靜地躺著,像睡著了一般盈匾。 火紅的嫁衣襯著肌膚如雪腾务。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天削饵,我揣著相機與錄音岩瘦,去河邊找鬼未巫。 笑死,一個胖子當著我的面吹牛启昧,可吹牛的內容都是我干的叙凡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼密末,長吁一口氣:“原來是場噩夢啊……” “哼握爷!你這毒婦竟也來了?” 一聲冷哼從身側響起严里,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤新啼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刹碾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燥撞,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年迷帜,在試婚紗的時候發(fā)現(xiàn)自己被綠了物舒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡戏锹,死狀恐怖冠胯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情锦针,我是刑警寧澤涵叮,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伞插,受9級特大地震影響,放射性物質發(fā)生泄漏盾碗。R本人自食惡果不足惜媚污,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廷雅。 院中可真熱鬧耗美,春花似錦、人聲如沸航缀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芥玉。三九已至蛇摸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灿巧,已是汗流浹背赶袄。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工揽涮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饿肺。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓蒋困,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敬辣。 傳聞我的和親對象是個殘疾皇子雪标,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容