閱讀505 返回首頁    go 王者榮耀


如何同步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進階之路

最後更新:2017-11-29 14:35:05

  上一篇:go  突破吞吐限製,多NAS性能聚合方案,數據上傳及讀寫
  下一篇:go  百億級全網輿情分析係統存儲設計