Spring數據框架在數據處理以及微服務方面的進步
大?。?/span>0.4 MB 人氣: 2017-10-11 需要積分:1
定量分析能否成功,在很大程度上要依賴于其收集、存儲與處理數據的能力。如果企業決策者能獲得及時、可靠的見解分析,那么大數據項目的成功幾率就會有所提高。
如今,想要為數據處理搭建合適的架構,需要付出頗為可觀的努力。數據處理的類型主要集中在三個方面:
批處理:多用于處理大量具有可擴展性與分布性的靜態數據。 實時處理:主要用于處理流式數據(連續不斷的無限數據流),這類數據具有分布性與高速率特質。 混合計算模式:這種模式是批處理與實時處理的結合,可處理大容量的高速率數據。
大數據工程很花時間,同時要求工程師具備數據采集與數據處理的相關技巧,在大多解決方案中,時間與技能這兩點都必不可少。Pivotal公司發布的Spring XD和Spring Cloud Dataflow這兩款產品,都是用于減少大數據工程中開銷的。本文會對Spring XD做以簡單的介紹,并對其最新版,也就是Spring Cloud Data Flow進行更為詳盡的介紹。
Spring XD
第一輪創新的結果造就了Spring XD(eXtreme Data,極限數據),這項技術為解決大數據處理的相關任務提供了易于使用的解決方案。Spring XD建立在成熟的Spring技術之上,為數據獲取、遷移、處理、深度分析、流處理以及批處理任務提供支持。
Spring XD提供的框架可用于實時處理及批處理任務,該框架具有復雜性、穩定性及可擴展性。有了Spring XD,無論是收集數據,還是將數據從不同的數據源遷移到目標上,都變得更為簡單。
Spring XD架構已廣泛用于傳統的企業ETL中、實時分析中與數據科學項目的工作臺的創建中。
基于Spring XD的架構:
這種架構在下圖中有所表現,在下列模塊協助下,我們能夠創建、運行、部署、撤銷數據流通道(data pipeline),在框架中執行任意類型的數據處理任務。
SpringXD的主要組件是Admin和Container。
Admin UI向服務器發送需要處理的請求,而服務器通過執行任務的相關模塊來處理請求。在這里,一個模塊就是創建Spring應用前后關系(application context)的一個組件。
所有模塊都需要XD容器才能運行和執行任務。
下面是Spring XD架構的關鍵模塊。
Source:數據流的創建總是始于source模塊。Source可以使用輪詢機制或事件驅動機制,并且只會輸出一個結果。 Processor:接受信息輸入,并對輸入的信息執行某種類型的處理,然后再輸出信息。 Sink:顧名思義這個模塊是負責終止數據流的,然后將輸出結果發送到HDFS之類的外部資源中。 Job:這個模塊負責執行批處理任務。
Spring Cloud Data Flow的需求
在Spring XD中,本質上不斷變更的應用與需求之間還存在著缺口,需要我們在新一輪創新中解決。下面是推動新框架需求最為關鍵的要求:
在云技術的推動下,平臺級別的操作與非功能需求都能很容易的實現。至于應用級別的非功能需求,仍是很有挑戰性的。
我們對系統分階段交付、執行動態資源分配、具有擴展能力以及在分布式環境中追蹤的能力,都有著越來越大的需求。
如今,人們對于平臺的需求從功能性轉向選擇云供應商?;谖⒎盏脑萍軜嫺m合這一目標,但Spring XD并不能直接支持微服務架構。
Spring XD支持大數據場景,但仍有很大一部分項目無需Hadoop提供數據存儲與處理服務。
Spring Cloud Data Flow
在第二輪的創新中,Pivotal公司推出了Spring Cloud Data Flow,作為Spring XD的替代產品。Spring Cloud Data Flow繼承了Spring XD的優點,并提供了更有擴展性的解決方案——利用云技術的原生方式。Spring Cloud Data Flow是一個混合計算模型,結合了流數據與批量數據的處理方式。開發者可以通過Spring Cloud Data Flow,在諸如數據獲取、實時分析、批處理等常見用例中執行數據流的創建與編排。Spring Cloud Data Flow的目標就是為了方便數據工程師,讓他們能專注于分析工作和具體的問題。Spring Cloud Data Flow僅提供了管理服務的模型。
Spring Cloud Data Flow的架構
Spring Cloud Data Flow是Spring XD的修訂版,在功能的構成方式上,還有如何協助原生云架構擴展應用方面,都做出了根本性的改變。
Spring Cloud Data Flow不再使用傳統基于組件的架構了,而是采用了信息驅動的微服務架構,這種架構更適合原生云應用平臺的原生應用。Spring XD的模塊現在被部署到云上的微服務取代。
主要變化出現在下面這些領域中:
Spring Cloud Data Flow利用原生云平臺引進了新的服務提供商接口(SPI),取代Spring XD原有的運行層。
雖然類似Admin REST API、shell層和UI層之類的用戶接口與集成元素都與Spring XD中的一致,但底層架構發生了變化。
服務提供商接口或者SPI取代了基于Zookeeper的運行方式?,F在,SPI能夠協同Pivotal的Cloud Foundry或者Yarn之類監控/發布微服務應用的系統一同運作。
下表對Spring Cloud Data Flow的各個組件做了解釋:
組件
目的
核心域模塊 數據流的主要基礎組成,包含了類似source、sink、stream之類的模塊,以及批處理任務,所有這些模塊都是Spring Boot Data的微服務應用。
模塊注冊 使用Maven維護著可用的模塊。
Module Deployer SPI 在不同的運行環境(比如Lattice、Cloud Foundry、Yarn和Local)中部署模塊的抽象層。
Admin 屬于Spring Boot應用,提供REST API和UI。
Shell 使用Shell可以運行DSL命令以創建、處理、撤銷數據流或執行其他的簡單任務,并連接Admin的Rest API。
上圖表現了使用Spring Cloud Data Flow所創建的典型數據流。
Source、job、sink和processor模塊都是Spring Boot的微服務,可以部署在Cloud Foundry、Lattice或Yarn集群上。使用這些微服務來部署原生云平臺,我們就能創建數據流,并將其輸入基于Yarn、Lattice或Cloud Foundry的目標。特定平臺的SPI(服務提供商接口)可用于基于平臺部署的微服務綁定、探索以及綁定通道。
用例
Spring Cloud Data Flow的真正好處在于它能夠快速安裝與配置,通過統一的框架構建數據的收集及處理步驟,因此開發者就能專注于具體問題的解決。
我們打算對構建非現有源(如Facebook數據)用例的所需更改作出高度概括,這種做法是為了分析Facebook的帖子,在Spring Cloud Data stream的模塊中,沒有現成的Facebook數據源,因此我們需要為Facebook源創建定制的模塊。創建數據流需要三個主要的微服務:source、processor和sink,三者的接口均已提供。
Facebook數據流的Source and Sink微服務示例代碼如下:
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) 探測到了binder的實現(需要在應用路徑中按照Redis的方式進行設置),之后binder創建了通道適配器。所有微服務都以Spring Boot應用的形式進行開發,以便我們更好地管理依賴關系。
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的數據流,將其寫入控制臺,并將Sink.class作為@EnableBinding的參數。在本例中,@ServiceActivator與端點控制臺的輸入是相關聯的。
Processor微服務會根據SPEL expressions,篩選來自FBSource微服務的Facebook帖。processor微服務的輸出結果就是FBSink的輸入內容。
結論
Spring Cloud Data Flow使用了Spring Cloud stream模塊,我們可以利用這些模塊以Spring Boot應用的形式創建運行信息傳遞微服務,這樣它們就能部署在不同的平臺上,獨立運行并相互交互。在使用Spring Cloud stream模塊創建數據流通道的時候,Spring Cloud Data Flow扮演了粘合劑的作用。
目前,在數據收集、實時分析與數據載入方面有很多獨立的開源項目。Spring Cloud Data Flow為數據收集、實時分析、批處理與數據輸出提供了統一、分布式的可擴展服務。
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%