Wifi設(shè)備監(jiān)管
公司通過(guò)監(jiān)管系統(tǒng)維護(hù)Wifi設(shè)備屬性、采集Wifi設(shè)備監(jiān)控?cái)?shù)據(jù)。當(dāng)需要Wifi設(shè)備上、下線(xiàn)時(shí),通過(guò)監(jiān)管系統(tǒng)操作完成設(shè)備的添加、下線(xiàn),同時(shí)可通過(guò)系統(tǒng)修改、增加設(shè)備屬性信息,如:設(shè)備mac地址、設(shè)備型號(hào)、設(shè)備地理位置等。設(shè)備上線(xiàn)后,會(huì)定期向系統(tǒng)推送監(jiān)控?cái)?shù)據(jù),從而完成設(shè)備監(jiān)控?cái)?shù)據(jù)的采集。采集數(shù)據(jù)包含:cpu、內(nèi)存、連接數(shù)、Wan口流量與流速、2.4G與5G模塊的信道數(shù)據(jù)等。
通過(guò)分析監(jiān)控?cái)?shù)據(jù)指標(biāo)、分析設(shè)備運(yùn)行狀態(tài),動(dòng)態(tài)將問(wèn)題設(shè)備的運(yùn)行狀態(tài)修改為:預(yù)警、報(bào)警。借助系統(tǒng),網(wǎng)絡(luò)部門(mén)可以快速獲取問(wèn)題設(shè)備列表、了解設(shè)備分布、查詢(xún)歷史監(jiān)控指標(biāo)。同時(shí),也可以精確鎖定老設(shè)備從而方便設(shè)備升級(jí),或者為長(zhǎng)期負(fù)載率較高的位置擴(kuò)充Wifi設(shè)備提供數(shù)據(jù)依據(jù);

功能需求
1、管理Wifi設(shè)備,通過(guò)系統(tǒng)上線(xiàn)新設(shè)備、下線(xiàn)老設(shè)備;
2、系統(tǒng)擁有分組管理能力、標(biāo)簽檢索能力;
3、高并發(fā)海量監(jiān)控?cái)?shù)據(jù)采集能力;
4、管理所有設(shè)備的地理分布;
5、查詢(xún)某一區(qū)域內(nèi)所有設(shè)備的位置;
6、查詢(xún)【某設(shè)備】在【某段時(shí)間】【不同指標(biāo)】的監(jiān)控?cái)?shù)據(jù);
7、低成本持久化所有數(shù)據(jù),挖掘數(shù)據(jù)潛在價(jià)值 等等....
系統(tǒng)樣例,如下所示:官網(wǎng)控制臺(tái)地址:項(xiàng)目樣例

