Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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 として分離することによ り,書き込み効率とデータ保存効率を保ちつつ,用途ごとに最適化されたデータ構造へ書き込みを複製す るといった拡張が容易となる.

Yuuki Tsubouchi (yuuk1)

December 06, 2018
Tweet

More Decks by Yuuki Tsubouchi (yuuk1)

Other Decks in Research

Transcript

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

    দ໦ խ޾(͸ͯͳ), Ѩ෦ ത(ϨϐμϜ,ίίϯ,JAIST), দຊ ྄հ(GMOϖύϘ,͘͞ΒΠϯλʔωοτ) 2018.12.6 ୈ11ճΠϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ IOTS2018  
  2. ໨࣍ 1. എܠͱ໨త 2. ࣌ܥྻσʔλϕʔεͷ՝୊ 3. HeteroTSDBΞʔΩςΫνϟ 4. ࣮ݧͱ࣮؀ڥ΁ͷద༻ 5.

    ·ͱΊ 2
  3. എܠͱ໨త 3 1.

  4. γεςϜܭଌͷॏཁੑͷߴ·Γ • Πϯλʔωοτ͕౰ͨΓલʹར༻Ͱ͖Δ࣌୅ • Մ༻ੑͱԠ౴଎౓΁ͷߴ͍ཁٻ • ཁٻΛຬ͍ͨͯ͠Δ͔Ͳ͏͔Λ֬ೝ͢ΔͨΊʹɺγεςϜΛৗ ʹܭଌ͢Δ͜ͱ(ϞχλϦϯά)͕ඞཁ • ϞχλϦϯάઐ༻ͷγεςϜߏஙɾӡ༻͕ඞཁ

    • ϞχλϦϯάγεςϜͷߏஙɾӡ༻ͷෛՙΛ࡟ݮ͢ΔͨΊʹϞ χλϦϯάαʔϏεͷར༻૿Ճ 4
  5. ࣌ܥྻσʔλϕʔε΁ͷཁٻ • ܭଌͨ݁͠ՌΛ࣌ܥྻʹه࿥͠औಘ͢ΔͨΊͷ࣌ܥྻσʔλϕʔ εΛར༻͢Δ͜ͱ͕͋Δ • ϞχλϦϯάαʔϏεఏڙͷͨΊʹ࣌ܥྻσʔλϕʔεʹର͢ Δߴ͍ੑೳཁٻ͕͋Δ • ߴॻ͖ࠐΈεέʔϧΞ΢τੑ •

    ߴՄ༻ੑ • ॻ͖ࠐΈॲཧޮ཰ • σʔλอଘޮ཰ 5
  6. ࣌ܥྻσʔλϕʔεͷ՝୊ • ϞχλϦϯάαʔϏεͷػೳ௥ՃͷͨΊʹσʔλߏ଄Λ֦ுͯ͠ ͍͘ඞཁ͕͋Δ • ͜Ε·Ͱͷख๏Ͱ͸֦ுੑΛߟྀ͞Ε͍ͯͳ͔ͬͨ • ઌߦख๏͸ີ݁߹ͳDBMS(σʔλϕʔε؅ཧγεςϜ)ʹґଘ 6 ຊൃදͰ͸ੑೳཁٻΛຬͨͭͭ͠

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

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

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

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

  11. ֦ுੑͷ͋Δ࣌ܥྻDBͷઃܭ • ີ݁߹ͳDBMSͦͷ΋ͷΛ֦ு͢Δ͜ͱ͸༰қͰ͸ͳ͍ • ༻్͝ͱʹҟͳΔෳ਺ͷDBMSΛ૊Έ߹Θͤͨҟछࠞ߹DBMS ʹΑΔૄ݁߹ԽΛ໨ࢦ͢ • ΠϯσοΫεͷΑ͏ͳ௥Ճͷσʔλߏ଄ͷͨΊͷDBMSΛઐ༻ ʹ഑ஔ͢Δ 11

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

    ΠϯϝϞϦKVSͷނো࣌ʹϝϞϦ্ͷσʔλ͕شൃ͢Δ • ϝοηʔδϒϩʔΧʔʹઌߦॻ͖ࠐΈ͓͖ͯ͠ɺσʔλফࣦ࣌ ʹϒϩʔΧʔ্ͷσʔλΛ࠶ॲཧ͠ɺΠϯϝϞϦKVS্ͷσʔ λΛ෮چͤ͞Δ 12
  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)
  14. ΩʔόϦϡʔܗࣜΛલఏͱͨ࣌͠ܥྻσʔλߏ଄ 14 • (1) KVSͰ͸ൣғݕࡧ͕Ͱ͖ͳ͍࣮૷͕͋Δ • λΠϜελϯϓΛղ૾౓ͷഒ਺ʹἧ͑ͯॻ͖ࠐΈ(ΞϥΠϯϝϯτ) • (2) KVS΁ͷࢀরճ਺͕ଟ͍

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

  16. KVSؒͷσʔλҠಈ: λΠϚʔख๏ • ΩʔόϦϡʔϖΞ୯ҐͰλΠϚʔΛઃఆ • λΠϚʔ͕0ʹͳΔͱτϦΨʔ͕ىಈ͠ϖΞ୯ҐͰσʔλҠಈ • ϖΞ୯ҐͷҠಈ͸ґଘؔ܎Λ࣋ͨͳ͍ಠཱͨ͠ॲཧͱͳΔͨΊɺ ฒߦॲཧ͕༰қ 16

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

    Ҡಈʹ͸ɺλΠϜ΢Οϯυ΢಺ͷσʔλ఺ΛಡΈग़͠ɺҠಈઌ ͷKVSʹॻ͖ࠐΈɺҠಈݩͷσʔλ఺Λ࡟আ͢Δ • ్தͰॻ͖ࠐΈ͕ఀࢭͨ͠ܥྻʹ͍ͭͯ͸ɺఆظతʹશσʔλ ΛεΩϟϯ͠ɺҠಈॲཧΛ࣮ࢪ 17
  18. σʔλߏ଄ͷ֦ு • ϦΞϧλΠϜॻ͖ࠐΈ • ϝοηʔδϒϩʔΧʔͷߪಡऀΛผ్༻ҙ͠ɺ௥ՃDBMSʹॻ ͖ࠐΈ • ॻ͖ࠐ·Εͨσʔλ͕֦ு͞ΕͨDBMS্ʹଈ൓ө • όονॻ͖ࠐΈ

    • ΠϯϝϞϦKVS͔ΒΦϯσΟεΫKVS΁Ҡಈ͢Δͱ͖ʹɺෳ਺ͷ ܥྻ಺σʔλ఺Λ·ͱΊͯ௥ՃDBMSʹॻ͖ࠐΈ • ௥ՃDBMS΁ͷॻ͖ࠐΈճ਺Λ࡟ݮ 18
  19. HeteroTSDBΞʔΩςΫνϟͷ࣮૷ 19 • AWS্Ͱ࣮૷ • ҟछࠞ߹KVS؀ڥʹͯ૿Ճ͢Δӡ༻ෛ୲ ͷ࡟ݮͷͨΊαʔόϨεϓϥοτϑΥʔϜΛར༻ • ϝϞϦɺSSDɺ࣓ؾσΟεΫͷ3૚ߏ଄

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

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

  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࣌ؒ؍࡯͢Δ
  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ʹ࡟ݮͨ͜͠ͱ͕Θ͔Δ ॻ͖ࠐΈεϧʔϓοτͷ࣌ؒมԽ
  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ར༻཰ͱϝϞϦ࢖༻ྔ
  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ͷΩϟύγ ςΟͷ૿Ճʹରͯ͠εϧʔϓο τ͕ઢܗʹεέʔϧ͍ͯ͠Δ ͱݴ͑Δ ΩϟύγςΟͱ ॻ͖ࠐΈεϧʔϓοτ ͷؔ܎
  26. Mackerelͷ࣮؀ڥ΁ͷద༻ • 2017೥7݄͔Β2018೥8݄·Ͱͷ1೥ؒͷՔಇ࣮੷ • ಉظؒͷো֐݅਺2݅ɺނোճ਺2݅ • ো֐1: ಛఆͷΠϯϝϞϦKVSͷϊʔυʹॻ͖ࠐΈෛՙ͕ूத͠ɺϝϞ Ϧ্ݶʹୡ͠ɺOSʹڧ੍ఀࢭ͞Εɺσʔλফࣦൃੜ •

    ϝοηʔδϒϩʔΧʔ্ͷσʔλΛ࠶ॲཧ͠σʔλ෮چ • ো֐2: ಉҰͷϝτϦοΫ໊ͱλΠϜελϯϓΛ΋ͭσʔλ఺͕୹࣌ؒ ʹେྔʹॻ͖ࠐ·ΕɺΠϯϝϞϦKVSͷॻ͖ࠐΈαΠζ্ݶʹୡͨ͠ • ΠϯϝϞϦKVSʹॻ͖ࠐΉલʹॏෳΛഉআ͢Δ͜ͱͰղܾ 26
  27. Mackerelͷ࣮؀ڥ΁ͷద༻ • ނোʹ͍ͭͯ͸ɺ͍ͣΕ΋ΠϯϝϞϦKVSͷϊʔυ͕ఀࢭ͠ɺ ౰֘ϊʔυ͕Ϋϥελ͔Β֎ΕΔ·ͰͷؒʹΤϥʔ͕ൃੜͨ͠ • Lambdaؔ਺࣮ߦͷࣗಈ࠶ࢼߦʹΑΓࣗಈͰσʔλ෮چ • Ұ෦ͷϝτϦοΫͷॻ͖ࠐΈ͕਺෼஗Ԇ͢ΔʹͱͲ·ͬͨ 27

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

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

  30. ·ͱΊ • ੑೳͱ֦ுੑΛཱ྆͢Δ࣌ܥྻσʔλϕʔεΞʔΩςΫνϟͷ ఏҊ • AWSͷϚωʔδυαʔϏεʹΑΓҟछࠞ߹σʔλετΞΛલఏ ͱͨ͠ΞʔΩςΫνϟͷߴ͍࣮ݱੑ • Mackerelͷ࣌ܥྻσʔλϕʔεͱͯ͠1೥ͷՔಇ࣮੷ 30

  31. ࠓޙͷల๬ • ઌߦͷ࣌ܥྻσʔλϕʔεͱͷੑೳൺֱ࣮ݧ • σʔλߏ଄ͷ֦ுੑΛ׆͔ͨ͠ػೳͷ࣮૷ • σʔλ഑ஔ৘ใͷΠϯσΩγϯάʹΑΔࢀর໰͍߹ΘͤͷϨΠ ςϯγͷ࠷దԽ • ଟ࣍ݩσʔλϞσϧ΁ͷରԠ

    • KVSؒͷσʔλҠಈख๏ͷ൚༻Խ • ॲཧͱσʔλͱλΠϚʔΛҰମԽͨ͠σʔλύΠϓϥΠϯ 31