楊改改, 高賢強
(塔里木大學 信息工程學院,新疆 阿拉爾 843300)
近年來,隨著農(nóng)業(yè)信息化建設(shè)的發(fā)展和農(nóng)業(yè)綜合生產(chǎn)力的提高[1],各類農(nóng)業(yè)數(shù)據(jù)得到重視,合理的保存和利用這些農(nóng)業(yè)數(shù)據(jù)可以更好地指導和推動農(nóng)業(yè)經(jīng)濟的有效發(fā)展。然而,我國農(nóng)業(yè)數(shù)據(jù)分布廣泛,增長迅速,農(nóng)業(yè)信息資源呈現(xiàn)多元化與異構(gòu)化特征[2-3]。面對海量農(nóng)業(yè)數(shù)據(jù)[4],通過購買昂貴的大型服務(wù)器存儲,不僅成本高,而且這些服務(wù)器大多采用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫管理數(shù)據(jù),導致系統(tǒng)擴展升級困難,可維護性差。云存儲能有效地解決海量數(shù)據(jù)的存儲問題,最大限度地整合系統(tǒng)的存儲能力,減低數(shù)據(jù)存儲成本,大幅提高系統(tǒng)的整體性能及可維護性[5-7]。
隨著平臺的不斷發(fā)展,用戶數(shù)量和業(yè)務(wù)需求日益增多,傳統(tǒng)單體應(yīng)用程序顯然很難滿足較大的網(wǎng)絡(luò)流量和復雜的業(yè)務(wù)需求,在這種情況下,可以采用微服務(wù)的架構(gòu)模式。這種架構(gòu)模式可將傳統(tǒng)的單體應(yīng)用按照業(yè)務(wù)劃分為一個個小的服務(wù),而這些小的服務(wù)之間又能相互通信、相互協(xié)調(diào)、相互配合,并具有可獨立部署、高可用、容錯等特點[8-10]。微服務(wù)架構(gòu)有效解決了單體架構(gòu)代碼量質(zhì)量差、耦合性高、系統(tǒng)可維護性差和可擴展性差等問題[11-12],使得農(nóng)業(yè)大數(shù)據(jù)可以更好地存儲和管理。
Martin Fowler和James Lewis于2014年共同提出微服務(wù)架構(gòu)的概念[13]。微服務(wù)架構(gòu)是軟件開發(fā)中的一種架構(gòu)風格,它將一個大型復雜軟件應(yīng)用根據(jù)業(yè)務(wù)功能劃分成多個微服務(wù)。每個服務(wù)運行在獨立進程中,服務(wù)底層可選擇適合自己的技術(shù)棧,實現(xiàn)并進行獨立部署,服務(wù)之間采用輕量級協(xié)議進行通信。
與微服務(wù)架構(gòu)相比,傳統(tǒng)的單體架構(gòu)系統(tǒng)耦合度高,擴展性和維護性較差。應(yīng)用微服務(wù)架構(gòu)可將業(yè)務(wù)系統(tǒng)徹底的組件化,圍繞業(yè)務(wù)功能組織服務(wù),邊界清晰,耦合度降低,使基礎(chǔ)設(shè)施自動化,利于應(yīng)用開發(fā)和部署[14]。本農(nóng)業(yè)數(shù)據(jù)云存儲平臺研究使用的SpringCloud微服務(wù)[15],是以SpringBoot[16]為基礎(chǔ),擁有一套完整的微服務(wù)實現(xiàn)組件,使分布式系統(tǒng)的開發(fā)更加簡單,平臺更易部署和維護。
Hadoop是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會開發(fā),實現(xiàn)了分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)[17]。Hadoop適于存儲TB和PB級別的大型數(shù)據(jù),其原理就是使用HDFS作為存儲系統(tǒng)。HDFS可運行于普通廉價機器,具有高容錯性,為數(shù)據(jù)存儲提供所需的擴展能力[18]。在一個Hadoop集群中,客戶端Client把上傳的文件切分成一個個Block,由NameNode處理客戶端請求,管理HDFS的名稱空間和數(shù)據(jù)塊(Block)映射信息。此外,多個DataNode節(jié)點存儲數(shù)據(jù)塊,執(zhí)行數(shù)據(jù)塊的讀寫操作,而SecondaryNameNode輔助NameNode,分擔其工作量。圖1為Hadoop存儲數(shù)據(jù)的結(jié)構(gòu)圖。

圖1 Hadoop存儲數(shù)據(jù)的結(jié)構(gòu)
農(nóng)業(yè)數(shù)據(jù)云存儲平臺是采用SpringCloud微服務(wù)架構(gòu),基于SpringBoot搭建微服務(wù)、前后端分離的理念進行開發(fā)的。圖2為基于SpringCloud 微服務(wù)架構(gòu)圖,采用SpringCloud的組件Eureka為注冊中心進行服務(wù)注冊,F(xiàn)eign完成服務(wù)間的調(diào)用,Hystrix為熔斷器來提高系統(tǒng)整體的彈性,使用Gateway集群實現(xiàn)路由、限流、鑒權(quán)功能。