技術(shù)需求
通常,用戶(hù)在設(shè)計(jì)方案是會(huì)重點(diǎn)考慮以下四個(gè)主要的技術(shù)需求:
第一、需要有強(qiáng)大的查詢(xún)、統(tǒng)計(jì)能力,實(shí)現(xiàn)Wifi設(shè)備的管理;
第二、支撐設(shè)備高并發(fā)的監(jiān)控?cái)?shù)據(jù)采集,數(shù)據(jù)庫(kù)需要強(qiáng)大的寫(xiě)入性;
第三、數(shù)據(jù)持久化需求導(dǎo)致數(shù)據(jù)膨脹,但歷史監(jiān)控?cái)?shù)據(jù)多為冷數(shù)據(jù),存儲(chǔ)成本需要盡可能低; 第四、監(jiān)控?cái)?shù)據(jù)未來(lái)挖掘潛在價(jià)值較高,產(chǎn)品下游需要有較好的計(jì)算生態(tài);
表格存儲(chǔ)方案
表格存儲(chǔ)(Tablestore)在四個(gè)重要技術(shù)需求上完全滿(mǎn)足要求:
其一、表格存儲(chǔ)新商業(yè)化不久的多元索引(SearchIndex)功能支持多維檢索、GEO查詢(xún)等功能,完全滿(mǎn)足元數(shù)據(jù)管理需求;
其二、基于LSM tree打造的分布式NoSQL數(shù)據(jù)庫(kù),可以輕松應(yīng)對(duì)海量高并發(fā),零運(yùn)維輕松應(yīng)對(duì)數(shù)據(jù)量的不斷膨脹,理論上無(wú)上限;
其三、表格存儲(chǔ)按量計(jì)費(fèi),提供容量型、高性能型兩種實(shí)例類(lèi)型,容量型對(duì)冷數(shù)據(jù)更適宜,提供了更低存儲(chǔ)成本;
其四、更重要的,表格存儲(chǔ)擁有較為完善的計(jì)算生態(tài),提供全、增量通道服務(wù),提供流、批一體的計(jì)算體系,對(duì)未來(lái)監(jiān)控?cái)?shù)據(jù)價(jià)值挖掘提供渠道;
表格存儲(chǔ)在時(shí)序場(chǎng)景需求的技術(shù)點(diǎn)上擁有極高的匹配,而基于時(shí)序場(chǎng)景打造的時(shí)序模型(Timestream)更是將時(shí)序場(chǎng)景通用功能,封裝成易用的接口,使用戶(hù)更容易的基于表格存儲(chǔ)打造Wifi設(shè)備監(jiān)管系統(tǒng);
數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
首先,我們?cè)谠诒砀翊鎯?chǔ)中抽象出兩類(lèi)數(shù)據(jù),分別是meta類(lèi)數(shù)據(jù)(設(shè)備元數(shù)據(jù))、data類(lèi)數(shù)據(jù)(監(jiān)控?cái)?shù)據(jù));下面對(duì)兩類(lèi)數(shù)據(jù)做簡(jiǎn)單介紹。
WiFi設(shè)備元數(shù)據(jù)
meta數(shù)據(jù)管理著用戶(hù)時(shí)間線(xiàn)的屬性信息,支持指標(biāo)、標(biāo)簽、屬性、地理位置、更新時(shí)間等參數(shù),模型會(huì)為所有屬性創(chuàng)建相應(yīng)的索引,提供多維度條件組合查詢(xún)(包含GEO查詢(xún))。其中Identifier是時(shí)間線(xiàn)的標(biāo)識(shí),包含兩部分:name部分(監(jiān)控指標(biāo)標(biāo)識(shí))、tags部分(固有不可變參數(shù)集合)。
在本樣例中,我們將“wifi”作為指標(biāo)分類(lèi),mac地址作為不可變tag,而將其他屬性作為可變Attributes存放為屬性信息;

設(shè)備監(jiān)控?cái)?shù)據(jù)
data數(shù)據(jù)管理著各個(gè)時(shí)間線(xiàn)的監(jiān)控狀態(tài)數(shù)據(jù),可以為量化數(shù)據(jù)、地理位置、文字表述任意類(lèi)型。data數(shù)據(jù)按照+有序排列,因而同一時(shí)間線(xiàn)的所有數(shù)據(jù)基于時(shí)間有序,這種數(shù)據(jù)存儲(chǔ)方式,極大的提升了時(shí)間線(xiàn)的查詢(xún)效率。
我們將設(shè)備的十幾個(gè)監(jiān)控?cái)?shù)據(jù)某一時(shí)間點(diǎn)的監(jiān)控?cái)?shù)據(jù)存放為一行數(shù)據(jù),不同屬性對(duì)應(yīng)不同列;依據(jù)不同測(cè)監(jiān)控維度,用戶(hù)只需提供不同的columnToGet字段,獲取不同監(jiān)控維度的部分指標(biāo)數(shù)據(jù),即可對(duì)應(yīng)不同監(jiān)控指標(biāo),如:WAN口流量:對(duì)應(yīng)wan_total_in與wan_total_out兩個(gè)字段; 
讀、寫(xiě)接口
寫(xiě)數(shù)據(jù)
寫(xiě)數(shù)據(jù)提供兩類(lèi)接口:Wifi設(shè)備添加、監(jiān)控?cái)?shù)據(jù)寫(xiě)入
- Wifi設(shè)備添加:如果新增一個(gè)Wifi設(shè)備,需要首先向meta表中插入一條設(shè)備meta數(shù)據(jù),通過(guò)metaTable.put(Meta)創(chuàng)建或修改meta信息;
- 監(jiān)控?cái)?shù)據(jù)寫(xiě)入:創(chuàng)建完meta后,wifi設(shè)備端就可以定時(shí)、周期性地采集監(jiān)控?cái)?shù)據(jù),并將數(shù)據(jù)推送、寫(xiě)入到data表;模型設(shè)計(jì)上可支持多精度表管理,用戶(hù)可以根據(jù)自身需求管理多個(gè)精度的data數(shù)據(jù)

