Spring數(shù)據(jù)框架在數(shù)據(jù)處理以及微服務(wù)方面的進(jìn)步
大小:0.4 MB 人氣: 2017-10-11 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:spring框架(2011)
導(dǎo)言:本文講述了Spring數(shù)據(jù)框架在數(shù)據(jù)處理以及微服務(wù)方面的進(jìn)化史。定量分析能否成功,在很大程度上要依賴于其收集、存儲(chǔ)與處理數(shù)據(jù)的能力。如果企業(yè)決策者能獲得及時(shí)、可靠的見(jiàn)解分析,那么大數(shù)據(jù)項(xiàng)目的成功幾率就會(huì)有所提高。
如今,想要為數(shù)據(jù)處理搭建合適的架構(gòu),需要付出頗為可觀的努力。數(shù)據(jù)處理的類(lèi)型主要集中在三個(gè)方面:
批處理:多用于處理大量具有可擴(kuò)展性與分布性的靜態(tài)數(shù)據(jù)。 實(shí)時(shí)處理:主要用于處理流式數(shù)據(jù)(連續(xù)不斷的無(wú)限數(shù)據(jù)流),這類(lèi)數(shù)據(jù)具有分布性與高速率特質(zhì)。 混合計(jì)算模式:這種模式是批處理與實(shí)時(shí)處理的結(jié)合,可處理大容量的高速率數(shù)據(jù)。
大數(shù)據(jù)工程很花時(shí)間,同時(shí)要求工程師具備數(shù)據(jù)采集與數(shù)據(jù)處理的相關(guān)技巧,在大多解決方案中,時(shí)間與技能這兩點(diǎn)都必不可少。Pivotal公司發(fā)布的Spring XD和Spring Cloud Dataflow這兩款產(chǎn)品,都是用于減少大數(shù)據(jù)工程中開(kāi)銷(xiāo)的。本文會(huì)對(duì)Spring XD做以簡(jiǎn)單的介紹,并對(duì)其最新版,也就是Spring Cloud Data Flow進(jìn)行更為詳盡的介紹。
Spring XD
第一輪創(chuàng)新的結(jié)果造就了Spring XD(eXtreme Data,極限數(shù)據(jù)),這項(xiàng)技術(shù)為解決大數(shù)據(jù)處理的相關(guān)任務(wù)提供了易于使用的解決方案。Spring XD建立在成熟的Spring技術(shù)之上,為數(shù)據(jù)獲取、遷移、處理、深度分析、流處理以及批處理任務(wù)提供支持。
Spring XD提供的框架可用于實(shí)時(shí)處理及批處理任務(wù),該框架具有復(fù)雜性、穩(wěn)定性及可擴(kuò)展性。有了Spring XD,無(wú)論是收集數(shù)據(jù),還是將數(shù)據(jù)從不同的數(shù)據(jù)源遷移到目標(biāo)上,都變得更為簡(jiǎn)單。
Spring XD架構(gòu)已廣泛用于傳統(tǒng)的企業(yè)ETL中、實(shí)時(shí)分析中與數(shù)據(jù)科學(xué)項(xiàng)目的工作臺(tái)的創(chuàng)建中。
基于Spring XD的架構(gòu):
這種架構(gòu)在下圖中有所表現(xiàn),在下列模塊協(xié)助下,我們能夠創(chuàng)建、運(yùn)行、部署、撤銷(xiāo)數(shù)據(jù)流通道(data pipeline),在框架中執(zhí)行任意類(lèi)型的數(shù)據(jù)處理任務(wù)。
SpringXD的主要組件是Admin和Container。
Admin UI向服務(wù)器發(fā)送需要處理的請(qǐng)求,而服務(wù)器通過(guò)執(zhí)行任務(wù)的相關(guān)模塊來(lái)處理請(qǐng)求。在這里,一個(gè)模塊就是創(chuàng)建Spring應(yīng)用前后關(guān)系(application context)的一個(gè)組件。
所有模塊都需要XD容器才能運(yùn)行和執(zhí)行任務(wù)。
下面是Spring XD架構(gòu)的關(guān)鍵模塊。
Source:數(shù)據(jù)流的創(chuàng)建總是始于source模塊。Source可以使用輪詢機(jī)制或事件驅(qū)動(dòng)機(jī)制,并且只會(huì)輸出一個(gè)結(jié)果。 Processor:接受信息輸入,并對(duì)輸入的信息執(zhí)行某種類(lèi)型的處理,然后再輸出信息。 Sink:顧名思義這個(gè)模塊是負(fù)責(zé)終止數(shù)據(jù)流的,然后將輸出結(jié)果發(fā)送到HDFS之類(lèi)的外部資源中。 Job:這個(gè)模塊負(fù)責(zé)執(zhí)行批處理任務(wù)。
Spring Cloud Data Flow的需求
在Spring XD中,本質(zhì)上不斷變更的應(yīng)用與需求之間還存在著缺口,需要我們?cè)谛乱惠唲?chuàng)新中解決。下面是推動(dòng)新框架需求最為關(guān)鍵的要求:
在云技術(shù)的推動(dòng)下,平臺(tái)級(jí)別的操作與非功能需求都能很容易的實(shí)現(xiàn)。至于應(yīng)用級(jí)別的非功能需求,仍是很有挑戰(zhàn)性的。
我們對(duì)系統(tǒng)分階段交付、執(zhí)行動(dòng)態(tài)資源分配、具有擴(kuò)展能力以及在分布式環(huán)境中追蹤的能力,都有著越來(lái)越大的需求。
如今,人們對(duì)于平臺(tái)的需求從功能性轉(zhuǎn)向選擇云供應(yīng)商。基于微服務(wù)的云架構(gòu)更適合這一目標(biāo),但Spring XD并不能直接支持微服務(wù)架構(gòu)。
Spring XD支持大數(shù)據(jù)場(chǎng)景,但仍有很大一部分項(xiàng)目無(wú)需Hadoop提供數(shù)據(jù)存儲(chǔ)與處理服務(wù)。
Spring Cloud Data Flow
在第二輪的創(chuàng)新中,Pivotal公司推出了Spring Cloud Data Flow,作為Spring XD的替代產(chǎn)品。Spring Cloud Data Flow繼承了Spring XD的優(yōu)點(diǎn),并提供了更有擴(kuò)展性的解決方案——利用云技術(shù)的原生方式。Spring Cloud Data Flow是一個(gè)混合計(jì)算模型,結(jié)合了流數(shù)據(jù)與批量數(shù)據(jù)的處理方式。開(kāi)發(fā)者可以通過(guò)Spring Cloud Data Flow,在諸如數(shù)據(jù)獲取、實(shí)時(shí)分析、批處理等常見(jiàn)用例中執(zhí)行數(shù)據(jù)流的創(chuàng)建與編排。Spring Cloud Data Flow的目標(biāo)就是為了方便數(shù)據(jù)工程師,讓他們能專(zhuān)注于分析工作和具體的問(wèn)題。Spring Cloud Data Flow僅提供了管理服務(wù)的模型。
Spring Cloud Data Flow的架構(gòu)
Spring Cloud Data Flow是Spring XD的修訂版,在功能的構(gòu)成方式上,還有如何協(xié)助原生云架構(gòu)擴(kuò)展應(yīng)用方面,都做出了根本性的改變。
Spring Cloud Data Flow不再使用傳統(tǒng)基于組件的架構(gòu)了,而是采用了信息驅(qū)動(dòng)的微服務(wù)架構(gòu),這種架構(gòu)更適合原生云應(yīng)用平臺(tái)的原生應(yīng)用。Spring XD的模塊現(xiàn)在被部署到云上的微服務(wù)取代。
主要變化出現(xiàn)在下面這些領(lǐng)域中:
Spring Cloud Data Flow利用原生云平臺(tái)引進(jìn)了新的服務(wù)提供商接口(SPI),取代Spring XD原有的運(yùn)行層。
雖然類(lèi)似Admin REST API、shell層和UI層之類(lèi)的用戶接口與集成元素都與Spring XD中的一致,但底層架構(gòu)發(fā)生了變化。
服務(wù)提供商接口或者SPI取代了基于Zookeeper的運(yùn)行方式。現(xiàn)在,SPI能夠協(xié)同Pivotal的Cloud Foundry或者Yarn之類(lèi)監(jiān)控/發(fā)布微服務(wù)應(yīng)用的系統(tǒng)一同運(yùn)作。

