$30 off During Our Annual Pro Sale. View Details »

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


    View Slide

  2. ໨࣍
    1. എܠͱ໨త
    2. ࣌ܥྻσʔλϕʔεͷ՝୊
    3. HeteroTSDBΞʔΩςΫνϟ
    4. ࣮ݧͱ࣮؀ڥ΁ͷద༻
    5. ·ͱΊ
    2

    View Slide

  3. എܠͱ໨త
    3
    1.

    View Slide

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

    View Slide

  5. ࣌ܥྻσʔλϕʔε΁ͷཁٻ
    • ܭଌͨ݁͠ՌΛ࣌ܥྻʹه࿥͠औಘ͢ΔͨΊͷ࣌ܥྻσʔλϕʔ
    εΛར༻͢Δ͜ͱ͕͋Δ
    • ϞχλϦϯάαʔϏεఏڙͷͨΊʹ࣌ܥྻσʔλϕʔεʹର͢
    Δߴ͍ੑೳཁٻ͕͋Δ
    • ߴॻ͖ࠐΈεέʔϧΞ΢τੑ
    • ߴՄ༻ੑ
    • ॻ͖ࠐΈॲཧޮ཰
    • σʔλอଘޮ཰
    5

    View Slide

  6. ࣌ܥྻσʔλϕʔεͷ՝୊
    • ϞχλϦϯάαʔϏεͷػೳ௥ՃͷͨΊʹσʔλߏ଄Λ֦ுͯ͠
    ͍͘ඞཁ͕͋Δ
    • ͜Ε·Ͱͷख๏Ͱ͸֦ுੑΛߟྀ͞Ε͍ͯͳ͔ͬͨ
    • ઌߦख๏͸ີ݁߹ͳDBMS(σʔλϕʔε؅ཧγεςϜ)ʹґଘ
    6
    ຊൃදͰ͸ੑೳཁٻΛຬͨͭͭ͠
    ՝୊ΛղܾͰ͖ΔΞʔΩςΫνϟͷఏҊ

    View Slide

  7. ੑೳͱ֦ுੑΛཱ྆͢ΔΞʔΩςΫνϟఏҊ
    • ߴॻ͖ࠐΈεέʔϧΞ΢τੑͱߴՄ༻ੑ
    • εέʔϧΞ΢τͤ͞΍͍͢KVSΛར༻͢Δ
    • ॻ͖ࠐΈॲཧޮ཰ͱσʔλอଘޮ཰
    • ϝϞϦͱσΟεΫͷ଎౓ࠩͱ༰ྔ୯Ձͷੑ࣭Λ૊Έ߹ΘͤΔ
    • ΠϯϝϞϦKVSͰॻ͖ࠐΈΛड͚෇͚ɺΦϯσΟεΫKVSͰݹ
    ͍࣌ܥྻσʔλΛอ࣋͢Δ
    • σʔλߏ଄ͷ֦ுੑ
    • ֦ு಺༰ʹ߹Θͤͯผ్DBMSΛ༻ҙ͠ॻ͖ࠐΈΛෳ੡͢Δ
    7

    View Slide

  8. ࣌ܥྻσʔλϕʔεͷ
    ՝୊
    8
    2.

    View Slide

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

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

    View Slide

  10. HeteroTSDB
    ΞʔΩςΫνϟ
    10
    3.

    View Slide

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

    View Slide

  12. ॻ͖ࠐΈޮ཰ͱσʔλอ࣋ޮ཰ͷཱ྆
    • ߴ଎ͳΠϯϝϞϦKVSͰॻ͖ࠐΈΛड͚෇͚Δ
    • (1) ϝϞϦ͸σΟεΫͱൺֱ͠༰ྔ୯Ձ͕େ͖͍
    • ΦϯσΟεΫKVS΁ݹ͍σʔλΛҠಈ͢ΔKVSͷࣗಈ֊૚Խ
    • (2) ΠϯϝϞϦKVSͷނো࣌ʹϝϞϦ্ͷσʔλ͕شൃ͢Δ
    • ϝοηʔδϒϩʔΧʔʹઌߦॻ͖ࠐΈ͓͖ͯ͠ɺσʔλফࣦ࣌
    ʹϒϩʔΧʔ্ͷσʔλΛ࠶ॲཧ͠ɺΠϯϝϞϦKVS্ͷσʔ
    λΛ෮چͤ͞Δ
    12

    View Slide

  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)

    View Slide

  14. ΩʔόϦϡʔܗࣜΛલఏͱͨ࣌͠ܥྻσʔλߏ଄
    14
    • (1) KVSͰ͸ൣғݕࡧ͕Ͱ͖ͳ͍࣮૷͕͋Δ
    • λΠϜελϯϓΛղ૾౓ͷഒ਺ʹἧ͑ͯॻ͖ࠐΈ(ΞϥΠϯϝϯτ)
    • (2) KVS΁ͷࢀরճ਺͕ଟ͍
    • ҰͭͷΩʔόϦϡʔϖΞʹಉҰܥྻ಺ͷෳ਺ͷσʔλ఺Λ֨ೲ
    • (3) KVSͷΩʔόϦϡʔϖΞαΠζͷ੍ݶΛ௒͑ͯ͠·͏
    • ݻఆ௕ͷλΠϜ΢Οϯυ΢ʹΑΓܥྻΛ෼ׂͯ֨͠ೲ
    • (4) ॻ͖ࠐΈΤϥʔ࣌ͷ࠶ࢼߦ࣌ʹಉ͡σʔλΛॏෳอଘͯ͠͠·͏
    • ࣌ࠁΛΩʔͱͨ͠ϋογϡϚοϓʹΑΓɺ΂͖౳ʹॻ͖ࠐΈ

    View Slide

  15. 15
    (3) λΠϜ΢Οϯυ΢
    (4) ϋογϡϚοϓ
    (1) ΞϥΠϯϝϯτ
    (2) ܥྻ୯ҐͷϖΞ

    View Slide

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

    View Slide

  17. KVSؒͷσʔλҠಈ: Χ΢ϯτख๏
    • TTL͕ͳ͍KVSΛར༻͢Δ৔߹
    • ܥྻ಺ͷσʔλ఺͕֓ͶҰఆִؒͰॻ͖ࠐ·ΕΔ͜ͱʹண໨
    • σʔλ఺ͷॻ͖ࠐΈ࣌ʹɺλΠϜ΢Οϯυ΢಺ͷσʔλ఺͕Ұ
    ఆݸ਺Ҏ্Ͱ͋Ε͹σʔλΛҠಈ
    • Ҡಈʹ͸ɺλΠϜ΢Οϯυ΢಺ͷσʔλ఺ΛಡΈग़͠ɺҠಈઌ
    ͷKVSʹॻ͖ࠐΈɺҠಈݩͷσʔλ఺Λ࡟আ͢Δ
    • ్தͰॻ͖ࠐΈ͕ఀࢭͨ͠ܥྻʹ͍ͭͯ͸ɺఆظతʹશσʔλ
    ΛεΩϟϯ͠ɺҠಈॲཧΛ࣮ࢪ
    17

    View Slide

  18. σʔλߏ଄ͷ֦ு
    • ϦΞϧλΠϜॻ͖ࠐΈ
    • ϝοηʔδϒϩʔΧʔͷߪಡऀΛผ్༻ҙ͠ɺ௥ՃDBMSʹॻ
    ͖ࠐΈ
    • ॻ͖ࠐ·Εͨσʔλ͕֦ு͞ΕͨDBMS্ʹଈ൓ө
    • όονॻ͖ࠐΈ
    • ΠϯϝϞϦKVS͔ΒΦϯσΟεΫKVS΁Ҡಈ͢Δͱ͖ʹɺෳ਺ͷ
    ܥྻ಺σʔλ఺Λ·ͱΊͯ௥ՃDBMSʹॻ͖ࠐΈ
    • ௥ՃDBMS΁ͷॻ͖ࠐΈճ਺Λ࡟ݮ
    18

    View Slide

  19. HeteroTSDBΞʔΩςΫνϟͷ࣮૷
    19
    • AWS্Ͱ࣮૷
    • ҟछࠞ߹KVS؀ڥʹͯ૿Ճ͢Δӡ༻ෛ୲
    ͷ࡟ݮͷͨΊαʔόϨεϓϥοτϑΥʔϜΛར༻
    • ϝϞϦɺSSDɺ࣓ؾσΟεΫͷ3૚ߏ଄

    View Slide

  20. HeteroTSDBΞʔΩςΫνϟ·ͱΊ
    • ΠϯϝϞϦKVSͱΦϯσΟεΫKVSʹΑΔࣗಈ֊૚Խ
    • ࣌ܥྻσʔλߏ଄
    • ΞϥΠϯϝϯτɺλΠϜ΢Οϯυ΢ɺϋογϡϚοϓ
    • KVSؒͷσʔλҠಈ
    • λΠϚʔख๏: ΩʔόϦϡʔϖΞ୯ҐͰฒߦॲཧՄೳ
    • Χ΢ϯτख๏: TTLΛར༻Ͱ͖ͳ͍৔߹ʹར༻
    • σʔλߏ଄ͷ֦ு
    • ϦΞϧλΠϜॻ͖ࠐΈ
    • όονॻ͖ࠐΈ
    20

    View Slide

  21. ࣮ݧͱ࣮؀ڥ΁ͷద༻
    21
    4.

    View Slide

  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࣌ؒ؍࡯͢Δ

    View Slide

  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ʹ࡟ݮͨ͜͠ͱ͕Θ͔Δ
    ॻ͖ࠐΈεϧʔϓοτͷ࣌ؒมԽ

    View Slide

  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ར༻཰ͱϝϞϦ࢖༻ྔ

    View Slide

  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ͷΩϟύγ
    ςΟͷ૿Ճʹରͯ͠εϧʔϓο
    τ͕ઢܗʹεέʔϧ͍ͯ͠Δ
    ͱݴ͑Δ
    ΩϟύγςΟͱ
    ॻ͖ࠐΈεϧʔϓοτ
    ͷؔ܎

    View Slide

  26. Mackerelͷ࣮؀ڥ΁ͷద༻
    • 2017೥7݄͔Β2018೥8݄·Ͱͷ1೥ؒͷՔಇ࣮੷
    • ಉظؒͷো֐݅਺2݅ɺނোճ਺2݅
    • ো֐1: ಛఆͷΠϯϝϞϦKVSͷϊʔυʹॻ͖ࠐΈෛՙ͕ूத͠ɺϝϞ
    Ϧ্ݶʹୡ͠ɺOSʹڧ੍ఀࢭ͞Εɺσʔλফࣦൃੜ
    • ϝοηʔδϒϩʔΧʔ্ͷσʔλΛ࠶ॲཧ͠σʔλ෮چ
    • ো֐2: ಉҰͷϝτϦοΫ໊ͱλΠϜελϯϓΛ΋ͭσʔλ఺͕୹࣌ؒ
    ʹେྔʹॻ͖ࠐ·ΕɺΠϯϝϞϦKVSͷॻ͖ࠐΈαΠζ্ݶʹୡͨ͠
    • ΠϯϝϞϦKVSʹॻ͖ࠐΉલʹॏෳΛഉআ͢Δ͜ͱͰղܾ
    26

    View Slide

  27. Mackerelͷ࣮؀ڥ΁ͷద༻
    • ނোʹ͍ͭͯ͸ɺ͍ͣΕ΋ΠϯϝϞϦKVSͷϊʔυ͕ఀࢭ͠ɺ
    ౰֘ϊʔυ͕Ϋϥελ͔Β֎ΕΔ·ͰͷؒʹΤϥʔ͕ൃੜͨ͠
    • Lambdaؔ਺࣮ߦͷࣗಈ࠶ࢼߦʹΑΓࣗಈͰσʔλ෮چ
    • Ұ෦ͷϝτϦοΫͷॻ͖ࠐΈ͕਺෼஗Ԇ͢ΔʹͱͲ·ͬͨ
    27

    View Slide

  28. ࣮ݧͱ࣮؀ڥ΁ͷద༻ͷ·ͱΊ
    • ॻ͖ࠐΈॲཧޮ཰
    • ΦϯσΟεΫKVS΁ͷॻ͖ࠐΈճ਺Λ1/20ʹ࡟ݮͰ͖ͨ
    • σʔλอଘޮ཰
    • ΠϯϝϞϦKVSͷϝϞϦ࢖༻ྔ͕ຬഋʹͳΔ͜ͱͳ͘ɺσʔλҠಈͰ͖
    ͍ͯΔ͜ͱΛ֬ೝͰ͖ͨ
    • ॻ͖ࠐΈεέʔϧΞ΢τੑ
    • KVSͷΩϟύγςΟ૿Ճʹର͢Δεϧʔϓοτͷઢܗ૿ՃΛ֬ೝͰ͖ͨ
    • ߴՄ༻ੑͱσʔλফࣦ଱ੑ
    • ࣮؀ڥʹద༻͢Δ͜ͱʹΑΓ֬ೝͰ͖ͨ
    28

    View Slide

  29. ·ͱΊ
    29
    5.

    View Slide

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

    View Slide

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

    View Slide