圖2 SpringCloud 微服務(wù)的架構(gòu)
基于SpringCloud開發(fā)的農(nóng)業(yè)數(shù)據(jù)云存儲平臺主要使用Hadoop分布式存儲進行農(nóng)業(yè)數(shù)據(jù)的海量存儲,主要分為訪問層、轉(zhuǎn)發(fā)層、接口層、服務(wù)層和存儲層,圖3是平臺整體架構(gòu)圖。

圖3 基于SpringCloud的農(nóng)業(yè)數(shù)據(jù)云存儲平臺架構(gòu)
訪問層。該層主要是在客戶端展示平臺的業(yè)務(wù),給用戶提供訪問的端口,例如用PC端或者移動端去訪問農(nóng)業(yè)數(shù)據(jù)云存儲平臺,實現(xiàn)用戶和存儲平臺之間的交互。
轉(zhuǎn)發(fā)層。為避免服務(wù)器崩潰,讓用戶有更好的體驗,該層搭建Nginx集群作為負載均衡承受高用戶量的訪問,可把用戶的請求分布在各個服務(wù)器上來緩解服務(wù)器的壓力,使性能得以提升。
接口層。農(nóng)業(yè)數(shù)據(jù)平臺在該層搭建SpringCloud Gateway網(wǎng)關(guān)集群,提供一個簡單而有效的方式,對API進行路由。通過轉(zhuǎn)發(fā)服務(wù),使前端的調(diào)用邏輯和復雜的內(nèi)部服務(wù)調(diào)用變得更加簡便易操作,同時還具有安全、鑒權(quán)和限流功能。
服務(wù)層。該層基于微服務(wù)實現(xiàn),主要分為業(yè)務(wù)服務(wù)、公共抽取服務(wù)以及服務(wù)管理。業(yè)務(wù)服務(wù)主要完成平臺要實現(xiàn)的邏輯功能和對數(shù)據(jù)的操作,公共抽取服務(wù)主要是對Feign、Ribbon、Hystrix等微服務(wù)組件和常用工具類的抽取,而服務(wù)管理通過注冊發(fā)現(xiàn)、配置管理和監(jiān)控報警來支撐服務(wù)有效的運行,這些服務(wù)之間可通過HTTP或RPC協(xié)議互相調(diào)用。
存儲層。該層包括數(shù)據(jù)緩存和數(shù)據(jù)存儲。使用Redis數(shù)據(jù)庫做數(shù)據(jù)緩存可保證數(shù)據(jù)的高速訪問,同時還可將數(shù)據(jù)持久化到磁盤中,使數(shù)據(jù)的安全性得到保證。用Hadoop中的分布式文件系統(tǒng)HDFS做海量非結(jié)構(gòu)化農(nóng)業(yè)數(shù)據(jù)的存儲。
本試驗安裝了4臺版本為Centos7.4的Linux系統(tǒng),并安裝了JDK和Hadoop,JDK版本為Java 1. 8.0_271,Hadoop版本為Hadoop 2.7.5。在4個節(jié)點組成的分布式集群中,包含1個master主節(jié)點和3個slave從節(jié)點,分別命名master、node01、node02和node03。4個節(jié)點分別關(guān)掉防火墻和selinux、host映射,配置時鐘同步。具體的集群規(guī)劃如表1所示。在實際生產(chǎn)環(huán)境中,可根據(jù)具體需求,動態(tài)的添加和刪除節(jié)點,提高集群的可維護性。