下表對(duì)Spring Cloud Data Flow的各個(gè)組件做了解釋?zhuān)?br /> 組件
目的
核心域模塊 數(shù)據(jù)流的主要基礎(chǔ)組成,包含了類(lèi)似source、sink、stream之類(lèi)的模塊,以及批處理任務(wù),所有這些模塊都是Spring Boot Data的微服務(wù)應(yīng)用。
模塊注冊(cè) 使用Maven維護(hù)著可用的模塊。
Module Deployer SPI 在不同的運(yùn)行環(huán)境(比如Lattice、Cloud Foundry、Yarn和Local)中部署模塊的抽象層。
Admin 屬于Spring Boot應(yīng)用,提供REST API和UI。
Shell 使用Shell可以運(yùn)行DSL命令以創(chuàng)建、處理、撤銷(xiāo)數(shù)據(jù)流或執(zhí)行其他的簡(jiǎn)單任務(wù),并連接Admin的Rest API。

上圖表現(xiàn)了使用Spring Cloud Data Flow所創(chuàng)建的典型數(shù)據(jù)流。
Source、job、sink和processor模塊都是Spring Boot的微服務(wù),可以部署在Cloud Foundry、Lattice或Yarn集群上。使用這些微服務(wù)來(lái)部署原生云平臺(tái),我們就能創(chuàng)建數(shù)據(jù)流,并將其輸入基于Yarn、Lattice或Cloud Foundry的目標(biāo)。特定平臺(tái)的SPI(服務(wù)提供商接口)可用于基于平臺(tái)部署的微服務(wù)綁定、探索以及綁定通道。
用例
Spring Cloud Data Flow的真正好處在于它能夠快速安裝與配置,通過(guò)統(tǒng)一的框架構(gòu)建數(shù)據(jù)的收集及處理步驟,因此開(kāi)發(fā)者就能專(zhuān)注于具體問(wèn)題的解決。
我們打算對(duì)構(gòu)建非現(xiàn)有源(如Facebook數(shù)據(jù))用例的所需更改作出高度概括,這種做法是為了分析Facebook的帖子,在Spring Cloud Data stream的模塊中,沒(méi)有現(xiàn)成的Facebook數(shù)據(jù)源,因此我們需要為Facebook源創(chuàng)建定制的模塊。創(chuàng)建數(shù)據(jù)流需要三個(gè)主要的微服務(wù):source、processor和sink,三者的接口均已提供。
Facebook數(shù)據(jù)流的Source and Sink微服務(wù)示例代碼如下:
Facebook Source:
@SpringBootApplication@ComponentScan(.class) publicclassSourceApplication{publicstaticvoidmain(String[] args) { SpringApplication.run(SourceApplication.class, args); } } @Configuration@EnableBinding(Source.class) publicclassFBSource{@Value(“${format}”) privateString format; @Bean@InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = “${fixedDelay}”, maxMessagesPerPoll = “1”)) publicPostSource《String》 FBPostSource() { // Logic to get FB Posts from Facebook API’sreturn// FB Post }}
注解@EnableBindings(Source.class) 探測(cè)到了binder的實(shí)現(xiàn)(需要在應(yīng)用路徑中按照Redis的方式進(jìn)行設(shè)置),之后binder創(chuàng)建了通道適配器。所有微服務(wù)都以Spring Boot應(yīng)用的形式進(jìn)行開(kāi)發(fā),以便我們更好地管理依賴關(guān)系。
Facebook Sink:
@SpringBootApplication@EnableBinding(Sink.class) @ComponentScan(.class) publicclassSinkApplication{publicstaticvoidmain(String[] args) { SpringApplication.run(SinkApplication.class, args); } } @ConfigurationpublicclassFBSink{privatestaticLogger logger = LoggerFactory.getLogger(LogSink.class); @ServiceActivator(.INPUT) publicvoidloggerSink(Object payload) { logger.info(“Received: ”+ payload); } }
在上面的代碼中,我們使用source接收Facebook的數(shù)據(jù)流,將其寫(xiě)入控制臺(tái),并將Sink.class作為@EnableBinding的參數(shù)。在本例中,@ServiceActivator與端點(diǎn)控制臺(tái)的輸入是相關(guān)聯(lián)的。
Processor微服務(wù)會(huì)根據(jù)SPEL expressions,篩選來(lái)自FBSource微服務(wù)的Facebook帖。processor微服務(wù)的輸出結(jié)果就是FBSink的輸入內(nèi)容。
結(jié)論
Spring Cloud Data Flow使用了Spring Cloud stream模塊,我們可以利用這些模塊以Spring Boot應(yīng)用的形式創(chuàng)建運(yùn)行信息傳遞微服務(wù),這樣它們就能部署在不同的平臺(tái)上,獨(dú)立運(yùn)行并相互交互。在使用Spring Cloud stream模塊創(chuàng)建數(shù)據(jù)流通道的時(shí)候,Spring Cloud Data Flow扮演了粘合劑的作用。
目前,在數(shù)據(jù)收集、實(shí)時(shí)分析與數(shù)據(jù)載入方面有很多獨(dú)立的開(kāi)源項(xiàng)目。Spring Cloud Data Flow為數(shù)據(jù)收集、實(shí)時(shí)分析、批處理與數(shù)據(jù)輸出提供了統(tǒng)一、分布式的可擴(kuò)展服務(wù)。
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
Spring數(shù)據(jù)框架在數(shù)據(jù)處理以及微服務(wù)方面的進(jìn)步下載
相關(guān)電子資料下載
- Spring容器原始Bean是如何創(chuàng)建的?Spring源碼中方法的執(zhí)行順序 262
- 探討Spring框架中的屬性注入技術(shù) 291
- JAVA中注解是怎么做到的(下) 209
- JAVA中注解是怎么做到的(上) 296
- SpringBoot與SpringMVC的區(qū)別 315
- Spring框架的簡(jiǎn)單介紹及快速入門(mén)教程 987
- 在項(xiàng)目設(shè)計(jì)應(yīng)用中如何選擇框架,Struts和Spring框架對(duì)比 2576
- Spring框架功能的模塊作用介紹 6232
- Spring框架中調(diào)用HanLP分詞的方法 108
- 使用spring框架的好處說(shuō)明 18569