建立在Tablestore的Wifi设备监管系统架构实现

Wifi设备监管

公司通过监管系统维护Wifi设备属性、采集Wifi设备监控数据。当需要Wifi设备上、下线时,通过监管系统操作完成设备的添加、下线,同时可通过系统修改、增加设备属性信息,如:设备mac地址、设备型号、设备地理位置等。设备上线后,会定期向系统推送监控数据,从而完成设备监控数据的采集。采集数据包含:cpu、内存、连接数、Wan口流量与流速、2.4G与5G模块的信道数据等。

通过分析监控数据指标、分析设备运行状态,动态将问题设备的运行状态修改为:预警、报警。借助系统,网络部门可以快速获取问题设备列表、了解设备分布、查询历史监控指标。同时,也可以精确锁定老设备从而方便设备升级,或者为长期负载率较高的位置扩充Wifi设备提供数据依据;

功能需求

1、管理Wifi设备,通过系统上线新设备、下线老设备;

2、系统拥有分组管理能力、标签检索能力;

3、高并发海量监控数据采集能力;

4、管理所有设备的地理分布;

5、查询某一区域内所有设备的位置;

6、查询【某设备】在【某段时间】【不同指标】的监控数据;

7、低成本持久化所有数据,挖掘数据潜在价值 等等....

系统样例,如下所示:官网控制台地址:项目样例

技术需求

通常,用户在设计方案是会重点考虑以下四个主要的技术需求:

第一、需要有强大的查询、统计能力,实现Wifi设备的管理;

第二、支撑设备高并发的监控数据采集,数据库需要强大的写入性;

第三、数据持久化需求导致数据膨胀,但历史监控数据多为冷数据,存储成本需要尽可能低; 第四、监控数据未来挖掘潜在价值较高,产品下游需要有较好的计算生态;

表格存储方案

表格存储(Tablestore)在四个重要技术需求上完全满足要求:

其一、表格存储新商业化不久的多元索引(SearchIndex)功能支持多维检索、GEO查询等功能,完全满足元数据管理需求;

其二、基于LSM tree打造的分布式NoSQL数据库,可以轻松应对海量高并发,零运维轻松应对数据量的不断膨胀,理论上无上限;

其三、表格存储按量计费,提供容量型、高性能型两种实例类型,容量型对冷数据更适宜,提供了更低存储成本;

其四、更重要的,表格存储拥有较为完善的计算生态,提供全、增量通道服务,提供流、批一体的计算体系,对未来监控数据价值挖掘提供渠道;

表格存储在时序场景需求的技术点上拥有极高的匹配,而基于时序场景打造的时序模型(Timestream)更是将时序场景通用功能,封装成易用的接口,使用户更容易的基于表格存储打造Wifi设备监管系统;

数据结构设计

首先,我们在在表格存储中抽象出两类数据,分别是meta类数据(设备元数据)、data类数据(监控数据);下面对两类数据做简单介绍。

WiFi设备元数据

meta数据管理着用户时间线的属性信息,支持指标、标签、属性、地理位置、更新时间等参数,模型会为所有属性创建相应的索引,提供多维度条件组合查询(包含GEO查询)。其中Identifier是时间线的标识,包含两部分:name部分(监控指标标识)、tags部分(固有不可变参数集合)。

在本样例中,我们将“wifi”作为指标分类,mac地址作为不可变tag,而将其他属性作为可变Attributes存放为属性信息;

设备监控数据

data数据管理着各个时间线的监控状态数据,可以为量化数据、地理位置、文字表述任意类型。data数据按照+有序排列,因而同一时间线的所有数据基于时间有序,这种数据存储方式,极大的提升了时间线的查询效率。

我们将设备的十几个监控数据某一时间点的监控数据存放为一行数据,不同属性对应不同列;依据不同测监控维度,用户只需提供不同的columnToGet字段,获取不同监控维度的部分指标数据,即可对应不同监控指标,如:WAN口流量:对应wan_total_in与wan_total_out两个字段;

读、写接口

写数据

写数据提供两类接口:Wifi设备添加、监控数据写入

  • Wifi设备添加:如果新增一个Wifi设备,需要首先向meta表中插入一条设备meta数据,通过metaTable.put(Meta)创建或修改meta信息;
  • 监控数据写入:创建完meta后,wifi设备端就可以定时、周期性地采集监控数据,并将数据推送、写入到data表;模型设计上可支持多精度表管理,用户可以根据自身需求管理多个精度的data数据

读数据

与写数据一样,针对两类数据提供了两类读接口:Wifi设备查询、监控数据读取

  • Wifi设备查询:根据设备分组、设备状态、地理位置等多维度条件组合,获取对应wifi设备列表,掌握设备的最新状态;
  • 监控数据读取:基于单个meta的Identifier,获取该设备某段时间内、某一指标的监控数据

核心代码

SDK与样例代码

SDK:时序模型Timestream模型集成于表格存储的SDK中,已在4.11.0版本中支持:

