TableStore+OSS:物联网数据的备份系统实践

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
文件存储 NAS,50GB 3个月
简介: : TableStore是阿里云自研专业级分布式NoSQL数据库,OSS是阿里云的对象存储服务,本篇文章会介绍如何同步TableStore中的数据到OSS中,以便对冷数据做更长久时间的低成本存储。

物联网

场景描述

L公司是一家物联网解决方案提供商,为不同物联网设备生产商提供物联网解决方案,这些物联网设备涉及众多产品领域,包括空调,摄像头,门锁,位置传感器,净化器,扫地机器人,各种工业传感器等等,这些设备都需要实时上传数据到存储系统保存,然后分析系统会实时计算,按照预定义逻辑触发报警或者生成报表。

物联网设备信息和产生的时序数据很适合用Table Store存储,而且能提供非常便捷的通道,用来做分析,具体可以参考这篇文章:如何高效存储海量GPS数据

生产的每一个设备都会有一个设备ID,唯一标识这个设备,并且还存在一些属性值,比如地理位置,属于哪个生产商,属于哪个用户,目前的配置参数等等,这些值相当于这个设备的身份证和户口本。这些数据非常重要,不能容忍丢失,要有接近100%的数据可靠性保证。

核心数据备份

要保证数据尽量高的可靠性,需要从两个方面保证:

存储系统本身的数据可靠性:Table Store基于共享存储,提供99.99999999%的数据可靠性保证,在业界属于非常非常高的标准了。

误操作后能恢复数据 :误操作永远都无法避免,要做的是当误操作发生的时候能尽快恢复,那么就需要有备份数据存在。对于备份,有两种方向,一个是部署同城或异地灾备,这种代价高费用高,更多的用于社会基础信息或金融信息。另一种是将数据备份到另一个价格更低廉的系统,当万一出现误操作的时候,可以有办法恢复就行。一般选择文件存储系统,比如阿里云OSS。

冷数据保存

物联网设备产生的数据是一种时序数据,基于时间的一序列数据点,这些数据的价值和时间成绝对正比,越新的数据价值越大,访问也越大,一般六个月之前的数据的访问量会非常非常低。如果将六个月之前的老数据和最新的数据存储在同一个系统上,那么就不是很划算。这时候,就需要把早一些的数据(比如六个月之前)的数据保存到更便宜的文件存储系统上,比如阿里云OSS。

目标

基于上述两个原因,有不少用户就希望能把Table Store的数据可以备份到OSS上,这样比较热,价值高的数据在Table Store上供用户实时查询或者实时分析、计算等,然后再拷贝一份数据到OSS,提供备份,以及冷数据存储。

一般是账号注册数据等核心数据用OSS来做备份,时序数据用OSS来做冷数据存储,有时候也会直接实时拷贝一份Table Store中的数据存储到OSS,同时提供灾备和冷数据存储功能。

针对上述问题,Table Store团队联合数据集成(CDP)团队上线了近实时的数据同步(备份)方案,用户只需要将数据写入Table Store,Table Store会负责将数据在10分钟内自动发送给OSS存储。

相关产品

Table Store:阿里云分布式NoSQL数据库,专注于海量数据的存储服务,目前单表可支持10PB级,10万亿行以上的数据量,且数据量增大后性能仍然保持稳定。Table Store Stream功能是一种增量实时通道服务,类似于MySQL的binlog,可以通过Stream接口实时读取到最新的变化数据(Put/Update/Delete)。

数据集成 :阿里云数据管理平台,支持数据同步等众多数据功能。

OSS:阿里云对象存储服务,提供海量、安全、低成本、高可靠的云存储服务,提供99.99999999%的数据可靠性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。

三种产品在方案中的角色如下:

| 产品 | Table Store | 数据集成 | OSS |
| --- | --- | --- | --- |
| 角色 | 数据存储 | 数据同步通道 | 备份 |

限制

由于Table Store和OSS不是完全对等的产品,所以如果需要将数据导入OSS,那么在使用Table Store的时候有一些注意的地方:

  • 整行写入:

    • 目前是使用Table Store Stream功能,需要每次写入Table Store的数据是整行数据,目前类似物联网数据的时序数据写入方式都是整行写入,后续基本无修改。
  • 同步延时:

    • 目前使用的是周期调度,每隔5分钟调度一次,再加上插件中有5分钟延迟,同步总延迟在5~10分钟。
  • OSS的文件数:

    • 每次导出任务都会在OSS上生成一个新的文件,为了避免文件数过多,可以将同步周期延长,比如一个小时。具体时间需要根据自己业务特点确定。

使用方式

  • 写:

    • 直接写入Table Store,
  • 读:

    • 直接读取Table Store。
  • 备份:

    • 自动备份。
  • 恢复:

    • 使用数据集成(OSSreader + OTSwriter)重新写会Table Store。

