您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

Spring數(shù)據(jù)框架在數(shù)據(jù)處理以及微服務方面的進步

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

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?