讀數(shù)據(jù)
與寫(xiě)數(shù)據(jù)一樣,針對(duì)兩類(lèi)數(shù)據(jù)提供了兩類(lèi)讀接口:Wifi設(shè)備查詢(xún)、監(jiān)控?cái)?shù)據(jù)讀取
- Wifi設(shè)備查詢(xún):根據(jù)設(shè)備分組、設(shè)備狀態(tài)、地理位置等多維度條件組合,獲取對(duì)應(yīng)wifi設(shè)備列表,掌握設(shè)備的最新?tīng)顟B(tài);
- 監(jiān)控?cái)?shù)據(jù)讀?。夯趩蝹€(gè)meta的Identifier,獲取該設(shè)備某段時(shí)間內(nèi)、某一指標(biāo)的監(jiān)控?cái)?shù)據(jù)
核心代碼
SDK與樣例代碼
SDK:時(shí)序模型Timestream模型集成于表格存儲(chǔ)的SDK中,已在4.11.0版本中支持:
dependency>
groupId>com.aliyun.openservices/groupId>
artifactId>tablestore/artifactId>
version>4.11.0/version>
/dependency>
代碼開(kāi)源:https://github.com/aliyun/tablestore-examples/tree/master/demos/WifiMonitor
創(chuàng)建數(shù)據(jù)表
在創(chuàng)建完成實(shí)例后,用戶(hù)需要通過(guò)時(shí)序模型的sdk創(chuàng)建相應(yīng)的meta表、data表: 不同精度監(jiān)控?cái)?shù)據(jù)存放不同表,用表名作區(qū)分,根據(jù)不同range的查詢(xún),需要不同精度的監(jiān)控?cái)?shù)據(jù),實(shí)例中僅用了一個(gè)精度,用戶(hù)可根據(jù)自身需求設(shè)計(jì)多個(gè)表;
private void init() {
AsyncClient asyncClient = new AsyncClient(endpoint, accessKeyId, accessKeySecret, instance);
TimestreamDBConfiguration conf = new TimestreamDBConfiguration("metaTableName");
TimestreamDBClient db = new TimestreamDBClient(asyncClient, conf);
}
public void createTable() {
db.createMetaTable(Arrays.asList(
new AttributeIndexSchema("group", AttributeIndexSchema.Type.KEYWORD),
new AttributeIndexSchema("id", AttributeIndexSchema.Type.KEYWORD),
new AttributeIndexSchema("status", AttributeIndexSchema.Type.KEYWORD),
new AttributeIndexSchema("version", AttributeIndexSchema.Type.KEYWORD),
new AttributeIndexSchema("location", AttributeIndexSchema.Type.GEO_POINT)
));
db.createDataTable("dataTableName");
}
數(shù)據(jù)寫(xiě)入
數(shù)據(jù)寫(xiě)入主要分兩部分,meta表添加新Wifi設(shè)備、data表采集設(shè)備監(jiān)控?cái)?shù)據(jù)
添加新Wifi設(shè)備(meta表寫(xiě)入)
//metaWriter對(duì)應(yīng)meta表,提供讀、寫(xiě)接口
TimestreamMetaTable metaWriter = db.metaTable();
//identifier作為時(shí)間線(xiàn)的身份標(biāo)識(shí)(unique),含:Name、Tags,
TimestreamIdentifier identifier = new TimestreamIdentifier.Builder("wifi")
.addTag("mac", "mock:mac:1:1")
.build();
//基于identifier創(chuàng)建meta對(duì)象,并為meta設(shè)置更多屬性,Attributes為屬性參數(shù)
TimestreamMeta meta = new TimestreamMeta(identifier)
.addAttribute("group", "group-1")
.addAttribute("id", "id-1")
.addAttribute("version", "v1.0")
.addAttribute("status", "normal")
.addAttribute("location", "30,120");
//創(chuàng)建新的時(shí)間線(xiàn),然后寫(xiě)入監(jiān)控?cái)?shù)據(jù)
metaWriter.put(meta);
采集Wifi設(shè)備監(jiān)控?cái)?shù)據(jù)(data表寫(xiě)入)
//dataWriter分別對(duì)應(yīng)data表,提供讀、寫(xiě)接口
TimestreamDataTable dataWriter = db.dataTable("dataTableName");
TimestreamMeta meta;//meta上一步已經(jīng)構(gòu)建
//創(chuàng)建新的時(shí)間線(xiàn),然后寫(xiě)入監(jiān)控?cái)?shù)據(jù)
dataWriter.asyncWrite(
meta.getIdentifier(),//Identifier identifier
new Point.Builder(i, TimeUnit.SECONDS)
.addField("cpu", 30)
.addField("ram", 29)
.addField("flash_used", 20)
.addField("flash_total", 1048576)
.build()
);
數(shù)據(jù)讀取
數(shù)據(jù)讀取分為兩類(lèi):Wifi設(shè)備列表查詢(xún)與設(shè)備監(jiān)控?cái)?shù)據(jù)查詢(xún)
查詢(xún)Wifi設(shè)備列表(meta表讀?。?/strong>
//reader對(duì)應(yīng)meta表,提供讀、寫(xiě)接口,此處名字為突出讀功能
TimestreamMetaTable metaReader = db.metaTable();
//構(gòu)建篩選條件
Filter filter = new AndFilter(Arrays.asList(
Name.equal("wifi"),
Tag.equal("mac", "mock:mac:1:1"),
Attribute.inGeoDistance("location", "30,120", 100000)
));
IteratorTimestreamMeta> iterator = metaReader
.filter(filter)
.fetchAll();
while (iterator.hasNext()) {
TimestreamMeta meta = iterator.next();//deal with metas
}
獲取Wifi設(shè)備的監(jiān)控?cái)?shù)據(jù)(data表讀取)
//dataWriter分別對(duì)應(yīng)data表,提供讀、寫(xiě)接口
TimestreamDataTable dataReader = db.dataTable("dataTableName");
TimestreamMeta meta;//基于已獲取的meta列表,分別獲取每個(gè)時(shí)間線(xiàn)的有序監(jiān)控?cái)?shù)據(jù)
IteratorPoint> iterator = reader.get(meta.getIdentifier())
.select("flash_used", "flash_total")//設(shè)置返回的列
.timeRange(TimeRange.range(0, Long.MAX_VALUE, TimeUnit.SECONDS))
.fetchAll();
while (iterator.hasNext()) {
Point point = iterator.next();//deal with points
long timestamp = point.getTimestamp(TimeUnit.MILLISECONDS);//毫秒單位時(shí)間戳
long flashUsed = point.getField("flash_used").asLong();//獲取該點(diǎn)long類(lèi)型的數(shù)據(jù)大小監(jiān)控
long flashUotal = point.getField("flash_total").asLong();//獲取該點(diǎn)long類(lèi)型的數(shù)據(jù)大小監(jiān)控
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- Android設(shè)備之間通過(guò)Wifi通信的示例代碼
- Linux系統(tǒng)安裝NoSQL(MongoDB和Redis)步驟及問(wèn)題解決辦法(總結(jié)篇)
- 初識(shí)NoSQL NoSql數(shù)據(jù)庫(kù)入門(mén) NoSql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)
- 大數(shù)據(jù)時(shí)代的數(shù)據(jù)庫(kù)選擇:SQL還是NoSQL?