表1 分布式集群服務(wù)器節(jié)點規(guī)劃
4臺機器關(guān)閉防火墻和設(shè)置時鐘同步之后開始配置Hadoop集群環(huán)境:在core-site.xml中設(shè)置fs.default.name定義master的URI和端口,設(shè)置hadoop.tmp.dir指定臨時文件存儲目錄;在hdfs-site.xml來設(shè)置HDFS參數(shù),dfs.namenode.http-address指定namenode的訪問地址和端口,dfs.namenode.name.dir和dfs.datanode.data.dir指定數(shù)據(jù)的存放位置,設(shè)置文件的副本個數(shù)dfs.replication的值為3;配置slaves文件,把從節(jié)點名稱加入到Master配置中;使用start-all.sh啟動Hadoop集群,輸入命令jps驗證成功。
農(nóng)業(yè)數(shù)據(jù)云存儲平臺主要由客戶端、數(shù)據(jù)管理、數(shù)據(jù)存儲和系統(tǒng)管理4個部分組成,每部分分別對應(yīng)各自的微服務(wù)單元。每個微服務(wù)單元可以部署多個實例注冊到Eureka上,通過Feign互相調(diào)用,每個微服務(wù)單元專注自己業(yè)務(wù)互不影響,使得存儲平臺變得高內(nèi)聚和低耦合,提升了平臺的擴展性和可維護性。
客戶端服務(wù)用來實現(xiàn)客戶與平臺的數(shù)據(jù)存儲交互,只要經(jīng)過授權(quán)的用戶都可以進入云存儲平臺,它包括用戶注冊、用戶登錄、用戶鑒權(quán)等功能。
數(shù)據(jù)管理服務(wù)是客戶端和云存儲之間的交互介質(zhì),對上負責接收客戶端的請求,對下銜接數(shù)據(jù)存儲,對數(shù)據(jù)進行相應(yīng)的轉(zhuǎn)換處理,其中具體包括農(nóng)業(yè)數(shù)據(jù)文件的查看、上傳、下載、刪除、分享等功能。
數(shù)據(jù)存儲服務(wù)是云存儲的基礎(chǔ),是農(nóng)業(yè)數(shù)據(jù)存儲的具體介質(zhì),包含設(shè)備管理、狀態(tài)監(jiān)控、升級維護等功能。
系統(tǒng)管理服務(wù)是對用戶及其權(quán)限管理和日志管理的設(shè)置,是其他功能模塊運行的基礎(chǔ)。主要包括用戶管理、權(quán)限管理和日志管理。
農(nóng)業(yè)數(shù)據(jù)云存儲平臺整體頁面使用Bootstrap前端框架搭建而成。使用spring security完成對用戶的認證、授權(quán)和非法攻擊防護,確保用戶輸入正確的用戶名和密碼后才能進入平臺進行相關(guān)操作,登陸平臺首頁面,側(cè)邊菜單欄可以直觀地展示出該平臺不同權(quán)限的用戶所看到的業(yè)務(wù)功能模塊,用戶可點擊菜單欄就可進入子菜單進行更詳細的功能操作。
對本文所設(shè)計的云存儲平臺與Mysql這種通用存儲管理系統(tǒng)進行相關(guān)測試,對比兩者在存儲農(nóng)業(yè)數(shù)據(jù)時性能上的差異。本實驗所選取的環(huán)境是由Hadoop集群和Mysql數(shù)據(jù)庫管理系統(tǒng)組成。Hadoop集群由4個服務(wù)器節(jié)點組成,其中1個節(jié)點為Master主節(jié)點,另外3個節(jié)點為slave數(shù)據(jù)節(jié)點。通過國家農(nóng)業(yè)科學數(shù)據(jù)中心,獲取實驗中的46 775個數(shù)據(jù)資源。應(yīng)用分布式存儲方法將這些實驗對象存入Hadoop集群中,同時將相同的實驗數(shù)據(jù)文件以longblob類型的形式存儲到Mysql數(shù)據(jù)庫中。
在實驗過程中,通過不同數(shù)量用戶并發(fā)訪問上述2種存儲方式,計算讀取數(shù)據(jù)耗時的差異,進而分析上述2種存儲方式的性能區(qū)別。本實驗各組所耗費時間是基于多次實驗耗時結(jié)果所得的平均值,如圖4為實驗所得的結(jié)果。

圖4 訪問耗時與并發(fā)數(shù)的關(guān)系
通過訪問耗時與并發(fā)數(shù)的關(guān)系結(jié)果圖可以看出,隨著用戶訪問并發(fā)數(shù)的增加,分布式存儲訪問耗時與Mysql存儲訪問耗時的差距逐漸增大,說明在高并發(fā)的情況下,分布式存儲中數(shù)據(jù)訪問性能要優(yōu)于Mysql數(shù)據(jù)存儲訪問性能,從而說明本文所提出的基于微服務(wù)架構(gòu)的分布式數(shù)據(jù)存儲方法可滿足海量農(nóng)業(yè)數(shù)據(jù)的存儲和管理。
目前,農(nóng)業(yè)信息化是我國農(nóng)業(yè)生產(chǎn)發(fā)展的戰(zhàn)略化目標,對農(nóng)業(yè)的生產(chǎn)和發(fā)展起著至關(guān)重要的作用[19-20]。然而我國農(nóng)業(yè)數(shù)據(jù)具有種類繁多、數(shù)量龐大及數(shù)據(jù)結(jié)構(gòu)復雜等特點。傳統(tǒng)單體架構(gòu)面對復雜業(yè)務(wù)時可維護性和可擴展性較差以及并發(fā)性不足等問題,使得海量農(nóng)業(yè)數(shù)據(jù)存儲過程中出現(xiàn)能力不足和管理困難等問題。
本研究創(chuàng)新性地將微服務(wù)與Hadoop技術(shù)結(jié)合,設(shè)計出一種基于SpringCloud微服務(wù)架構(gòu)的農(nóng)業(yè)數(shù)據(jù)云存儲平臺。在這個平臺中,通過Hadoop分布式集群實現(xiàn)農(nóng)業(yè)數(shù)據(jù)的海量存儲,同時SpringCloud微服務(wù)架構(gòu)提升了系統(tǒng)可擴展性、容錯性,以及開發(fā)和維護效率。系統(tǒng)測試結(jié)果表明,所構(gòu)建的云存儲平臺性能穩(wěn)定,能滿足海量農(nóng)業(yè)數(shù)據(jù)的存儲,為農(nóng)業(yè)信息化的發(fā)展提供一定的參考價值。