HeteroTSDB: 異種混合キーバリューストアを用いた自動階層化のための 時系列データベースアーキテクチャ / HeteroTSDB: A Time Series Database Architecture for Automatically Tiering on Heterogeneous Key-Value Stores

HeteroTSDB: 異種混合キーバリューストアを用いた自動階層化のための 時系列データベースアーキテクチャ / HeteroTSDB: A Time Series Database Architecture for Automatically Tiering on Heterogeneous Key-Value Stores

第11回インターネットと運用技術の研究会 (IOTS2018)。
論文: https://yuuk.io/papers/heterotsdb_iots2018.pdf

システム管理者からの需要の増加に伴い,システムの状態を時系列データとして収集するためのモ ニタリングシステムがサービスとして提供されるようになってきている.モニタリングサービスの時系列 データベースには,高解像度な時系列データ,時系列データの長期間保存,高い書き込みスケーラビリティ と高可用性が求められている.一方で,これまでサービスの機能追加のためにデータ構造の拡張性を考慮 した時系列データベースは提案されていない.本研究では,インメモリのキーバリューストア (KVS) とオ ンディスクの KVS を組み合わせた異種混合 KVS により自動階層化する時系列データベースアーキテク チャを提案する.提案手法では,メモリとディスクのデータ構造を異なる KVS として分離することによ り,書き込み効率とデータ保存効率を保ちつつ,用途ごとに最適化されたデータ構造へ書き込みを複製す るといった拡張が容易となる.

A658ec7f1badf73819dfa501165016c1?s=128

Yuuki Tsubouchi (yuuk1)

December 06, 2018
Tweet

