自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 架構(gòu)
微服務(wù)的誕生并非偶然,它是在互聯(lián)網(wǎng)高速發(fā)展,技術(shù)日新月異的變化以及傳統(tǒng)架構(gòu)無(wú)法適應(yīng)快速變化等多重因素的推動(dòng)下誕生的產(chǎn)物。

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

微服務(wù)的誕生并非偶然,它是在互聯(lián)網(wǎng)高速發(fā)展,技術(shù)日新月異的變化以及傳統(tǒng)架構(gòu)無(wú)法適應(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)對(duì)需求的變化;同時(shí),隨著用戶的增加,如何保證系統(tǒng)的可伸縮性、高可用性,成為系統(tǒng)架構(gòu)面臨的挑戰(zhàn)。

[[265482]]

如果還按照以前傳統(tǒng)開發(fā)模式,開發(fā)一個(gè)大型而全的系統(tǒng)已經(jīng)很難滿足市場(chǎng)對(duì)技術(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 在文中闡述了對(duì)微服務(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í)的通信機(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ī)制,對(duì)具體的一個(gè)服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下文,選擇合適的語(yǔ)言、工具對(duì)其進(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ù)庫(kù)。

整個(gè)業(yè)務(wù)數(shù)據(jù)被分散在各個(gè)子服務(wù)之后會(huì)帶來兩個(gè)最明顯的問題:1、業(yè)務(wù)管理系統(tǒng)對(duì)數(shù)據(jù)完整的查詢,比如分頁(yè)查詢、多條件查詢等,數(shù)據(jù)被割裂后如何來整合?2、如何對(duì)數(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)在對(duì)各個(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ù)庫(kù)中,在同步的過程中進(jìn)行數(shù)據(jù)整合處理,以滿足業(yè)務(wù)方對(duì)數(shù)據(jù)的需求,數(shù)據(jù)同步過來后,再提供另外一個(gè)服務(wù)接口專業(yè)負(fù)責(zé)對(duì)外輸出數(shù)據(jù)信息。這種方案有兩個(gè)特點(diǎn):1)數(shù)據(jù)同步方案是關(guān)鍵,技術(shù)選型有很多,如何選擇切合公司業(yè)務(wù)的技術(shù)方案;2)離線數(shù)據(jù)處理對(duì)微服務(wù)正常業(yè)務(wù)處理沒有影響。

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

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

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

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

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

MongoDB 的這些特性非常方便對(duì)數(shù)據(jù)進(jìn)行高性能查詢,MongoDB 支持 Aggregate 和 Mapreduce 利用分而治之的理念來處理大規(guī)模數(shù)據(jù)分析。Spring Boot 對(duì) MongoDB 的支持非常友好,使用 Spring Boot 非常便利的處理對(duì) MongoDB 查詢和操作,Spring Boot 也提供了組件包來支持對(duì) 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ì)目的是用來簡(jiǎn)化新 Spring 應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。采用 Spring Boot 可以大大的簡(jiǎn)化開發(fā)模式,所有你想集成的常用框架,它都有對(duì)應(yīng)的組件支持。

Spring Boot 基于 Spring 開發(fā),Spirng Boot 本身并不提供 Spring 框架的核心特性以及擴(kuò)展功能,只是用于快速、敏捷地開發(fā)新一代基于 Spring 框架的應(yīng)用程序。也就是說,它并不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開發(fā)者體驗(yàn)的工具。同時(shí)它集成了大量常用的第三方庫(kù)配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 應(yīng)用中這些第三方庫(kù)幾乎可以零配置的開箱即用,大部分的 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)首頁(yè)進(jìn)行重點(diǎn)推薦介紹,是目前 Spring 官方重點(diǎn)發(fā)展的項(xiàng)目之一。 

 

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

 

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ù)和新特性,并且對(duì) Spring Boot 1.0 的 API 進(jìn)行了大幅優(yōu)化。Spring Boot 一經(jīng)推出就迅速的成為一門熱門的技術(shù),從下圖也可以看出這個(gè)結(jié)論: 

 

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

 

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

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

隨著 Spring 不斷的發(fā)展,涉及的領(lǐng)域越來越多,項(xiàng)目整合開發(fā)需要配合各種各樣的文件,慢慢變得不那么易用簡(jiǎn)單,違背了最初的理念,甚至人稱配置地獄。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)頁(yè)面可以在幾秒構(gòu)建一個(gè)項(xiàng)目
  • 方便對(duì)外輸出各種形式的服務(wù),如 REST API、WebSocket、Web、Streaming、Tasks
  • 非常簡(jiǎn)潔的安全策略集成
  • 支持關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)
  • 支持運(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 使編碼變簡(jiǎn)單,Spring Boot 提供了豐富的解決方案,快速集成各種解決方案提升開發(fā)效率。
  • Spring Boot 使配置變簡(jiǎn)單,Spring Boot 提供了豐富的 Starters,集成主流開源產(chǎn)品往往只需要簡(jiǎn)單的配置即可。
  • Spring Boot 使部署變簡(jiǎn)單,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)控變簡(jiǎn)單,Spring Boot 自帶監(jiān)控組件,使用 Actuator 輕松監(jiān)控服務(wù)各項(xiàng)狀態(tài)。

總結(jié),Spring Boot 是 Java 領(lǐng)域***秀的微服務(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)思想的推出對(duì)技術(shù)有了更高的要求,在這樣的背景下 Spring Boot 孕育而生,Spring Boot 出生名門,從一開始就站在一個(gè)比較高的起點(diǎn),又經(jīng)過這幾年的發(fā)展,生態(tài)足夠完善,Spring Boot 已經(jīng)當(dāng)之無(wú)愧成為 Java 領(lǐng)域最熱門的技術(shù)。

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

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

當(dāng)然如果我們對(duì)微服務(wù)架構(gòu)、Spring Boot 、MongoDB 不熟悉的話,可能需要走很多的彎路。錯(cuò)誤的技術(shù)方案會(huì)對(duì)后期的微服務(wù)落地帶來非常大的困擾,增加額外的開發(fā)工作量,我自己深有體會(huì),合適的技術(shù)方案可以節(jié)省60%以上的工作量。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2018-05-29 15:33:33

Spring Boot微服務(wù)大數(shù)據(jù)

2023-11-21 08:37:09

2017-02-10 09:00:03

HadoopSparkStorm

2023-05-17 16:01:00

物聯(lián)網(wǎng)數(shù)據(jù)治理

2019-05-28 10:30:16

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

2019-10-12 08:59:36

軟件DevOps技術(shù)

2018-04-27 23:14:26

物聯(lián)網(wǎng)云計(jì)算大數(shù)據(jù)

2022-09-21 16:56:16

設(shè)計(jì)模式微服務(wù)架構(gòu)

2020-10-29 08:55:04

微服務(wù)

2020-04-21 17:50:02

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

2017-09-18 17:00:02

前端URLURN

2020-06-10 10:20:24

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

2018-11-07 10:00:00

微服務(wù)Service MesIstio

2022-11-09 09:15:31

ProtoBufGo語(yǔ)言

2025-04-30 10:36:17

2021-03-02 11:32:03

云計(jì)算大數(shù)據(jù)人工智能

2021-03-17 10:52:56

云計(jì)算大數(shù)據(jù)人工智能

2023-01-14 15:32:00

云原生大數(shù)據(jù)架構(gòu)

2020-10-08 14:32:57

大數(shù)據(jù)工具技術(shù)

2018-04-03 13:08:31

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)