劉 靜 吳仲城 李 芳 張春風(fēng) 陳 杰
1(中國(guó)科學(xué)院強(qiáng)磁場(chǎng)科學(xué)中心 安徽 合肥 230031) 2(中國(guó)科學(xué)技術(shù)大學(xué) 安徽 合肥 230026)
隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展與移動(dòng)終端的普及,智能手機(jī)、掌上電腦和車輛導(dǎo)航系統(tǒng)等移動(dòng)設(shè)備正扮演著愈加重要的角色,物聯(lián)網(wǎng)和大數(shù)據(jù)時(shí)代已經(jīng)到來。
智能交通系統(tǒng)ITS(Intelligent Transport System)是將先進(jìn)的信息技術(shù)、數(shù)據(jù)通信傳輸技術(shù)及電子傳感技術(shù)等有效地集成運(yùn)用于交通運(yùn)輸管理體系而建立起的一種實(shí)時(shí)準(zhǔn)確高效的綜合運(yùn)輸和管理系統(tǒng)[1-2]。作為物聯(lián)網(wǎng)在智能交通系統(tǒng)領(lǐng)域的典型應(yīng)用之一,車聯(lián)網(wǎng)IOV(Internet of Vehicle)是通過汽車與互聯(lián)網(wǎng)之間進(jìn)行無線通信和信息交換,以實(shí)現(xiàn)智能交通管理控制、車輛智能化控制和智能動(dòng)態(tài)信息服務(wù)的一體化網(wǎng)絡(luò)[3]。在車聯(lián)網(wǎng)環(huán)境下,智能車載系統(tǒng)主要是將各類智能車載終端獲得的車輛行駛狀態(tài)信息、周圍的環(huán)境信息以及車輛本身的信息等,統(tǒng)一傳入車輛管理服務(wù)平臺(tái),經(jīng)過分析和處理以向駕駛員提供信息和服務(wù)[4]。
對(duì)于一個(gè)完整的大數(shù)據(jù)平臺(tái),一般包括數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和數(shù)據(jù)展現(xiàn)四個(gè)過程[5]。其中,數(shù)據(jù)采集是所有數(shù)據(jù)系統(tǒng)必不可少的。然而,隨著系統(tǒng)并發(fā)訪問量的快速增長(zhǎng),車輛管理服務(wù)平臺(tái)架構(gòu)由傳統(tǒng)的分散式、本地化,走向集中式、扁平化,平臺(tái)端資源消耗日益增加,空間上分布于各地的智能車載終端接入到平臺(tái)面臨著眾多問題和挑戰(zhàn),主要表現(xiàn)為以下幾個(gè)方面:
(1) 數(shù)據(jù)采集面臨著數(shù)據(jù)源多種多樣、數(shù)據(jù)量大、變化快等挑戰(zhàn)。
(2) 網(wǎng)絡(luò)帶寬:當(dāng)與服務(wù)器連接的終端數(shù)目較多時(shí),服務(wù)器的流量就會(huì)變大,從而影響服務(wù)器真正可用的帶寬,需要保證帶寬穩(wěn)定[6]。
(3) 內(nèi)存:存在連接使用內(nèi)存后不釋放,導(dǎo)致一直占據(jù)該內(nèi)存單元的情況,即容易出現(xiàn)內(nèi)存泄露。
(4) CPU:多連接共用線程可能會(huì)導(dǎo)致頻繁切換線程。若CPU核數(shù)太低,會(huì)導(dǎo)致后面的數(shù)據(jù)包一直不能接受,服務(wù)的超時(shí)機(jī)制會(huì)主動(dòng)斷開后面的連接。
(5) 數(shù)據(jù)庫(kù)訪問:數(shù)據(jù)庫(kù)訪問屬于同步操作,由于服務(wù)端每個(gè)線程管理多個(gè)TCP連接,如果訪問太慢會(huì)影響其他連接,從而影響整個(gè)服務(wù)的性能和穩(wěn)定性[7]。
(6) 日志:頻繁寫本地日志,磁盤工作頻繁。日志文件累計(jì)大,硬盤空間可能告急。
針對(duì)上述問題,本系統(tǒng)采用Boost.Asio框架及Kafka消息隊(duì)列機(jī)制,提供高可靠和高擴(kuò)展的數(shù)據(jù)收集,解決了終端集中接入、高并發(fā)訪問等問題。利用IO復(fù)用機(jī)制及線程池等技術(shù),保證數(shù)據(jù)采集的質(zhì)量和可靠性,避免數(shù)據(jù)的重復(fù)。利用分布式的網(wǎng)絡(luò)連接,實(shí)現(xiàn)了海量智能車載終端數(shù)據(jù)的統(tǒng)一傳入[8]。
智能車載終端,又稱衛(wèi)星定位智能車載終端,主要融合了衛(wèi)星導(dǎo)航技術(shù)、里程定位技術(shù)及汽車黑匣技術(shù)。智能車載終端自動(dòng)采集數(shù)據(jù),并將得到的車輛信息數(shù)據(jù)傳輸?shù)较鄳?yīng)平臺(tái),準(zhǔn)確顯示車輛的位置、行駛里程、車速等動(dòng)態(tài)運(yùn)行狀態(tài),實(shí)現(xiàn)對(duì)車輛的動(dòng)態(tài)監(jiān)控管理;也可以通過平臺(tái)實(shí)現(xiàn)車輛的交通調(diào)度。例如公交車上裝有終端,使得乘客在站牌就可以隨時(shí)查看車輛位置和預(yù)測(cè)到站時(shí)間[9]。
目前市場(chǎng)上智能車載終端種類型號(hào)較多,主要性能指標(biāo)有:配備超大容量存儲(chǔ)卡、讀取速度快、擴(kuò)充性強(qiáng)等。智能車載終端采集的內(nèi)容主要有:車輛的車牌號(hào)碼,駕駛員代碼,某一時(shí)刻車輛所處位置的經(jīng)緯度,車輛行駛速度以及車輛狀態(tài)信息等。
Boost.Asio是一個(gè)跨平臺(tái)的、主要用于網(wǎng)絡(luò)和其他一些底層輸入/輸出編程的C++庫(kù),它在網(wǎng)絡(luò)通信、COM串行端口和文件上成功地抽象了輸入輸出的概念,基于這些可以進(jìn)行同步或者異步的輸入輸出編程[10]。
Boost.Asio主要有平臺(tái)無關(guān)性、異步數(shù)據(jù)處理和多傳輸協(xié)議三個(gè)特性。作為一個(gè)跨平臺(tái)的庫(kù),Boost.Asio可以在大多數(shù)操作系統(tǒng)上使用,能同時(shí)支持?jǐn)?shù)千個(gè)并發(fā)地連接,提供了一套可以支持傳輸控制協(xié)議(TCP)socket、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)socket和Internet控制消息協(xié)議(IMCP)socket的API。
消息隊(duì)列[11]是一種進(jìn)程間通信或同一進(jìn)程的不同線程間的通信方式。在分布式系統(tǒng)中,消息隊(duì)列中間件是組件間溝通的中間橋梁。目前比較流行的消息隊(duì)列中間件有RabbitMQ、ActiveMQ、Kafka和Redis,本系統(tǒng)采用Kafka消息隊(duì)列中間件。
Kafka是一種分布式系統(tǒng),易于向外擴(kuò)展,能夠同時(shí)為發(fā)布和訂閱提供高吞吐量,并支持多Topic管理、在線水平擴(kuò)展和實(shí)現(xiàn)可持久化。Kafka開發(fā)語言為Scala,支持Kafka Server間的消息分區(qū),支持跨平臺(tái),同時(shí)保證消息順序傳輸,支持離線數(shù)據(jù)處理和實(shí)時(shí)數(shù)據(jù)處理。圖1是Kafka Server消息隊(duì)列工作模式。
圖1 Kafka消息隊(duì)列工作模式
使用IO多路復(fù)用機(jī)制,可以使單個(gè)線程同時(shí)管理多個(gè)網(wǎng)絡(luò)連接,減少系統(tǒng)開銷。使用Preactor模式(異步回調(diào)),克服了同步操作的缺點(diǎn),使得線程不用在IO上盲等,從而提高CPU利用率。
Boost.Asio框架封裝了這兩種模式,工作過程為:由使用者啟動(dòng)一個(gè)異步操作,在啟動(dòng)異步的同時(shí)負(fù)責(zé)創(chuàng)建一個(gè)異步回調(diào)對(duì)象;然后將該異步操作交給異步操作執(zhí)行者,由執(zhí)行者負(fù)責(zé)執(zhí)行異步操作,并在完成后將一個(gè)完成事件插入完成事件隊(duì)列;另一方面,前攝器從完成事件隊(duì)列中獲取事件,一旦獲取到完成事件,前攝器從事件上找出與該事件關(guān)聯(lián)的回調(diào)對(duì)象,并執(zhí)行回調(diào)[12]。
線程池:使用線程池,服務(wù)根據(jù)CPU情況開啟一定數(shù)量的線程,網(wǎng)絡(luò)IO來的時(shí)候,每個(gè)線程管理一定數(shù)量的連接。
連接超時(shí):對(duì)于長(zhǎng)時(shí)間不用的連接(主動(dòng)或者被動(dòng)關(guān)閉的),服務(wù)端選擇斷開連接。提供session管理連接,提供配置文件配置超時(shí)時(shí)間。
智能指針:盡量使用C++智能指針來管理在堆棧中分配的內(nèi)存,避免可能出現(xiàn)的內(nèi)存泄露情況。
數(shù)據(jù)庫(kù)連接池:服務(wù)初始化時(shí)先分配固定數(shù)量的dataBaseConnection,用完放回,不夠再創(chuàng)建。
Linux&mysql參數(shù)調(diào)優(yōu):增大Linux文件句柄限制,增大tcp各種緩沖區(qū)大小,增加mysql各種緩沖區(qū)大小。
重寫接收前端服務(wù):負(fù)責(zé)大量多型號(hào)終端的數(shù)據(jù)接入。部署多節(jié)點(diǎn)接收前端,支持高并發(fā)接收,車載終端綁定多個(gè)節(jié)點(diǎn)的訪問地址與端口,避免單點(diǎn)故障并實(shí)現(xiàn)分流[13]。
集中搭建集群:集中搭建車載終端數(shù)據(jù)接收服務(wù)集群,以節(jié)省服務(wù)器資源。通過集中管理,便于接收中間件性能評(píng)估、迭代、升級(jí)。
平臺(tái)端集中部署車載終端數(shù)據(jù)接收服務(wù)器集群,設(shè)計(jì)前后端節(jié)點(diǎn),實(shí)行前后端分離。前端節(jié)點(diǎn)主要提供多個(gè)訪問地址與端口,供車載終端隨機(jī)連接,這樣既能分流實(shí)現(xiàn)負(fù)載均衡,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)應(yīng)答,解決前端負(fù)載均衡長(zhǎng)連接會(huì)話保持的問題,又能避免單點(diǎn)宕機(jī)造成的數(shù)據(jù)丟失。后端節(jié)點(diǎn)主要建立消息隊(duì)列,負(fù)責(zé)數(shù)據(jù)適配處理,并同時(shí)向跨互聯(lián)網(wǎng)數(shù)據(jù)中心IDC(Internet Data Center)的主備數(shù)據(jù)庫(kù)系統(tǒng)分發(fā)數(shù)據(jù),為數(shù)據(jù)庫(kù)熱備打下基礎(chǔ)[14]。
圖2所示是完整的車聯(lián)網(wǎng)大數(shù)據(jù)平臺(tái)的整體流程,包括接收前端節(jié)點(diǎn)(接收服務(wù)器)和后端節(jié)點(diǎn)(處理服務(wù)器)以及兩者之間的銜接。
圖2 系統(tǒng)流程圖
接收前端節(jié)點(diǎn)只負(fù)責(zé)接收數(shù)據(jù)報(bào)文,不進(jìn)行業(yè)務(wù)處理。前端節(jié)點(diǎn)采用多線程響應(yīng)機(jī)制,能夠同時(shí)接收來自不同終端的大量報(bào)文,并將報(bào)文發(fā)送到Kafka消息隊(duì)列中。由于終端類型不同,報(bào)文存入Kafka時(shí)將根據(jù)終端的類型分為不同的Topic進(jìn)行存儲(chǔ),其余由后端節(jié)點(diǎn)負(fù)責(zé)處理。后端處理程序首先從Kafka消息隊(duì)列的主題中讀取數(shù)據(jù)報(bào)文,然后進(jìn)行數(shù)據(jù)的解析,包括終端的識(shí)別、時(shí)間速度的解析以及經(jīng)緯度坐標(biāo)的轉(zhuǎn)換等。分析結(jié)果存儲(chǔ)到MySQL數(shù)據(jù)庫(kù),同時(shí)寫入到Kafka中,提供HBase讀取,為后續(xù)利用Hadoop和Spark進(jìn)行大數(shù)據(jù)的處理、解析和存儲(chǔ)提供條件。
本系統(tǒng)著重講述接收前端服務(wù)器的實(shí)現(xiàn),如圖3所示。接收前端提供多個(gè)訪問地址與端口供車載終端隨機(jī)連接,并通過分流實(shí)現(xiàn)負(fù)載均衡和點(diǎn)對(duì)點(diǎn)應(yīng)答,將終端采集的數(shù)據(jù)傳入到平臺(tái)[15]。
圖3 接收前端流程圖
本系統(tǒng)設(shè)計(jì)方案針對(duì)終端種類多、數(shù)據(jù)量大和變化快現(xiàn)象造成的系統(tǒng)內(nèi)存泄露,資源消耗嚴(yán)重等問題進(jìn)行了改善,見表1。
表1 傳統(tǒng)數(shù)據(jù)采集方案與本文方案設(shè)計(jì)對(duì)比
續(xù)表1
2.2.1初始化
初始化服務(wù)信息,包括端口號(hào)、開啟線程數(shù)、日志級(jí)別、緩存消息隊(duì)列地址等,創(chuàng)建socket等待客戶端連接。
(1) 加載配置文件信息首先,加載配置文件,讀取端口號(hào)、線程數(shù)、日志級(jí)別、緩存消息隊(duì)列地址;然后初始化memcached緩存,創(chuàng)建緩存連接池;其次初始化Kafka消息隊(duì)列;最后,初始化TCP網(wǎng)絡(luò)服務(wù),等待客戶端連接。
(2) 開啟TCP服務(wù)開啟TCP服務(wù),等待客戶端連接以及數(shù)據(jù)接收。首先調(diào)用初始化函數(shù)Init(),然后啟動(dòng)服務(wù),監(jiān)聽TCP請(qǐng)求。部分代碼如下:
bool ServerApp::Start(){
bool ret = false;
try{
if(!Init()){
goto exit;
}
if(tcp_server_){
tcp_server_->Start();
}
else{
goto exit;
}
}catch(const exception &e){
//ERROR(″開啟網(wǎng)絡(luò)服務(wù)異常,端口被占用 port_:″<
沈侯正要說話,手機(jī)響了。他看了一眼,沒有接,可手機(jī)不停地響著,他接了電話,卻不說話,一直“嗯,嗯”地聽著,到后來,不耐煩地說:“行了,行了!不管虧了多少錢,都算在我頭上!”
goto exit;
}
ret = true;
exit:
return ret;
}
(3) 主函數(shù)入口—main函數(shù)
signal(SIGTERM, singalMethod);
ServerApp ser(argc, argv);
if(ser.Start()){
INFO(″Service start success...″);
}else{
ERROR(″Service start fail...″);
return -1;
}
while(true){
sleep(100000);
}
getchar();
ser.Stop();
INFO(″關(guān)閉服務(wù)器…″);
return 0;
}
2.2.2配置初始化配置文件
初始化配置文件包括日志文件,Kafka,memcached等。配置代碼如下:
2.2.3報(bào)文的接收、解析以及分發(fā)
(1) 報(bào)文接收數(shù)據(jù)接收的回調(diào)函數(shù),當(dāng)TCP連接上有數(shù)據(jù)到達(dá)時(shí)觸發(fā)該函數(shù);數(shù)據(jù)追加到receiveMsgbuffer中,提供給報(bào)文分析處理函數(shù)。部分代碼如下:
void TcpConnection::handle_read(const boost::system::error_code& e,
std::size_t bytes_transferred){
if (!e){
if(bytes_transferred > 0){
receiveMsgbuffer_.append(readBuffer_.data(),bytes_transferred);
boost::posix_time::ptime receiveTime=boost::posix_time::microsec_clock::universal_time();
bool receAgain = true;
if (messageCallBack_){
receAgain = messageCallBack_(shared_from_this(),boost::ref(receiveMsgbuffer_), receiveTime);
}
if ( receAgain && socket_.is_open()){
socket_.async_read_some(boost::asio::buffer(readBuffer_),
boost::bind(&TcpConnection::handle_read, shared_from_this(),
boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));
}
boost::weak_ptr
if(p_timing_wheel_){
p_timing_wheel_->Active(weak_ptr);
}
}
}
else{
if (errorCallBack_){
errorCallBack_(shared_from_this(),e);
}
Stop();
}
}
(2) 報(bào)文解析以及分發(fā)首先,根據(jù)報(bào)文第一個(gè)字節(jié)的值判斷報(bào)文的終端類型,如本系統(tǒng)中值為126的為部標(biāo)終端,-6為OBD終端,其他為T6終端。其次,每種終端均對(duì)應(yīng)一個(gè)終端處理類,Standard類對(duì)應(yīng)部標(biāo)終端,DNA類對(duì)應(yīng)OBD終端,T6類對(duì)應(yīng)T6終端[16]。response為回復(fù)給終端的報(bào)文,update為回復(fù)給終端的額外信息(如時(shí)間校驗(yàn)、終端升級(jí)、電子圍欄等),updateVec表示額外信息可能有多條。每種終端解析后,將報(bào)文發(fā)送個(gè)各自相對(duì)應(yīng)的Topic消息隊(duì)列。
實(shí)驗(yàn)測(cè)試采用北斗智能車載終端,結(jié)合全國(guó)性車輛管理云服務(wù)平臺(tái),實(shí)時(shí)獲取海量車輛行駛軌跡數(shù)據(jù)集。
3.1.1測(cè)試環(huán)境
開發(fā)語言:C++
開源庫(kù):Boost .Asio,mysqlConnector,json,log4cxx
平臺(tái):支持Windows,Linux平臺(tái)
測(cè)試機(jī)器:本地虛擬機(jī)Centos6.4 x64,4線程,4 GB內(nèi)存
3.1.2測(cè)試場(chǎng)景
開啟N個(gè)客戶端進(jìn)程,每個(gè)進(jìn)程開啟M個(gè)TCP管理線程,從而模擬M×N個(gè)TCP連接,每個(gè)連接每5秒發(fā)送一次數(shù)據(jù)。
圖4 服務(wù)端客戶端連接
3.1.3實(shí)驗(yàn)結(jié)果
如圖5和圖6所示,通過進(jìn)行單純TCP連接以及接收數(shù)據(jù)測(cè)試得出:當(dāng)TCP連接數(shù)為15 000的情況下,物理內(nèi)存占用112 MB,內(nèi)存穩(wěn)定,連接穩(wěn)定,數(shù)據(jù)無丟失。
圖5 物理內(nèi)存占用(15 000連接)
圖6 TCP連接數(shù)
通過表2的實(shí)驗(yàn)結(jié)果可知,該系統(tǒng)在有大量TCP連接數(shù)情況下,內(nèi)存穩(wěn)定,內(nèi)存占用較少,數(shù)據(jù)幾乎無丟失。隨著車輛數(shù)量的增多,系統(tǒng)通過橫向擴(kuò)展保證數(shù)據(jù)采集的可靠性。因此能夠?qū)崿F(xiàn)海量終端的高并發(fā)傳入平臺(tái)。
表2 不同TCP連接數(shù)時(shí)系統(tǒng)穩(wěn)定情況
3.2.1測(cè)試環(huán)境
實(shí)驗(yàn)利用Jmeter進(jìn)行模擬發(fā)送TCP消息,對(duì)接收程序進(jìn)行性能測(cè)試。服務(wù)端機(jī)器部署接收程序,監(jiān)控接收程序的CPU和內(nèi)存信息;針對(duì)兩個(gè)數(shù)據(jù)采集系統(tǒng)各設(shè)置5個(gè)TCP采樣器,分別代表5個(gè)TCP客戶端;Jmeter進(jìn)行模擬發(fā)送TCP消息,統(tǒng)計(jì)響應(yīng)時(shí)間和TPS(Transaction Per Second)。表3為性能測(cè)試環(huán)境與配置。
表3 性能測(cè)試環(huán)境與配置
3.2.2實(shí)驗(yàn)結(jié)果
如表4所示,Samples代表總共接收的報(bào)文數(shù),Average代表系統(tǒng)的平均響應(yīng)時(shí)間,Error代表錯(cuò)誤率,TPS代表每秒接收的報(bào)文數(shù),KB/Sec代表帶寬吞吐。通過實(shí)驗(yàn)結(jié)果可得,本系統(tǒng)平均響應(yīng)時(shí)間39 ms,服務(wù)端每秒處理2.6萬個(gè)請(qǐng)求,錯(cuò)誤率為零,響應(yīng)時(shí)間與TPS均達(dá)標(biāo)。相比于傳統(tǒng)數(shù)據(jù)采集系統(tǒng),本系統(tǒng)在重要指標(biāo)方面均有顯著提高。
表4 實(shí)驗(yàn)結(jié)果對(duì)比
一臺(tái)4核12 GB的服務(wù)器上部署一個(gè)接收程序,如表5資源占用情況對(duì)比可得,本系統(tǒng)CPU占用最高為68.8%,小于80%占用的瓶頸,服務(wù)端未發(fā)現(xiàn)內(nèi)存泄露和CPU瓶頸;物理內(nèi)存占用較小,且使用穩(wěn)定;虛擬內(nèi)存保持在1 500以下,未出現(xiàn)波動(dòng)情況。如圖7-圖9所示。相比于傳統(tǒng)采集系統(tǒng),本系統(tǒng)在資源占用方面得以改善。
表5 資源占用情況對(duì)比
圖7 進(jìn)程資源使用情況
圖8 物理內(nèi)存使用情況
圖9 虛擬內(nèi)存使用情況
綜上所述,該智能終端數(shù)據(jù)采集系統(tǒng)可行有效,在數(shù)據(jù)量較大的實(shí)際應(yīng)用中,其優(yōu)勢(shì)將更加明顯,系統(tǒng)不僅能夠保證大量信息的可靠傳輸,而且節(jié)省了一部分硬件資源。
隨著車聯(lián)網(wǎng)與大數(shù)據(jù)技術(shù)的發(fā)展,車輛管理服務(wù)平臺(tái)架構(gòu)由傳統(tǒng)的分散式、本地化,走向集中式、扁平化,分布于各地的智能車載終端接入平臺(tái)面臨新的挑戰(zhàn)[17]。本文采用Boost.Asio框架及Kafka消息隊(duì)列機(jī)制,利用線程池、連接超時(shí)、重寫接收前端服務(wù)及集中搭建集群等技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了海量智能車載終端集中接入平臺(tái)的數(shù)據(jù)采集系統(tǒng)。通過大量實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)能夠保證數(shù)據(jù)采集的質(zhì)量和可靠性,避免了重復(fù)數(shù)據(jù),實(shí)現(xiàn)了大量車載終端的高并發(fā)數(shù)據(jù)傳入,相比于傳統(tǒng)數(shù)據(jù)采集方案,該系統(tǒng)性能上有所改進(jìn)。
在下一步工作中,我們將利用Hbase、Hadoop、Spark等工具對(duì)通過此系統(tǒng)傳入平臺(tái)的數(shù)據(jù)進(jìn)行解析和存儲(chǔ);利用基于聚類的深度神經(jīng)網(wǎng)絡(luò)模型,進(jìn)行規(guī)律路線提取、位置預(yù)測(cè)和語義分析[18],進(jìn)而為后續(xù)實(shí)現(xiàn)對(duì)用戶駕駛行為的綜合評(píng)判和車險(xiǎn)風(fēng)險(xiǎn)評(píng)估提供數(shù)據(jù)支持[19]。
[1] 陳海明,劉強(qiáng),崔莉.物聯(lián)網(wǎng)關(guān)鍵技術(shù)與應(yīng)用[J].計(jì)算機(jī)科學(xué),2010,37(6):7-10.
[2] Welbourne E,Battle L,Cole G.Building the Internet of Things Using RFID:The RFID Ecosystem Experience[J].Internet Computing,2009,3(13):48-55.
[3] 王建強(qiáng),吳辰文,李曉軍.車聯(lián)網(wǎng)架構(gòu)與關(guān)鍵技術(shù)的研究[J].微計(jì)算機(jī)信息,2011,27(4):156-158.
[4] Internet of Vehicles[EB/OL].2017-04-17.http://baike.so.com/doc/3230779-3404531.html.
[5] Naughty.大數(shù)據(jù)系統(tǒng)數(shù)據(jù)采集產(chǎn)品的架構(gòu)分析[EB/OL].2017-02-16.http://bigdata.51cto.com/art/201612/526323.htm.
[6] Atzori L,Iera A,Morabito G.The Internet of Things:A survey[J].Computer Networks,2010,54(15):2787-2805.
[7] 薛軍超.MySQL網(wǎng)絡(luò)數(shù)據(jù)庫(kù)開發(fā)[M].北京:人民郵電出版社,2001.
[8] Zheng Y,Liu Y,Yuan J,et al.Urban computing with taxicabs[C]//Proceedings of the 13th international conference on Ubiquitous computing.ACM,2011:89-98.
[9] 智能車載終端[EB/OL].2016-02-29.http://baike.so.com/doc/6758503-6973106.html.
[10] John Torjo.Boost.Asio C++網(wǎng)絡(luò)編程[M].Packet Publishing,2013:8-9.
[11] 消息隊(duì)列(一):RabbitMQ、ActiveMQ、Kafka Redis[EB/OL].2017-04-02.http://blog.csdn.net/shandianke/article/details/52080004.
[12] Welbourne E,Battle L,Cole G,et al.Building the Internet of Things Using RFID:The RFID Ecosystem Experience[J].IEEE Internet Computing,2009,13(3):48-55.
[13] Sceppa D.ADO編程技術(shù)[M].石鈞,譯.北京:清華大學(xué)出版社,2001.
[14] 高揚(yáng).基于.NET平臺(tái)的三層架構(gòu)軟件框架的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011,21(2):77-80.
[15] Hartenstein H,Labereaus K.A Tutorial Survey on Vehicular Ad Hoc Networks[J].IEEE Communications Magazine,2008(6):164-171.
[16] Kevin C L,Uichin L,Mario G.Geographical opportunistic routing for vehicular networks[J].IEEE Communications Magazine,2010(5):164-170.
[17] 郭銳.基于GIS/GPS/GPRS的車輛監(jiān)控終端系統(tǒng)研發(fā)[D].濟(jì)南:山東大學(xué),2008.
[18] Chen L,Lv M,Ye Q,et al.A personal route prediction system based on trajectory data mining[J].Information Sciences,2011,181(7):1264-1284.
[19] 涂新莉,劉波,林偉偉.大數(shù)據(jù)研究綜述[J].計(jì)算機(jī)應(yīng)用研究,2014,31(6):1612-1616.