备份

账号注册等核心数据 :这类数据的特点是会经查更新,但数据量不大,对于这种类型的数据可以定期打snapshot,就是每天定时把这个表的数据全量导出到OSS保存。当发生误操作删除数据后,可以直接从OSS恢复全量。另一种做法就是实时通过Table Store Stream同步到OSS,但是这一种方式目前无法处理删除。所以,可以两者结合使用,或者直接使用全量导出。

冷数据保存

传感器时序数据 : 这类数据的特点是每次都是新写入,基本无修改,这类数据可以使用Table Store Stream功能实时同步到OSS中。然后对Table Store中的数据设置生命周期,比如半年,等到半年后,Table Store中超过半年的数据会被系统自动销毁,这时候数据只会在OSS中存在。

Table Store配置

无须配置

OSS配置

无需配置

数据集成

1. 创建数据源(可选)

  1. 如果已经创建了Table Store的数据源,则可以跳过这一步。
  2. 如果不希望创建数据源,也可以在配置页面配置相应的endpoint,instanceName,AccessKeyID和AccessKeySecret。如果希望创建,则按照下面步骤操作。
  3. 登录阿里云大数据开发套件:数据源地址
  4. 单击左侧 离线同步 > 数据源
  5. 在数据源配置页面,选择右上角 新增数据源 ,会有一个弹出框。
  6. 按照说明填写:

    • 数据源名称:填写一个数据源标识符,比如车联网。
    • 数据源描述:填入描述符,比如:车联网GPS数据存储。
    • 数据源类型:选择 ots ,ots是Table Store曾用名。
    • OTS Endpoint:填入TableStore 实例页面的实例地址,如果Table Store的实例和目标产品(比如OSS)在同一个region,则可以填入私网地址,否则需要填入公网地址,不能填入VPC地址。
    • OTS 实例ID:填入Table Store的实例名称。
    • Access Id:填入阿里云网站的AccessKeyID。
    • Access Key:填入阿里云网站AccessKeyID对应的AccessKeySecret。
    • 点击 测试连通性 ,如果成功则会在右上角提示:测试连接成功。 如果失败,点击endpoint是否配置正确,如果仍然无法解决,提工单联系数据集成。
    • 填好后的页面类似下面这样:
      配置数据源
  7. 单击确定,数据源创建成功,此时在数据源页面会出现一个新的数据源信息;
    新数据源
  8. 目前Table Store和OSS都支持新增数据源。在创建OSS的数据源的时候要注意:OSS的endpoint地址不包括bucketName,具体参考:OSS endpoint介绍

2. 创建导出任务

  1. 单击数据集成地址,进入数据集成的页面,会出现模式选择:
    模式选择
  2. 单击 脚本模式 ,弹出一个 导入模板 配置。
  3. 在导入模板配置里面:

    1. 来源类型:OTS Stream(如果是增量同步,选择OTS Stream;如果是全量导出,选择OTS)
    2. 目标类型:OSS
    3. 下述图中选择了OTS Stream,表示增量同步
      oss1
  4. 单击确认,则进入配置界面。

3. 完善配置项

在配置界面,已经提前嵌入了OTSStreamReader和OSSWriter的模板,每一项配置后面都做了解释。这里我们主要介绍增量同步的配置,会详细介绍OTSStreamReader的配置,如果是全量导出,则会使用OTSReader,OTSReader的配置可以参考:全量导出的OTSReader配置项