<dependency>
 <groupId>com.aliyun.openservices</groupId>
 <artifactId>tablestore</artifactId>
 <version>4.11.0</version>
</dependency>

代码开源:https://github.com/aliyun/tablestore-examples/tree/master/demos/WifiMonitor

创建数据表

在创建完成实例后,用户需要通过时序模型的sdk创建相应的meta表、data表: 不同精度监控数据存放不同表,用表名作区分,根据不同range的查询,需要不同精度的监控数据,实例中仅用了一个精度,用户可根据自身需求设计多个表;

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");
}

数据写入

数据写入主要分两部分,meta表添加新Wifi设备、data表采集设备监控数据

添加新Wifi设备(meta表写入)

//metaWriter对应meta表,提供读、写接口
TimestreamMetaTable metaWriter = db.metaTable();

//identifier作为时间线的身份标识(unique),含:Name、Tags,
TimestreamIdentifier identifier = new TimestreamIdentifier.Builder("wifi")
 .addTag("mac", "mock:mac:1:1")
 .build();

//基于identifier创建meta对象,并为meta设置更多属性,Attributes为属性参数
TimestreamMeta meta = new TimestreamMeta(identifier)
 .addAttribute("group", "group-1")
 .addAttribute("id", "id-1")
 .addAttribute("version", "v1.0")
 .addAttribute("status", "normal")
 .addAttribute("location", "30,120");

//创建新的时间线,然后写入监控数据
metaWriter.put(meta);

采集Wifi设备监控数据(data表写入)

//dataWriter分别对应data表,提供读、写接口
TimestreamDataTable dataWriter = db.dataTable("dataTableName");
TimestreamMeta meta;//meta上一步已经构建

//创建新的时间线,然后写入监控数据
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()
);

数据读取

数据读取分为两类:Wifi设备列表查询与设备监控数据查询

查询Wifi设备列表(meta表读取)

//reader对应meta表,提供读、写接口,此处名字为突出读功能
TimestreamMetaTable metaReader = db.metaTable();

//构建筛选条件
Filter filter = new AndFilter(Arrays.asList(
 Name.equal("wifi"),
 Tag.equal("mac", "mock:mac:1:1"),
 Attribute.inGeoDistance("location", "30,120", 100000)
));

Iterator<TimestreamMeta> iterator = metaReader
 .filter(filter)
 .fetchAll();

while (iterator.hasNext()) {
 TimestreamMeta meta = iterator.next();//deal with metas
}

获取Wifi设备的监控数据(data表读取)

//dataWriter分别对应data表,提供读、写接口
TimestreamDataTable dataReader = db.dataTable("dataTableName");
TimestreamMeta meta;//基于已获取的meta列表,分别获取每个时间线的有序监控数据

