李文靜++徐銘貝++李樂峰++于永強(qiáng)
摘 要:隨著我國(guó)計(jì)算機(jī)技術(shù)的迅猛發(fā)展,遠(yuǎn)程實(shí)時(shí)采集查詢數(shù)據(jù)已經(jīng)在工業(yè)和農(nóng)業(yè)生產(chǎn)中迅速得到應(yīng)用。數(shù)據(jù)采集與查詢是信息技術(shù)的重要分支,它研究實(shí)時(shí)信息數(shù)據(jù)的采集、存儲(chǔ)、查詢等功能,對(duì)數(shù)據(jù)的獲取并顯示可以讓用戶更好地掌握生產(chǎn)狀況,傳統(tǒng)的人工現(xiàn)場(chǎng)監(jiān)控浪費(fèi)人力、物力,效率低下,所以,有必要開發(fā)一款低成本、高可靠性、高并發(fā)性、適用范圍廣的實(shí)時(shí)數(shù)據(jù)查詢系統(tǒng),對(duì)農(nóng)業(yè)生產(chǎn)進(jìn)行有效的監(jiān)控,提高生產(chǎn)效率,使農(nóng)業(yè)生產(chǎn)實(shí)現(xiàn)現(xiàn)代化。該文采用了Spring、Spring MVC、Mybatis、shiro安全框架。為了提高系統(tǒng)的容量,該文采用nginx實(shí)現(xiàn)負(fù)載均衡、動(dòng)靜分離,No-sql中的redis實(shí)現(xiàn)緩存,隊(duì)列Rabbitmq實(shí)現(xiàn)郵箱發(fā)送處理,數(shù)據(jù)庫代理ameoba實(shí)現(xiàn)讀寫分離,數(shù)據(jù)庫mysql主從復(fù)制等配置來提升系統(tǒng)的并發(fā)量。
關(guān)鍵詞:大數(shù)據(jù)技術(shù) Web后臺(tái)框架 查詢系統(tǒng)
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2017)06(c)-0037-03
隨著電子信息技術(shù)不斷進(jìn)步,人們利用Web技術(shù)開發(fā)出一系列相關(guān)產(chǎn)品,促使人們對(duì)產(chǎn)品的需求逐漸增加,這樣極大地推動(dòng)了互聯(lián)網(wǎng)技術(shù)的發(fā)展。如今的物聯(lián)網(wǎng)、云計(jì)算、智能家居、實(shí)時(shí)監(jiān)控等新技術(shù)已逐步進(jìn)入工業(yè)、農(nóng)業(yè)的生產(chǎn)生活,使得Web的應(yīng)用研發(fā)成為當(dāng)代未來發(fā)展的熱點(diǎn)和重點(diǎn)。未來互聯(lián)網(wǎng)的主要發(fā)展趨勢(shì)就是通過互聯(lián)網(wǎng)。因而該文提出的是基于Web和App的數(shù)據(jù)采集及其操作系統(tǒng)的設(shè)計(jì),采用了SSM+shiro框架作為服務(wù)器端,配合nginx+rabbitmq等開源軟件形成一個(gè)較完整的數(shù)據(jù)采集操作系統(tǒng),利用這些技術(shù)使得本系統(tǒng)具有穩(wěn)定、高效、占用內(nèi)存少、并發(fā)性強(qiáng)、性能高等特點(diǎn),再結(jié)合通過瀏覽器對(duì)現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行實(shí)時(shí)查看和對(duì)歷史記錄進(jìn)行查詢,這將會(huì)給用戶提供更加高效和豐富的應(yīng)用。
1 系統(tǒng)整體說明
為了構(gòu)建對(duì)設(shè)備采集數(shù)據(jù)進(jìn)行查看,對(duì)設(shè)備進(jìn)行開關(guān)操作以及視頻傳輸?shù)墓δ?,在硬件上使用了樹莓派作為采集?shù)據(jù)終端,而單片機(jī)作為操控結(jié)果終端,樹莓派讀取串口數(shù)據(jù),發(fā)送請(qǐng)求到服務(wù)器進(jìn)行數(shù)據(jù)采集及操作。在軟件上使用Web和App作為操作平臺(tái),服務(wù)器采用tomcat,使用開發(fā)工具為eclipse、myeclipse、maven插件來完成的。
2 系統(tǒng)客戶端設(shè)計(jì)
用戶具有登錄、注銷、通過瀏覽器實(shí)時(shí)查看現(xiàn)場(chǎng)數(shù)據(jù)信息、查看歷史數(shù)據(jù)、實(shí)現(xiàn)將視頻由android端傳輸?shù)絎eb頁面。如圖2所示。
具體是實(shí)現(xiàn)方法如下。
(1)使用shiro框架的安全登錄實(shí)現(xiàn)登錄與注銷。
使用LogoutFilter進(jìn)行登出操作subject.logout()操作。
AuthorizingRealm中的方法doGetAuthenticationInfo進(jìn)行登陸認(rèn)證,SimpleCredentialsMatcher進(jìn)行加密操作使用的是shiro的shiro.crypto.hash.Md5Hash加密操作進(jìn)行密碼加密。
(2)采用了EL表達(dá)式來進(jìn)行數(shù)據(jù)顯示等操作。
(3)使用echarts進(jìn)行圖表顯示操作。
百度的圖表js,可以很好地展示各個(gè)頁面的操作使用,傳遞json數(shù)據(jù)進(jìn)行解析獲得圖表界面。
(4)shiro框架實(shí)現(xiàn)粗粒度的權(quán)限管理操作。
AuthorizingRealm中方法doGetAuthorizationInfo對(duì)不同的用戶添加權(quán)限,以及在頁面中添加權(quán)限列表,確定不同權(quán)限的用戶顯示不同的頁面。
(5)使用jquery的ajax獲取視頻流來顯示視頻。
3 系統(tǒng)服務(wù)器端設(shè)計(jì)
服務(wù)器端是整個(gè)系統(tǒng)的核心部分,通過服務(wù)器響應(yīng)客戶端的服務(wù)請(qǐng)求,從而發(fā)布系統(tǒng)消息,Web服務(wù)器主要根據(jù)不同用戶發(fā)出的請(qǐng)求,做出相應(yīng)的數(shù)據(jù)處理,并返回給用戶。
該文是Web服務(wù)器端,通過各種組件使得整個(gè)系統(tǒng)具有穩(wěn)定、占用內(nèi)存小、高并發(fā)、高可用性的特點(diǎn)。
Web服務(wù)器端的實(shí)現(xiàn)如下。
該服務(wù)器端主要使用MVC框架、shiro安全框架、rabbitmq隊(duì)列、ameoba數(shù)據(jù)庫代理、Nginx技術(shù),通過使用ameoba+Nginx,使得Web服務(wù)器具有穩(wěn)定、并發(fā)能力強(qiáng)、性能高的特點(diǎn)。具體的實(shí)現(xiàn)方法如下。
第一,框架結(jié)構(gòu)使用的是MVC,pojo層,controller層,service層,mapper層。
配置文件大致內(nèi)容如下。
(1)web.xml文件。
①里面配置了讀取spring配置的目錄。
②Spring監(jiān)聽。
③編碼過濾器CharacterEncodingFilter。
④配置springmvc配置目錄。
⑤Shiro過濾器。
(2)Spring配置文件整合shiro+mybatis。
①配置導(dǎo)入的外部文件(數(shù)據(jù)庫信息)。
②配置掃描的service層目錄。
③配置數(shù)據(jù)源。
④定義方法級(jí)事物控制并應(yīng)用于service層操作。
⑤配置shiro的權(quán)限管理器,加密管理器。
⑥配置shiro的登錄地址,登出方法,對(duì)那些網(wǎng)址進(jìn)行放行,攔截等操作。
⑦配置Mybaits的Mapper接口管理器,SqlSessionFactory進(jìn)行sql.xml配置。
(3)SpringMVC配置。
①配置掃描器。
②試圖解析器。
第二,郵件重置密碼:使用的是javax.mail.jar包,使用方法是JavaMailWithAttachment.class.getResourceAsStream來獲取郵箱賬戶數(shù)據(jù),并進(jìn)行配置設(shè)置字符集,使用Multipart進(jìn)行郵箱的發(fā)送,采用的是自動(dòng)生成一個(gè)url,當(dāng)點(diǎn)擊的時(shí)候?qū)崿F(xiàn)密碼重置,實(shí)現(xiàn)是用shiro帶鹽MD5HASH加密方法對(duì)自動(dòng)生成的數(shù)據(jù)加密之后拼接成url,當(dāng)點(diǎn)擊發(fā)送郵件時(shí),將url及其用戶賬戶信息發(fā)送至rabbitmq隊(duì)列,消費(fèi)者讀取數(shù)據(jù)之后做出發(fā)送郵件操作,這樣既可以減少系統(tǒng)壓力又提高服務(wù)器性能。
第三,使用amoeba代理,mysql主從復(fù)制(如圖2)。
編輯主master服務(wù)器配置文件/etc/my.cnf
server-id=1
log-bin=mysql-bin #啟用二進(jìn)制日志;
重新啟動(dòng)服務(wù)即可
編輯從slave修改/etc/my.cnf增加一行
server-id=2
重啟服務(wù)即可
這樣就實(shí)現(xiàn)了mysql的主從復(fù)制操作。
Amoeba是一個(gè)以MySQL為底層數(shù)據(jù)存儲(chǔ),并對(duì)應(yīng)用提供MySQL協(xié)議接口的proxy。它集中地響應(yīng)應(yīng)用的請(qǐng)求,依據(jù)用戶事先設(shè)置的規(guī)則,將SQL請(qǐng)求發(fā)送到特定的數(shù)據(jù)庫上執(zhí)行。
配置文件dbServers.xml定義好數(shù)據(jù)庫的所有信息,設(shè)定主master或者從slave配置文件amoeba.xml配置監(jiān)聽端口號(hào),并且設(shè)定誰可讀,可寫,這樣就會(huì)增加系統(tǒng)的并發(fā)量。
第四,nginx負(fù)載均衡,動(dòng)靜分離。
Nginx是一個(gè)高性能的HTTP和方向代理服務(wù)器。
采用C語言編寫,其安全性高,外界只能訪問nginx所在服務(wù)器,nginx將請(qǐng)求轉(zhuǎn)發(fā)內(nèi)部服務(wù)器,調(diào)用后,返回調(diào)用的結(jié)果,使用nginx進(jìn)行網(wǎng)頁托管,可以對(duì)其實(shí)現(xiàn)訪問多個(gè)服務(wù)器(根據(jù)權(quán)重或者輪詢)。
設(shè)置多臺(tái)服務(wù)器根據(jù)權(quán)重訪問服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。
server {
listen 8888;
server_name xmbllf.school.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
在這里進(jìn)行動(dòng)靜分離,對(duì)照片等靜態(tài)資源直接轉(zhuǎn)發(fā)至物理地址。
第五,視頻接收:通過android發(fā)送照片流,進(jìn)行顯示,在服務(wù)器端接收數(shù)據(jù)之后,對(duì)其進(jìn)行base64解碼,生成圖片,放置在目錄下,之后不同用戶登錄之后通過ajax,每一秒請(qǐng)求7次,獲取其指定的照片流得到,并不斷循環(huán),接受byte數(shù)據(jù)來進(jìn)行數(shù)據(jù)顯示,在這里由于android手機(jī)傳輸?shù)恼掌窍蛴倚D(zhuǎn)90°的,之前想過在android發(fā)送階段,強(qiáng)行將照片左轉(zhuǎn),但是效率太低,最后采用直接讓網(wǎng)頁上照片旋轉(zhuǎn)回來即可。通過設(shè)置照片的五個(gè)屬性MozTransform、webkitTransform、msTransform、OTransform、transform。對(duì)于傳輸速度問題,為了達(dá)到很快的發(fā)送數(shù)據(jù)的目的,所以使用了壓縮方法,使壓縮率為50%,這個(gè)結(jié)果可以達(dá)到延時(shí)1秒的效果。
第六,利用log4j顯示程序報(bào)錯(cuò)詳細(xì)信息。
4 結(jié)語
該文對(duì)一個(gè)較完整的信息采集系統(tǒng)的實(shí)現(xiàn)進(jìn)行了討論,總體來說,該系統(tǒng)基本實(shí)現(xiàn)了預(yù)期效果,并經(jīng)過老師與同學(xué)的檢查,確定本系統(tǒng)穩(wěn)定性較好,可以較好地實(shí)現(xiàn)蔬菜大棚的管理系統(tǒng)的使用,這樣一來,就可以讓它服務(wù)于農(nóng)業(yè)生產(chǎn),能夠較效率地減少使用者的時(shí)間,從而有更多的擴(kuò)展功能,普及農(nóng)業(yè)生產(chǎn)生活,使其發(fā)展成為全自動(dòng)化的農(nóng)業(yè)生產(chǎn)模式,從而釋放更多的勞動(dòng)力,為社會(huì)為國(guó)家創(chuàng)造更多的活力。由于能力有限,經(jīng)驗(yàn)不足,設(shè)計(jì)中還有許多問題和不足之處,請(qǐng)各位讀者給予批評(píng)指正。
參考文獻(xiàn)
[1] 張紫謙,衷衛(wèi)聲,梁凱,等.基于物聯(lián)網(wǎng)技術(shù)的溫室集群環(huán)境監(jiān)控系統(tǒng)設(shè)計(jì)[J].2016,39(14):49-52.
[2] Simon.H A.Artifieial intelligence:an empirical science[J]. Artificial Intelligenee,1995,77(1):95-127.
[3] 吳燦培,胡順豪,王海航.基于Ajax和SVG的Web遠(yuǎn)程實(shí)時(shí)監(jiān)控系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(9):3004-3007.
[4] Jianlin Xu,Yifan Yu,Zhen Chen,et al.Cloud Computing Based Forensic Analysis for Massive Mobile Applications Using Data Mining[J].Tsinghua science and technology,2013,18(4).
[5] R.Kirubashankar,K.Krishnamurthy.A Real-time Web-enabled Platform for Informatlon Monitoring and Fault Diagnosis in a Distributed Control System[J].Instrumentation science & technology:Designs and applications for chemistry,biotechnology,and environmental science,2013,41(3):236-250.