云创存储的物联网云计算大数据服务平台是一个可靠、安全、高性能、低成本、简捷易用的物联网数据存储处理一站式托管服务架构。根据物联网应用数据的产生方式和使用特点,在自有的海量分布式数据存储计算技术数据立方平台(DataCube)基础之上,万物云开发团队打造了一套针对智能硬件特点而优化的高性能开放式的数据服务接口,以及一系列功能丰富的、简捷易用的、跨平台的物联网应用开发的编程接口,目的是为了降低物联网应用的数据接入和使用的技术门槛及运营成本,将研发、生产和运营物联网产业硬件和软件产品的中小企业和开发团队从一系列应用数据的难题中解放出来,使他们能够专注开发自己的核心业务,放心地扩大应用规模。
随着智能硬件设备的快速普及和物联网应用开发的迅猛发展,很多开发团队和中小企业都会碰到这样一个关键问题,支撑应用的智能硬件设备产生了大量数据,而智能硬件本身存储空间和处理能力一般都很有限,那么这些数据到底该往那里存,该怎么处理。考虑到这些数据的多形态、海量和分布广泛的特点,如果开发团队和厂商打算自己开发具备完整数据存储和处理功能的后台服务,首先面临的难题是代码和测试工作量极其繁杂庞大,开发阶段要投入大量设备和人力。其次一旦应用上线,数据服务的部署和运维会是一项非常大的技术和商业成本开销, 而随着应用用户的不断增加,应用数据的规模如何随之扩展,存取和处理的性能如何保证,如何保障用户数据不丢失、不泄露、不被恶意窃取,更将成为应用开发者和运营厂商的棘手难题。
针对性物联网应用的这些要求,万物云开发团队在现有数据立方(DataCube)平台产品的基础之上,专门打造一个功能丰富的、简捷易用、针对智能硬件数据产生和物联网数据应用特点的大数据服务平台,其核心是一个硬件数据服务接口,一个平台数据服务逻辑层和一套面向应用的编程接口。平台的目标是满足典型物联网应用所要求的各个性能层次、规模层次的数据存储、查询、处理需求,保障用户数据安全和服务稳定,并提供一系列工具协助用户开发调试、监控性能、数据迁移和优化任务执行, 满足用户在原型开发,产品商用和运营管理等各阶段需求。
物联网大数据平台底层是数据立方(DataCube)海量弹性分布式数据存储和计算架构, 在其之上构造了一个面向智能硬件和物联网应用的数据接入,数据存储和数据处理的服务及想关的业务逻辑层,并提供一套基于支持各种智能硬件通信协议和数据交换协议的数据服务接口以及一系列覆盖各主流语言和平台的应用程序编程接口,包括Linux、iOS、Android系统和Java、Python、C#等编程语言。云创存储物联网大数据平台架构如图1-34所示。
图1 云创存储物联网大数据平台系统架构图
云创存储物联网大数据平台服务按功能可分为硬件数据接入服务,数据存储托管服务和数据处理应用服务。数据接入服务是一套高性能的专为智能硬件数据上报提交而优化,支持多种数据传输和包装协议的开放式数据入库服务。数据存储服务提供海量、弹性、安全、高可用和高可靠的云存储。数据处理和应用服务提供针对TB/PB级数据的查询和准实时的和分布式处理能力,在平台服务和用户托管的应用服务两个不同级别上为物联网应用的客户端提供数据应用接口支持,并将扩展到数据分析、挖掘、商业智能等领域。
3.1 数据服务和编程服务接口
平台的设计思想是通过提供前端智能硬件的数据服务接口和丰富的后端数据应用编程接口,保障智能硬件直接数据通过开放式的数据服务协议接口完成高性能的数据提交入库,并减少和简化物联网应用端数据应用的代码量, 降低物联网数据接入和应用的技术门槛。这意味着用户从产品开发至运营的各个阶段,都可以放心地把智能硬件的数据存储问题一揽子交给大数据服务平台,使自己能更专注于核心业务开发和规模发展。
3.1.1基于HTTP协议的数据服务调用接口
构建HTTP RESTFul协议服务接口的目的主要是使物联网应用客户端便捷地通过构造和发送HTTP POST请求直接访问平台大数据服务, 智能硬件也可以使用这个接口向应用下用户自定义数据表提交数据(平台硬件服务接口只能向应用预定义的主数据表提交数据), 基于RESTFul的HTTP协议将平台的各种数据服务资源映射成URI以供调用,比如智能硬件只要将数据包装成JSON格式通过访问数据插入服务的URI即可完成数据递交。
HTTP协议服务调用接口也支持表和数据的各种基础操作, HTTP协议的通用性保证了大数据平台对物联网应用支持的广泛覆盖。减少应用端的编码。通过HTTP调用,用户可便捷第完成表创建、表删除、获取用户名下的单表和多表表信息、单行或多行数据的插入、删除和查询,以及主键范围查询,数据基本统计功能等各项服务。
3.1.2物联网应用程序编程接口
大数据平台通过提供软件应用开发包的形式为物联网应用提供针对性的数据应用服务,目的在于减少物联网应用端的代码量。大数据平台和数据处理和分析应用有关的各项功能主要通过专用编程接口提供。
以Java BaseAPI为例,表一列出了其中基本数据和表操作模块支持的十一个操作
。表1 Java BaseAPI基本数据和表操作一览
操作名称 |
操作目标 |
addTableRows |
批量插入多行数据。 |
addTableColumns |
向指定表添加指定列 |
createTable |
根据给定的表结构信息创建相应的表。 |
deleteTableRows |
删除一个表中若干行数据。 |
getTableRows |
批量读取一个表中多行数据。 |
getTableRowsByPage |
批量指定条件分页查询 |
deleteTable |
删除指定的表。 |
getTableRowsByRange |
读取指定主键范围内的数据。 |
getAllTableInfo |
获取当前用户所有表的结构信息。 |
getTableInfo |
获取指定表的结构信息。 |
getStatisticByColumn |
按指定条件对指定列数值进行统计计算 |
3.2 数据服务和编程服务接口方法调用示例
3.2.1智能硬件硬件绑定和数据提交示例
智能设备需要按照以下流程首先完成硬件注册,应用绑定和数据关联的步骤,才能开始数据提交
1 智能设备首次接入服务前需通过平台的硬件数据服务设备注册接口提交请求(平台现也支持通过用户中心的应用管理中的设备管理页面通过网页进行硬件注册), 注册成功后设备会收到设备验证码,供后续数据提交时做安全认证和数据资源定位用。
2 如果是新开发的应用,开发者还将通过用户中心应用控制台或应用编程接口在数据平台上建表并定义数据内容。
3 平台通过设备提交请求中所交验的设备验证码关联平台中用户应用和表资源。
下面的代码演示了完成注册的智能硬件如何通过一个HTTP协议中的POST方法调用将一组JSON包装格式的数据提交至大数据平台。参数中seckey内容是服务安全认证所需的设备验证码,row中是用户数据内容。
表2 PM2.5传感器数据提交示例
调用地址 |
http://server_ip:8911/HardWareApi/putData/v0.1 |
方法 |
POST |
参数示例 |
[{
"seckey":"E37CFC74C0BF9274",
//设备注册码 "row":
{
"
dev_id":"q0001", //设备 id 主键索引 "
pm1":"55", //pm25 值 "
pm2":"65", //pm25 值 "
x":"118.020202", //经度 "
y":"32.020202", //纬度 "
version":"q1.0" // 设备版本号 "uptime":''
// 数据上传时间 } }]
|
返回 |
0 |
3.2.2 物联网应用数据读取示例
使用大数据平台JAVA API 进行数据或表操作一般遵循以下几个步骤:
1 创建用户对象,在构造函数中指定供服务安全认证所需的user和AccessKey。
2 构造请求对象
3 调用用户端应用服务对象相关接口发送请求。
下面应用程序代码演示了物联网应用如何通过JAVA API接口用getTableRow()方法读取表中的一行中的location,temp列。
package wanwuyun; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cproc.datacube.client.api.ClientBaseApi; import cproc.datacube.client.api.ClientBaseApiService; import cproc.datacube.client.entity.AppInfo; import cproc.datacube.client.entity.ColumnInfo; import cproc.datacube.client.entity.ReObject; import cproc.datacube.client.entity.Row; import cproc.datacube.client.entity.TableInfo; import cproc.datacube.client.entity.UserInfo; public class test { public
static void main(String[] args) throws Exception {
UserInfo user = new UserInfo();
user.setUserName("jiarry");
user.setAccessId("AMLHCNJ5MTQYNZY4NTI3NDMXMW==");
AppInfo app = new AppInfo();
app.setAppId("7686708862");
app.setUserInfo(user);
ClientBaseApi baseApi = new ClientBaseApiService();
// interface getTableRows List<String>
ids = new ArrayList<String>(); Date
date = new Date(); //http46设备近一小时数据(默认 由接入服务将时间戳和设备号作为 行健 rowkey) //时间戳=Long.MAX_VALUE-设备上传数据时间毫秒值(时间倒序) String endTime = Long.MAX_VALUE -
((date.getTime() - 60 * 60 * 1000))+ ""; String
startTime = Long.MAX_VALUE - date.getTime() + ""; String
devId = "http46"; String
endPk = endTime + devId ; String
startPk = startTime + devId ;
List<String> cls = new ArrayList<String>();
cls.add("PM2");
ReObject row1 = baseApi.getTableRowsByRange(app, "DATA", startPk,
endPk, cls);
for (Object ob : row1.getData()){ Row row =
(Row) ob; System.out.println(row.getColum} } } |
3.3 数据安全机制
用户数据安全是物联网数据应用的关键。云创存储的物联网大数据平台通过一系列多层次的安全验证和访问权限限制措施保护用户数据,防止丢失和泄露事件的发生。
3.3.1访问许可验证
面对数据处理服务的请求,物联网大数据平台通过使用AccessID/AccessKey对称加密的方法来验证发送请求的用户身份。AccessID用于标示用户,AccessKey是用户用于加密签名字符串和大数据平台用来验证签名字符串的密钥。平台根据对称验证结果决定接受或拒绝服务请求。
3.3.2用户数据隔离
大数据平台对用户数据的建表构建采用用户名+应用名+表名的方式,在数据访问时如果表名中的用户名和发出请求的用户名不匹配,服务请求会被拒绝,通过这种方式保证用户只能对自己用户名下的数据资源进行读取和操作。
3.3.3攻击防范机制
大数据平台内建了基本的攻击监测及防范措施。异常的服务请求如过于频繁或参数数据超大的HTTP POST请求会导致服务被拒绝。
3.3.4设备数据提交验证
硬件设备需向平台提交一系列安全信息向平台以通过设备注册, 注册成功后会收到平台派发的设备验证码。此验证码在后续数据提交时将被用于设备认证和数据资源定位。
3.4智能硬件数据接入服务
智能硬件设备可通过平台现已支持的HTTP、MQTT、TCP等服务接口协议和JSON数据包装协议将数据提交至平台用户应用下完成数据入库, 用户也可已为自己的数据设备自定义开发符合硬件设备的数据提交协议和格式服务接口, 方便地把各种不同参数不同协议设备的数据接入平台同一应用下。
3.5规模和性能
物联网大数据平台充分依靠现有数据立方(DataCube)产品的安全可靠高效的各项云数据云计算基础服务,可确保平台向物联网应用提供卓越的数据存取规模和性能。数据立方的存储系统支持弹性扩展,用户无需担心存储空间不足。单表PB级别的数据存储,并且支持表结构横向扩展。分布式系统中各存储节点副本数据实时一致,读写性能不会因数据量增加而受影响。性能上现有平台提供毫秒级单行数据读写延迟,数据查询在百万QPS级别,并且能满足用户应用下智能硬件分布式海量异构高并发数据提交的需求。
3.6 数据管理和应用开发工具
围绕物联网应用开发的特点,物联网大数据平台还将分阶段开发和推出一系列有针对性的数据迁移导出、任务优化,性能监控以及辅助调试等各种数据管理和应用开发工具。
目前已在多个城市大规模部署的PM2.5云监测平台传感网系统,配合现有的环境监测站点,可准确、及时、全面地反映空气质量现状及发展趋势,为空气质量监测和执法提供技术支撑,为环境管理、污染源控制、环境规划等提供科学依据。
2015年底将扩展至10,000套以上以不同协议接入的PM2.5传感器单元,监控范围覆盖全国绝大部分地区。万物云大数据服务平台很好地满足这个监控平台上的所有海量异构的传感器数据存储需求,并提供强大的准实时数据处理能力。
详细介绍:http://www.cstor.cn/proTextdetail_5034.html
演示平台:http://www.mypm25.cn
图1-35南京云创存储PM2.5云监测平台应用界面
+