{
  "type": "job",
  "version": "1.0",
  "configuration": {
    "setting": {
      "errorLimit": {
        "record": "0"  # 允许出错的个数,当错误超过这个数目的时候同步任务会失败。
      },
      "speed": {
        "mbps": "1",  # 每次同步任务的最大流量。
        "concurrent": "1"   # 每次同步任务的并发度。
      }
    },
    "reader": {
      "plugin": "otsstream",  # Reader插件的名称。
      "parameter": {
        "datasource": "", # Table Store的数据源名称,如果有此项则不再需要配置endpoint,accessId,accessKey和instanceName。
        "dataTable": "", # TableStore中的表名。
        "statusTable": "TableStoreStreamReaderStatusTable", # 存储TableStore Stream状态的表,一般不需要修改。
        "startTimestampMillis": "",  # 开始导出的时间点,由于是增量导出,需要循环启动此任务,则这里每次启动的时候的时间都不一样,这里需要设置一个变量,比如${start_time}。
        "endTimestampMillis": "",  # 结束导出的时间点。这里也需要设置一个变量,比如${end_time}。
        "date": "yyyyMMdd",  # 导出哪一天的数据,功能和startTimestampMillis、endTimestampMillis重复,这一项需要删除。
        "mode": "single_version_and_update_only", # TableStore Stream导出数据的格式,目前需要设置成:single_version_and_update_only。如果配置模板中没有则需要增加。
        "column":[  # 需要导出TableStore中的哪些列到OSS中去,如果配置模板中没有则需要增加,具体配置个数由用户自定义设置
                 {
                    "name": "uid"  # 列名,这个是Table Store中的主键
                 },
                 {
                    "name": "name"  # 列名,这个是Table Store中的属性列。
                  },
        ],
        "isExportSequenceInfo": false, # single_version_and_update_only 模式下只能是false。
        "maxRetries": 30 # 最大重试次数。
      }
    },
    "writer": {
      "plugin": "oss", # Writer插件的名称
      "parameter": {
        "datasource": "", # OSS的数据源名称
        "object": "",  # 最后备份到OSS的文件名的前缀,建议Table Store实例名/表名/date。比如"instance/table/{date}"
        "writeMode": "truncate", # 支持truncate|append|nonConflict,truncate会清理已存在的同名文件;append会加到已存在的同名文件内容后面;nonConflict会报错当同名文件存在时。
        "fileFormat": "csv", # 文件类型
        "encoding": "UTF-8", # 编码类型
        "nullFormat": "null", # 当遇到控制时,在文本中如何表示
        "dateFormat": "yyyy-MM-dd HH:mm:ss", # # 时间格式
        "fieldDelimiter": "," # 每一列的分隔符
      }
    }
  }
}

更详细的配置项可以参考:

4. 保存任务

  1. 点击上部的 保存 按钮,则弹出一个对话框,输入任务名称后按确定即可。
    oss2
  2. 保存后会提示:
    oss3

5. 运行任务(测试)

  1. 点击配置内容上部的 运行
  2. 弹出一个配置框,这里需要设置配置文件里的变量值:
    oss7
  3. 设置完成后,点击 确定 后就会开始运行任务,运行结束后到OSS控制台检查是否备份文件成功。
  4. 如果测试运行没问题,则可以正式提交任务了。

6. 提交任务

  1. 点击配置内容上部的 提交
    submit
  2. 配置调度参数:

    • 调度类型:周期调度
    • 自动重跑:√
    • 生效日期:默认值
    • 调度周期:分钟
    • 起始时间:默认值
    • 时间间隔:5分钟
    • 跨周期依赖:可以选择:自依赖,等待上一调度周期结束,才能继续运行。
    • start_time:$[yyyymmddhh24miss-10/24/60],表示调度时间-10分钟。
    • end_time:$[yyyymmddhh24miss-5/24/60],表示调度时间-5分钟。
    • date:${bdp.system.bizdate}:表示调度日期
      oss4
  3. 提交任务后,原有任务处于:只读状态。

7. 查看任务

  1. 前往 运维中心 > 任务列表 > 周期任务 ,就可以看到刚刚创建的同步任务。
    oss5
  2. 隔一天后,可以前往 运维中心 > 任务运维 > 周期实例 ,就可以看到当天需要运行的每一个实例,同时可以看到每个实例的状态以及日志。

8. 验证结果

  1. 周期任务是从下一天的00:00点开始执行。
  2. 等执行完一个任务后,就可以到OSS控制台查看是否生成了新的文件,文件内容是否符合预期。

下一步计划

至此,TableStore数据通过数据集成同步到OSS的配置完成了,延迟在5分钟到10分钟之间。
对于备份场景,这种延迟基本能满足大部分用户的需求了,但为了体验更佳,后面还会继续优化,主要会在两方面:

  • 配置方式上,会使用向导模式,配置更简单。
  • 时效性上,会尽量达到秒级延迟。
  • 在使用中有任何问题,可以加入表格存储钉钉技术交流群:11789671。
  • 更多的Table Store使用场景和通道服务,可以参考: Table Store进阶之路
