楊改改, 高賢強
(塔里木大學 信息工程學院,新疆 阿拉爾 843300)
近年來,隨著農業(yè)信息化建設的發(fā)展和農業(yè)綜合生產力的提高[1],各類農業(yè)數據得到重視,合理的保存和利用這些農業(yè)數據可以更好地指導和推動農業(yè)經濟的有效發(fā)展。然而,我國農業(yè)數據分布廣泛,增長迅速,農業(yè)信息資源呈現多元化與異構化特征[2-3]。面對海量農業(yè)數據[4],通過購買昂貴的大型服務器存儲,不僅成本高,而且這些服務器大多采用傳統的關系型數據庫管理數據,導致系統擴展升級困難,可維護性差。云存儲能有效地解決海量數據的存儲問題,最大限度地整合系統的存儲能力,減低數據存儲成本,大幅提高系統的整體性能及可維護性[5-7]。
隨著平臺的不斷發(fā)展,用戶數量和業(yè)務需求日益增多,傳統單體應用程序顯然很難滿足較大的網絡流量和復雜的業(yè)務需求,在這種情況下,可以采用微服務的架構模式。這種架構模式可將傳統的單體應用按照業(yè)務劃分為一個個小的服務,而這些小的服務之間又能相互通信、相互協調、相互配合,并具有可獨立部署、高可用、容錯等特點[8-10]。微服務架構有效解決了單體架構代碼量質量差、耦合性高、系統可維護性差和可擴展性差等問題[11-12],使得農業(yè)大數據可以更好地存儲和管理。
Martin Fowler和James Lewis于2014年共同提出微服務架構的概念[13]。微服務架構是軟件開發(fā)中的一種架構風格,它將一個大型復雜軟件應用根據業(yè)務功能劃分成多個微服務。每個服務運行在獨立進程中,服務底層可選擇適合自己的技術棧,實現并進行獨立部署,服務之間采用輕量級協議進行通信。
與微服務架構相比,傳統的單體架構系統耦合度高,擴展性和維護性較差。應用微服務架構可將業(yè)務系統徹底的組件化,圍繞業(yè)務功能組織服務,邊界清晰,耦合度降低,使基礎設施自動化,利于應用開發(fā)和部署[14]。本農業(yè)數據云存儲平臺研究使用的SpringCloud微服務[15],是以SpringBoot[16]為基礎,擁有一套完整的微服務實現組件,使分布式系統的開發(fā)更加簡單,平臺更易部署和維護。
Hadoop是一個分布式系統基礎架構,由Apache基金會開發(fā),實現了分布式文件系統HDFS(Hadoop Distributed File System)[17]。Hadoop適于存儲TB和PB級別的大型數據,其原理就是使用HDFS作為存儲系統。HDFS可運行于普通廉價機器,具有高容錯性,為數據存儲提供所需的擴展能力[18]。在一個Hadoop集群中,客戶端Client把上傳的文件切分成一個個Block,由NameNode處理客戶端請求,管理HDFS的名稱空間和數據塊(Block)映射信息。此外,多個DataNode節(jié)點存儲數據塊,執(zhí)行數據塊的讀寫操作,而SecondaryNameNode輔助NameNode,分擔其工作量。圖1為Hadoop存儲數據的結構圖。
圖1 Hadoop存儲數據的結構
農業(yè)數據云存儲平臺是采用SpringCloud微服務架構,基于SpringBoot搭建微服務、前后端分離的理念進行開發(fā)的。圖2為基于SpringCloud 微服務架構圖,采用SpringCloud的組件Eureka為注冊中心進行服務注冊,Feign完成服務間的調用,Hystrix為熔斷器來提高系統整體的彈性,使用Gateway集群實現路由、限流、鑒權功能。
圖2 SpringCloud 微服務的架構
基于SpringCloud開發(fā)的農業(yè)數據云存儲平臺主要使用Hadoop分布式存儲進行農業(yè)數據的海量存儲,主要分為訪問層、轉發(fā)層、接口層、服務層和存儲層,圖3是平臺整體架構圖。
圖3 基于SpringCloud的農業(yè)數據云存儲平臺架構
訪問層。該層主要是在客戶端展示平臺的業(yè)務,給用戶提供訪問的端口,例如用PC端或者移動端去訪問農業(yè)數據云存儲平臺,實現用戶和存儲平臺之間的交互。
轉發(fā)層。為避免服務器崩潰,讓用戶有更好的體驗,該層搭建Nginx集群作為負載均衡承受高用戶量的訪問,可把用戶的請求分布在各個服務器上來緩解服務器的壓力,使性能得以提升。
接口層。農業(yè)數據平臺在該層搭建SpringCloud Gateway網關集群,提供一個簡單而有效的方式,對API進行路由。通過轉發(fā)服務,使前端的調用邏輯和復雜的內部服務調用變得更加簡便易操作,同時還具有安全、鑒權和限流功能。
服務層。該層基于微服務實現,主要分為業(yè)務服務、公共抽取服務以及服務管理。業(yè)務服務主要完成平臺要實現的邏輯功能和對數據的操作,公共抽取服務主要是對Feign、Ribbon、Hystrix等微服務組件和常用工具類的抽取,而服務管理通過注冊發(fā)現、配置管理和監(jiān)控報警來支撐服務有效的運行,這些服務之間可通過HTTP或RPC協議互相調用。
存儲層。該層包括數據緩存和數據存儲。使用Redis數據庫做數據緩存可保證數據的高速訪問,同時還可將數據持久化到磁盤中,使數據的安全性得到保證。用Hadoop中的分布式文件系統HDFS做海量非結構化農業(yè)數據的存儲。
本試驗安裝了4臺版本為Centos7.4的Linux系統,并安裝了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é)點分別關掉防火墻和selinux、host映射,配置時鐘同步。具體的集群規(guī)劃如表1所示。在實際生產環(huán)境中,可根據具體需求,動態(tài)的添加和刪除節(jié)點,提高集群的可維護性。
表1 分布式集群服務器節(jié)點規(guī)劃
4臺機器關閉防火墻和設置時鐘同步之后開始配置Hadoop集群環(huán)境:在core-site.xml中設置fs.default.name定義master的URI和端口,設置hadoop.tmp.dir指定臨時文件存儲目錄;在hdfs-site.xml來設置HDFS參數,dfs.namenode.http-address指定namenode的訪問地址和端口,dfs.namenode.name.dir和dfs.datanode.data.dir指定數據的存放位置,設置文件的副本個數dfs.replication的值為3;配置slaves文件,把從節(jié)點名稱加入到Master配置中;使用start-all.sh啟動Hadoop集群,輸入命令jps驗證成功。
農業(yè)數據云存儲平臺主要由客戶端、數據管理、數據存儲和系統管理4個部分組成,每部分分別對應各自的微服務單元。每個微服務單元可以部署多個實例注冊到Eureka上,通過Feign互相調用,每個微服務單元專注自己業(yè)務互不影響,使得存儲平臺變得高內聚和低耦合,提升了平臺的擴展性和可維護性。
客戶端服務用來實現客戶與平臺的數據存儲交互,只要經過授權的用戶都可以進入云存儲平臺,它包括用戶注冊、用戶登錄、用戶鑒權等功能。
數據管理服務是客戶端和云存儲之間的交互介質,對上負責接收客戶端的請求,對下銜接數據存儲,對數據進行相應的轉換處理,其中具體包括農業(yè)數據文件的查看、上傳、下載、刪除、分享等功能。
數據存儲服務是云存儲的基礎,是農業(yè)數據存儲的具體介質,包含設備管理、狀態(tài)監(jiān)控、升級維護等功能。
系統管理服務是對用戶及其權限管理和日志管理的設置,是其他功能模塊運行的基礎。主要包括用戶管理、權限管理和日志管理。
農業(yè)數據云存儲平臺整體頁面使用Bootstrap前端框架搭建而成。使用spring security完成對用戶的認證、授權和非法攻擊防護,確保用戶輸入正確的用戶名和密碼后才能進入平臺進行相關操作,登陸平臺首頁面,側邊菜單欄可以直觀地展示出該平臺不同權限的用戶所看到的業(yè)務功能模塊,用戶可點擊菜單欄就可進入子菜單進行更詳細的功能操作。
對本文所設計的云存儲平臺與Mysql這種通用存儲管理系統進行相關測試,對比兩者在存儲農業(yè)數據時性能上的差異。本實驗所選取的環(huán)境是由Hadoop集群和Mysql數據庫管理系統組成。Hadoop集群由4個服務器節(jié)點組成,其中1個節(jié)點為Master主節(jié)點,另外3個節(jié)點為slave數據節(jié)點。通過國家農業(yè)科學數據中心,獲取實驗中的46 775個數據資源。應用分布式存儲方法將這些實驗對象存入Hadoop集群中,同時將相同的實驗數據文件以longblob類型的形式存儲到Mysql數據庫中。
在實驗過程中,通過不同數量用戶并發(fā)訪問上述2種存儲方式,計算讀取數據耗時的差異,進而分析上述2種存儲方式的性能區(qū)別。本實驗各組所耗費時間是基于多次實驗耗時結果所得的平均值,如圖4為實驗所得的結果。
圖4 訪問耗時與并發(fā)數的關系
通過訪問耗時與并發(fā)數的關系結果圖可以看出,隨著用戶訪問并發(fā)數的增加,分布式存儲訪問耗時與Mysql存儲訪問耗時的差距逐漸增大,說明在高并發(fā)的情況下,分布式存儲中數據訪問性能要優(yōu)于Mysql數據存儲訪問性能,從而說明本文所提出的基于微服務架構的分布式數據存儲方法可滿足海量農業(yè)數據的存儲和管理。
目前,農業(yè)信息化是我國農業(yè)生產發(fā)展的戰(zhàn)略化目標,對農業(yè)的生產和發(fā)展起著至關重要的作用[19-20]。然而我國農業(yè)數據具有種類繁多、數量龐大及數據結構復雜等特點。傳統單體架構面對復雜業(yè)務時可維護性和可擴展性較差以及并發(fā)性不足等問題,使得海量農業(yè)數據存儲過程中出現能力不足和管理困難等問題。
本研究創(chuàng)新性地將微服務與Hadoop技術結合,設計出一種基于SpringCloud微服務架構的農業(yè)數據云存儲平臺。在這個平臺中,通過Hadoop分布式集群實現農業(yè)數據的海量存儲,同時SpringCloud微服務架構提升了系統可擴展性、容錯性,以及開發(fā)和維護效率。系統測試結果表明,所構建的云存儲平臺性能穩(wěn)定,能滿足海量農業(yè)數據的存儲,為農業(yè)信息化的發(fā)展提供一定的參考價值。