Transcript

  1. 1.

    HeteroTSDB: ҟछࠞ߹ΩʔόϦϡʔετΞ Λ༻͍ͨࣗಈ֊૚ԽͷͨΊͷ ࣌ܥྻσʔλϕʔεΞʔΩςΫνϟ ௶಺ ༎थ, ࿬ࡔ ேਓ, ᖛా ݈,

    দ໦ խ޾(͸ͯͳ), Ѩ෦ ത(ϨϐμϜ,ίίϯ,JAIST), দຊ ྄հ(GMOϖύϘ,͘͞ΒΠϯλʔωοτ) 2018.12.6 ୈ11ճΠϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ IOTS2018  
  2. 7.

    ੑೳͱ֦ுੑΛཱ྆͢ΔΞʔΩςΫνϟఏҊ • ߴॻ͖ࠐΈεέʔϧΞ΢τੑͱߴՄ༻ੑ • εέʔϧΞ΢τͤ͞΍͍͢KVSΛར༻͢Δ • ॻ͖ࠐΈॲཧޮ཰ͱσʔλอଘޮ཰ • ϝϞϦͱσΟεΫͷ଎౓ࠩͱ༰ྔ୯Ձͷੑ࣭Λ૊Έ߹ΘͤΔ •

    ΠϯϝϞϦKVSͰॻ͖ࠐΈΛड͚෇͚ɺΦϯσΟεΫKVSͰݹ ͍࣌ܥྻσʔλΛอ࣋͢Δ • σʔλߏ଄ͷ֦ுੑ • ֦ு಺༰ʹ߹Θͤͯผ్DBMSΛ༻ҙ͠ॻ͖ࠐΈΛෳ੡͢Δ 7
  3. 9.

    ࣌ܥྻσʔλϕʔεͷઌߦख๏ 9 0QFO54%# (PSJMMB *OqVY%# ॻ͖ࠐΈ εέʔϧΞ΢τੑ Մೳ Մೳ Մೳ

    ঎༻൛ͷΈ ߴՄ༻ੑ Ϋϥελػߏ༗Γ Ϋϥελػߏ༗Γ Ϋϥελػߏ༗Γ ॻ͖ࠐΈޮ཰ ϝϞϦόοϑΝ ΠϯϝϞϦ ϝϞϦόοϑΝ σʔλอଘޮ཰ ແѹॖ ѹॖ ѹॖ ૄ݁߹ੑ ີ݁߹ ີ݁߹ ີ݁߹
  4. 12.

    ॻ͖ࠐΈޮ཰ͱσʔλอ࣋ޮ཰ͷཱ྆ • ߴ଎ͳΠϯϝϞϦKVSͰॻ͖ࠐΈΛड͚෇͚Δ • (1) ϝϞϦ͸σΟεΫͱൺֱ͠༰ྔ୯Ձ͕େ͖͍ • ΦϯσΟεΫKVS΁ݹ͍σʔλΛҠಈ͢ΔKVSͷࣗಈ֊૚Խ • (2)

    ΠϯϝϞϦKVSͷނো࣌ʹϝϞϦ্ͷσʔλ͕شൃ͢Δ • ϝοηʔδϒϩʔΧʔʹઌߦॻ͖ࠐΈ͓͖ͯ͠ɺσʔλফࣦ࣌ ʹϒϩʔΧʔ্ͷσʔλΛ࠶ॲཧ͠ɺΠϯϝϞϦKVS্ͷσʔ λΛ෮چͤ͞Δ 12
  5. 13.

    HeteroTSDBͷϑϩʔ 13 Message Broker (1) write Client Metric Writer Metric

    Reader In-Memory KVS On—Disk KVS (2) subscribe and write (3) migration (i) query (ii) read from each kvs (iii) merge datapoints (ii)
  6. 14.

    ΩʔόϦϡʔܗࣜΛલఏͱͨ࣌͠ܥྻσʔλߏ଄ 14 • (1) KVSͰ͸ൣғݕࡧ͕Ͱ͖ͳ͍࣮૷͕͋Δ • λΠϜελϯϓΛղ૾౓ͷഒ਺ʹἧ͑ͯॻ͖ࠐΈ(ΞϥΠϯϝϯτ) • (2) KVS΁ͷࢀরճ਺͕ଟ͍

    • ҰͭͷΩʔόϦϡʔϖΞʹಉҰܥྻ಺ͷෳ਺ͷσʔλ఺Λ֨ೲ • (3) KVSͷΩʔόϦϡʔϖΞαΠζͷ੍ݶΛ௒͑ͯ͠·͏ • ݻఆ௕ͷλΠϜ΢Οϯυ΢ʹΑΓܥྻΛ෼ׂͯ֨͠ೲ • (4) ॻ͖ࠐΈΤϥʔ࣌ͷ࠶ࢼߦ࣌ʹಉ͡σʔλΛॏෳอଘͯ͠͠·͏ • ࣌ࠁΛΩʔͱͨ͠ϋογϡϚοϓʹΑΓɺ΂͖౳ʹॻ͖ࠐΈ
  7. 17.

    KVSؒͷσʔλҠಈ: Χ΢ϯτख๏ • TTL͕ͳ͍KVSΛར༻͢Δ৔߹ • ܥྻ಺ͷσʔλ఺͕֓ͶҰఆִؒͰॻ͖ࠐ·ΕΔ͜ͱʹண໨ • σʔλ఺ͷॻ͖ࠐΈ࣌ʹɺλΠϜ΢Οϯυ΢಺ͷσʔλ఺͕Ұ ఆݸ਺Ҏ্Ͱ͋Ε͹σʔλΛҠಈ •

    Ҡಈʹ͸ɺλΠϜ΢Οϯυ΢಺ͷσʔλ఺ΛಡΈग़͠ɺҠಈઌ ͷKVSʹॻ͖ࠐΈɺҠಈݩͷσʔλ఺Λ࡟আ͢Δ • ్தͰॻ͖ࠐΈ͕ఀࢭͨ͠ܥྻʹ͍ͭͯ͸ɺఆظతʹશσʔλ ΛεΩϟϯ͠ɺҠಈॲཧΛ࣮ࢪ 17
  8. 18.

    σʔλߏ଄ͷ֦ு • ϦΞϧλΠϜॻ͖ࠐΈ • ϝοηʔδϒϩʔΧʔͷߪಡऀΛผ్༻ҙ͠ɺ௥ՃDBMSʹॻ ͖ࠐΈ • ॻ͖ࠐ·Εͨσʔλ͕֦ு͞ΕͨDBMS্ʹଈ൓ө • όονॻ͖ࠐΈ

    • ΠϯϝϞϦKVS͔ΒΦϯσΟεΫKVS΁Ҡಈ͢Δͱ͖ʹɺෳ਺ͷ ܥྻ಺σʔλ఺Λ·ͱΊͯ௥ՃDBMSʹॻ͖ࠐΈ • ௥ՃDBMS΁ͷॻ͖ࠐΈճ਺Λ࡟ݮ 18
  9. 20.

    HeteroTSDBΞʔΩςΫνϟ·ͱΊ • ΠϯϝϞϦKVSͱΦϯσΟεΫKVSʹΑΔࣗಈ֊૚Խ • ࣌ܥྻσʔλߏ଄ • ΞϥΠϯϝϯτɺλΠϜ΢Οϯυ΢ɺϋογϡϚοϓ • KVSؒͷσʔλҠಈ •

    λΠϚʔख๏: ΩʔόϦϡʔϖΞ୯ҐͰฒߦॲཧՄೳ • Χ΢ϯτख๏: TTLΛར༻Ͱ͖ͳ͍৔߹ʹར༻ • σʔλߏ଄ͷ֦ு • ϦΞϧλΠϜॻ͖ࠐΈ • όονॻ͖ࠐΈ 20
  10. 22.

    22 ߲໨ ࢓༷ #FODINBSL $MJFOU &$Πϯελϯε ΠϯελϯελΠϓ 04 ,FSOFM DYMBSHF

    "NB[PO-JOVY   .FTTBHF #SPLFS ,JOFTJT%BUB4USFBNT γϟʔυ਺  .FUSJD 8SJUFS -BNCEB
 ϝϞϦྔ ϥϯλΠϜ  .#  /PEFKT *O.FNPSZ ,74 &MBTUJ$BDIFGPS3FEJT ϊʔυλΠϓ γϟʔυ਺ DBDIFSMBSHF  0O%JTL,74 %ZOBNP%# ࣮ࡍͷϫʔΫϩʔυΛ໛ͨ͠ϕϯ νϚʔΧʔΛ࡞੒ • ΤʔδΣϯτ਺ • ΤʔδΣϯτͷϝτϦοΫૹ৴ ִؒ (1෼ݻఆ) • 1ճͷૹ৴͋ͨΓʹؚ·ΕΔϝτ ϦοΫ਺ (100ݻఆ) ΤʔδΣϯτ਺ 3FEJT ϊʔυ਺ %ZOBNP%# 8$6 1      1      1      1      P1~P4ͷύϥϝʔληοτΛ༻͍ͯϦιʔ εมԽΛ2࣌ؒ؍࡯͢Δ
  11. 23.

    ࣮ݧ݁Ռ: ෼ؒॻ͖ࠐΈճ਺ 23 0 1 2 3 4 5 0

    20 40 60 80 100 120 datapoint writes / min (mega) minutes In-Memory KVS On-Disk KVS ΠϯϝϞϦKVS΁ͷ෼ؒॻ͖ࠐΈճ਺͸ ໿4MͰҰఆ ΦϯσΟεΫKVS΁෼ؒॻ͖ࠐΈճ਺͸ 70k͔Β170kͷؒΛਪҠ ΦϯσΟεΫKVS΁ͷ ෼ؒॻ͖ࠐΈճ਺Λ ໿1/20ʹ࡟ݮͨ͜͠ͱ͕Θ͔Δ ॻ͖ࠐΈεϧʔϓοτͷ࣌ؒมԽ
  12. 24.

    24 0 10 20 30 40 50 60 70 80

    90 100 0 20 40 60 80 100 120 0 2 4 6 8 10 12 14 16 CPU usage (%) Free memory size (GB) minutes master CPU usage (%) slave1 CPU usage (%) slave2 CPU usage (%) Free memory size (GB) 50෼Λ௒͑ͨͱ͜ΖͰ ۭ͖ϝϞϦ࢖༻ྔ͕10.5GBͰҰఆʹͳͬ ͍ͯΔͨΊσʔλҠಈͰ͖͍ͯΔͱ͍͑Δ CPUར༻཰ͱϝϞϦ࢖༻ྔ
  13. 25.

    25 0 2 4 6 8 10 12 14 16

    18 P1 P2 P3 P4 0 100 200 300 400 500 600 writes / min (mega) writes / min (kilo) parameters set In-Memory KVS [writes/min (mega)] On-Disk KVS [writes/min (kilo)] ΠϯϝϞϦKVSϊʔυ਺ͱ ΦϯσΟεΫKVSͷΩϟύγ ςΟͷ૿Ճʹରͯ͠εϧʔϓο τ͕ઢܗʹεέʔϧ͍ͯ͠Δ ͱݴ͑Δ ΩϟύγςΟͱ ॻ͖ࠐΈεϧʔϓοτ ͷؔ܎
  14. 26.

    Mackerelͷ࣮؀ڥ΁ͷద༻ • 2017೥7݄͔Β2018೥8݄·Ͱͷ1೥ؒͷՔಇ࣮੷ • ಉظؒͷো֐݅਺2݅ɺނোճ਺2݅ • ো֐1: ಛఆͷΠϯϝϞϦKVSͷϊʔυʹॻ͖ࠐΈෛՙ͕ूத͠ɺϝϞ Ϧ্ݶʹୡ͠ɺOSʹڧ੍ఀࢭ͞Εɺσʔλফࣦൃੜ •

    ϝοηʔδϒϩʔΧʔ্ͷσʔλΛ࠶ॲཧ͠σʔλ෮چ • ো֐2: ಉҰͷϝτϦοΫ໊ͱλΠϜελϯϓΛ΋ͭσʔλ఺͕୹࣌ؒ ʹେྔʹॻ͖ࠐ·ΕɺΠϯϝϞϦKVSͷॻ͖ࠐΈαΠζ্ݶʹୡͨ͠ • ΠϯϝϞϦKVSʹॻ͖ࠐΉલʹॏෳΛഉআ͢Δ͜ͱͰղܾ 26
  15. 28.

    ࣮ݧͱ࣮؀ڥ΁ͷద༻ͷ·ͱΊ • ॻ͖ࠐΈॲཧޮ཰ • ΦϯσΟεΫKVS΁ͷॻ͖ࠐΈճ਺Λ1/20ʹ࡟ݮͰ͖ͨ • σʔλอଘޮ཰ • ΠϯϝϞϦKVSͷϝϞϦ࢖༻ྔ͕ຬഋʹͳΔ͜ͱͳ͘ɺσʔλҠಈͰ͖ ͍ͯΔ͜ͱΛ֬ೝͰ͖ͨ

    • ॻ͖ࠐΈεέʔϧΞ΢τੑ • KVSͷΩϟύγςΟ૿Ճʹର͢Δεϧʔϓοτͷઢܗ૿ՃΛ֬ೝͰ͖ͨ • ߴՄ༻ੑͱσʔλফࣦ଱ੑ • ࣮؀ڥʹద༻͢Δ͜ͱʹΑΓ֬ೝͰ͖ͨ 28