Iterator<Point> iterator = reader.get(meta.getIdentifier())
 .select("flash_used", "flash_total")//设置返回的列
 .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);//毫秒单位时间戳
 long flashUsed = point.getField("flash_used").asLong();//获取该点long类型的数据大小监控
 long flashUotal = point.getField("flash_total").asLong();//获取该点long类型的数据大小监控
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android设备之间通过Wifi通信的示例代码

    之前写过PC与Android之间通过WIFI通信(通过Socket,可以在博客里面搜索),PC作为主机,Android作为客户机,现在手头有一台仪器通过wifi传输数据,如果仪器作为主机发射WIFI热点信号,Android需要连接到该热点才能进一步进行通信,但是由于主机并没有连接到网络,所以在该种情况下Android设备无法使用网络实现相关的网络服务(比如关键数据的上传,网络数据的获取等等),所以仪器在开始设计的时候将其作为客户端,Android设备作为主机(网上的相关资料大多是将Android

  • 大数据时代的数据库选择:SQL还是NoSQL?

    一.专家简介VoltDB公司首席技术官Ryan Betts表示,SQL已经赢得了大型企业的广泛部署,大数据是它可以支持的另一个领域.Couchbase公司首席执行官Bob Wiederhold表示,NoSQL是可行的选择,并且从很多方面来看,它是大数据的最佳选择,特别是涉及到可扩展性时.二.SQL经历时间的考验,并仍然在蓬勃发展结构化查询语言(SQL)是经过时间考验的胜利者,它已经主宰了几十年,目前大数据公司和组织(例如谷歌.Facebook.Cloudera和Apache)正在积极投资于SQL

  • Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法(总结篇)

    如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装MongoDB和Redis,希望可以帮助大家:)! 一.MongoDB 1.MongoDB安装 (1)将安装包mongodb-linux-i686-3.0.2.tgz拷贝到要安装的服务器中 这里我用的rz命令,如果不支持需要安装yum -y install lrzsz (2)解压安装程序 tar xzvf mongodb-lin

  • 初识NoSQL NoSql数据库入门 NoSql数据库基础知识

    做了一年的大一年度项目了,对于关系型数据库结构还是有些了解了,有的时候还是觉得这种二维表不是很顺手.在看过一篇文章之后,对NoSQL有了初步的了解,(https://keen.io/blog/53958349217/analytics-for-hackers-how-to-think-about-event-data).这篇文章写的很好,确实写出来了在实际情况下NoSQL的"用武之地",而且用了MineCraft作分析,但是也许不够全面.比如文章中只是提到了,entity数据用关系型怎

  • 建立在Tablestore的Wifi设备监管系统架构实现

    Wifi设备监管 公司通过监管系统维护Wifi设备属性.采集Wifi设备监控数据.当需要Wifi设备上.下线时,通过监管系统操作完成设备的添加.下线,同时可通过系统修改.增加设备属性信息,如:设备mac地址.设备型号.设备地理位置等.设备上线后,会定期向系统推送监控数据,从而完成设备监控数据的采集.采集数据包含:cpu.内存.连接数.Wan口流量与流速.2.4G与5G模块的信道数据等. 通过分析监控数据指标.分析设备运行状态,动态将问题设备的运行状态修改为:预警.报警.借助系统,网络部门可以快速

  • Android App的运行环境及Android系统架构概览

    Android基于linux内核,面向移动终端的操作系统.主要包括以下几个方面: Application Framework: 这一层为应用开发者提供了丰富的应用编程接口,如 Activity Manager,Content Provider,Notification Manager,以及各种窗口 Widget 资源等.所有的APP都是运行在这一层之上. Dalvik 虚拟机: Dalvik VM采用寄存器架构,而不是JVM的栈架构,更适于移动设备.java源代码经过编译成为.class字节码文

  • Entity Framework系统架构与原理介绍

    一.Entity Framework概要 Entity Framework是微软的Object Relational Mapper(对象关系映射),也就是我们平常说的ORM,它可以让应用程序开发者将关系型数据作为业务模型来使用,也消除了开发者为数据访问编写的绝大多数管道代码的需要(比如使用ADO.NET).Entity Framework提供了一个综合的.基于模型的系统,通过摆脱为所有的领域模型编写相似的数据访问代码,使得开发者创建数据访问层是如此之简单.Entity Framework的首发版

  • 《解剖PetShop》之一:PetShop的系统架构设计

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来.这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注.然而PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又很多可以借鉴之处.PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念.本系列试图对

  • Linux系统架构类型的5条常用查看命令

    无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎可以通吃所有 Linux 发行版,例如:RHEL.CentOS.Fedora.Scientific Linux.Debian.Ubuntu.Linux Mint.OpenSUSE 等等. 1. uname 命令 uname -a 命令可以直接显示Linux 系统架构的命令,安几乎可以工作在所有 Linux/Unix 系统当中. 2. dpkg 命令 dpkg的命令可用于查看 Debian/ Ubuntu 操作系统是 32 位

  • 说说大型高并发高负载网站的系统架构

    我在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,可以和大家一起探讨一下. 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经

  • 建立良好体验度的Web注册系统ajax

    *项目名称:具有良好体验度的Web注册系统 *作者:草履虫 *联系:caolvchong@gmail.com *时间:2007-6-29 *起因和版权说明:   1.蓝色理想上有位会员发布了个类似的系统,提问说验证码不支持firefox的刷新,于是萌生念头做一个.本系统外观(按钮取色等)借鉴了该系统,但细节实现原理并不相同(该文地址:http://bbs.blueidea.com/thread-2761325-1-4.html).   2.另外,自己做的这个注册系统中利用了网络上的无组件验证码(

  • 限时抢购秒杀系统架构分析与实战

    1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1)低廉价格:(2)大幅推广:(3)瞬时售空:(4)一般是定时上架:(5)时间短.瞬时并发量高: 2 秒杀技术挑战 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有: 对现有网站业务造成冲击 秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原

  • .NET/ASP.NET Routing路由(深入解析路由系统架构原理)

    1]开篇介绍 这篇文章让我们愉快的学习一下ASP.NET中核心的对象模型Routing模块,为什么说愉快呢,因为Routing正是建立在大家都比较熟悉的ASP.NET管道模型基础之上的,所以相比其他一些陌生的概念会轻松很多,不过不要紧一回生二回熟: ASP.NET Routing 系统是一切通过ASP.NET进行Uri访问应用程序的基础(并非物理文件的直接映射):随着Routing的出现,我们的WEB设计已经和以前大不一样:越来越轻量级.简单化,都通过简便的Uri资源的方式进行处理,将精力放在业

  • 基于springboot搭建的web系统架构的方法步骤

    从接触springboot开始,便深深的被它的简洁性深深的折服了,精简的配置,方便的集成,使我再也不想用传统的ssm框架来搭建项目,一大堆的配置文件,维护起来很不方便,集成的时候也要费力不少.从第一次使用springboot开始,一个简单的main方法,甚至一个配置文件也不需要(当然我是指的没有任何数据交互,没有任何组件集成的情况),就可以把一个web项目启动起来,下面总结一下自从使用springboot依赖,慢慢完善的自己的一个web系统的架构,肯定不是最好的,但平时自己用着很舒服. 1. 配

随机推荐