目录
相关文章
|
1月前
|
传感器 存储 数据采集
04 深度解析物联网架构与技术应用于农业大棚系统
本文将深入探讨物联网架构在农业大棚系统中的应用,从设备接入、边缘网关、数据传输到云平台和应用平台,逐层解析其技术应用与通信协议,为读者全面呈现物联网在农业领域的实际运用场景。
176 0
|
1月前
|
消息中间件 网络协议 物联网
如何入门做物联网系统压测?
【4月更文挑战第18天】物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。
231 13
如何入门做物联网系统压测?
|
4天前
|
传感器 物联网 数据挖掘
物联网在智慧城市交通管理系统中的应用
物联网在智慧城市交通管理系统中的应用
13 1
|
1月前
|
存储 数据管理 Java
基于OSS、NFS构建高性能可扩展的遥感智能解译系统实践之路
该文探讨了构建高性能、可扩展的遥感智能解译系统的架构演进过程。作者强调架构应根据业务场景而定,而非追求单一的“最佳”架构。文章分为五个部分,介绍了从初步的业务场景分析到逐步优化的架构设计。 1. 业务场景描述了服务于地理信息行业的遥感数据管理平台,包括数据湖和遥感智能解译系统的功能和架构设计。 2. 初代系统解决了数据管理和智能解译的基本需求,但存在数据同步效率低下的问题。 3. 自动化阶段通过消息推送和数据接收模块减少了人工干预,将处理时间减半,但仍存在效率和稳定性问题。 4. 高性能阶段引入数据订阅/推送和数据接收Agent,实现了稳定、高速的数据传输,性能提升了6倍。
48747 2
|
1月前
|
机器学习/深度学习 自动驾驶 物联网
未来技术的脉动:区块链、物联网和虚拟现实的革新之旅基于深度学习的图像识别技术在自动驾驶系统中的应用
【5月更文挑战第28天】 随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在重塑我们的世界。本文将深入探讨这些技术的发展趋势,以及它们在各个行业中的创新应用。区块链技术以其不可篡改和去中心化的特性,正在金融、供应链管理和身份验证等领域引领一场变革。物联网通过智能设备和系统的互联互通,实现数据的高效流通,推动智慧城市和智能家居的发展。而虚拟现实技术则通过沉浸式体验,改变教育、医疗和娱乐等行业的服务模式。这些技术的融合与创新,预示着一个更加智能、互联和虚拟的未来。 【5月更文挑战第28天】 随着人工智能技术的飞速发展,深度学习已经成为推动自动驾驶系统革新的核心力量。本文
|
1月前
|
存储 弹性计算 数据库
阿里云oss备份网站数据的详细步骤
该教程指导如何使用阿里云OSS备份网站数据。首先,注册阿里云账号并购买40GB的OSS存储空间。创建Bucket,选择与服务器相同的区域和私有权限。安装阿里云OSS插件,获取AccessKey信息。在宝塔面板中设置计划任务进行网站或数据库备份,选择内网域名以节省流量。备份完成后,通过文件管理器检查OSS中是否有备份文件。下载备份文件需点击文件名,然后打开文件URL。
134 5
|
1月前
|
安全 搜索推荐 物联网
构建未来:基于Android的智能物联网家居系统
【5月更文挑战第15天】 在快速发展的数字化时代,智能物联网(IoT)技术与移动操作系统的结合正在塑造未来家居的生活方式。特别是Android平台,以其开放性、灵活性和广泛的用户基础,成为智能家居创新的理想选择。本文将探讨如何利用Android系统构建一个高效、安全且易于扩展的智能家居控制系统,涵盖系统设计、关键技术实现以及可能面临的挑战。通过分析具体案例,我们旨在为开发者和企业提供一套可行的解决方案蓝图,以促进智能家居领域的进一步发展。
|
25天前
|
物联网 5G 定位技术
室内定位系统:物联网如何帮助我们找到方向
【6月更文挑战第3天】物联网通过蓝牙、Wi-Fi和超宽带技术解决室内定位难题,如商场找店、医院导航。简单蓝牙定位伪代码示例展示了技术原理。室内定位提升仓库管理效率,帮助医院患者导航,也助力商家理解顾客行为。虽面临信号干扰等问题,但物联网已显著改善我们的生活,让室内导航变得可能。下次迷路时,记得物联网会是你的向导!
40 0
|
29天前
|
物联网 区块链 Android开发
构建高效Android应用:Kotlin与Jetpack的实践之路未来技术的融合潮流:区块链、物联网与虚拟现实的交汇点
【5月更文挑战第30天】 在移动开发领域,效率和性能始终是开发者追求的核心。随着技术的不断进步,Kotlin语言以其简洁性和现代化特性成为Android开发的新宠。与此同时,Jetpack组件为应用开发提供了一套经过实践检验的库、工具和指南,旨在简化复杂任务并帮助提高应用质量。本文将深入探索如何通过Kotlin结合Jetpack组件来构建一个既高效又稳定的Android应用,并分享在此过程中的最佳实践和常见陷阱。
|
1月前
|
Kubernetes 物联网 区块链
未来技术的脉动:区块链、物联网和虚拟现实的新纪元Kubernetes 集群性能优化实践
【5月更文挑战第27天】 随着科技的飞速发展,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在重塑我们的世界。这些技术不仅在逐步成熟,而且在各个行业中找到了创新的应用。区块链技术以其不可篡改和去中心化的特性,为金融交易、供应链管理和身份验证提供了新的解决方案。物联网通过智能设备和系统的互联互通,优化了资源管理并提升了生活品质。而虚拟现实技术则在娱乐、教育和医疗等领域创造了沉浸式体验。本文将深入探讨这些技术的发展趋势和多样化应用场景,展望它们如何共同塑造未来社会的面貌。

相关产品

  • 对象存储