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

SHOWROOMのDB負荷に対するキャッシュ運用のカクカクシカジカ

 SHOWROOMのDB負荷に対するキャッシュ運用のカクカクシカジカ

2018/11/15
ライブストリーミングHack #3 with SHOWROOM
https://mirrativ.connpass.com/event/106330/

shimizu-masaya

November 15, 2018
Tweet

More Decks by shimizu-masaya

Other Decks in Programming

Transcript

  1. 4)08300.ͷ%#ෛՙʹର͢Δ
    Ωϟογϡӡ༻ͷΧΫΧΫγΧδΧ
    4)08300.5FDI4UVEJP
    ࢤਫཧ࠸

    View Slide

  2. ࣗݾ঺հ
    ࢤਫཧ࠸ ͠Έͣ·͞΍

    ུྺ
    ֶੜ࣌୅͸ιϑτ΢ΣΞ޻ֶΛઐ߈
    ೥%F/"ʹ৽ଔೖࣾɺιʔγϟϧήʔϜ΍ΩϡϨʔγϣϯϝσΟΞʹैࣄ
    ೥4)08300.ʹग़޲
    ޷͖ͳݴ༿
    ʮ๻͸δμϯ΍ϥ΢ϧͷΑ͏ͳඒ͠͞͸ͳ͍͔Βɺ͕ͨͩΉ͠ΌΒʹؤுΔ͚ͩ͞ʯ

    CZ1BWFM/FEWⒿE
    ʮటषͪ͘ΌͩΊͰ͔͢ʁʯCZ4BSJOB4PEB
    ʮແྉνΣΩձʯ

    View Slide

  3. ࠷ۙͷొஃͷ঺հ
    4USFBNJOH$POGFSFODF
    4)08300.ͷz࠷ۙͷzෛՙରࡦ
    IUUQTTQFBLFSEFDLDPNPUUPTIPXSPPNGBMTF[VJKJOGBMTFGVIF
    EVJDF
    Φʔτεέʔϧͷؒʹ߹Θͳ͍ಥൃతͳෛՙʹରͯ͋͠Β͔͡ΊαʔόʔΛ૿΍ͯ͠଴ͪ
    ߏ͑Δ
    ௿஗Ԇ͕ͦ͜·ͰٻΊΒΕͳ͍഑৴Ͱ͸ੵۃతʹ$%/Λར༻

    View Slide

  4. %#ෛՙʹର͢Δ
    Ωϟογϡӡ༻ͷΧΫΧΫγΧδΧ

    View Slide

  5. ΧΫΧΫγΧδΧͱ͸
    ๭ंϝʔΧʔͷ$.ΩϟϥΫλʔ
    ๭ΞΠυϧͷָۂ
    ࿩Λলུͨ͠ࡍʹ۩ମతͳ಺༰ͷ୅༻ͱͯ͠༻͍ΒΕΔදݱ
    4)08300.Ͱ͸%#ͷෛՙΛΧΫΧΫγΧδΧͳΩϟογϡͷ࢖͍ํͰରࡦ
    ͍ͯ͠·͢ɻ
    ࠓ೔͸۩ମతͳ಺༰Λ঺հ͠·͢

    View Slide

  6. 4)08300.Ͱར༻͍ͯ͠ΔΩϟογϡػߏ
    NFNDBDIFEαʔόʔ
    ϑΝΠϧΩϟογϡ
    ϓϩηεΩϟογϡ
    શͯͷαʔόʔɺશͯͷϓϩηεͰڞ௨ͷ஋ΛࢀরͰ͖Δɻ

    ωοτϫʔΫ*0͕͋Δɻ
    ಉ͡αʔόʔ಺ͷϓϩηεͰ஋Λڞ༗Ͱ͖Δɻ
    ωοτϫʔΫ*0͸ͳ͍͕ɺϑΝΠϧ*0͕͋Δɻ
    ࠷଎ɻ

    ϓϩηε͝ͱʹΩϟογϡ͞ΕΔɻ
    ֎෦͔Βͷૢ࡞͕ࠔ೉ɻ
    1 1 1 1 1 1
    'JMF$BDIF
    .FNDBDIFE
    1SPDFTT$BDIF

    View Slide

  7. ๻ͷߟ͑ΔΦεεϝͷΩϟογϡػߏ࢖͍෼͚
    ϙΠϯτ
    ߋ৽ස౓ɾλΠϛϯάΛߟྀ͢Δ
    w ϑΝΠϧΩϟογϡϓϩηεΩϟογϡ
    ͷଟஈΩϟογϡ
    w ͱʹ͔͘.Z42-αʔόʔʹϦΫΤετΛ
    ૹΒͤͳ͍
    w ߋ৽ͷλΠϛϯάͰద੾ͳέΞΛ
    w NFNDBDIFE
    w ϦΫΤετස౓͕௿͍΋ͷ͸Ωϟογϡ͠
    ͳ͍
    w ద੾ͳFYQJSF࣌ؒ
    w ߋ৽ͷλΠϛϯάͰDBDIFͷ࡟আPSߋ৽
    Ϛελʔσʔλܥ Ϣʔβʔσʔλܥ
    ଟগͷ஗ԆɺζϨ͕ڐ༰͞ΕΔ৔߹
    ஗Ԇ΍ζϨΛڐ༰ͨ͘͠ͳ͍৔߹

    View Slide

  8. NFNDBDIFEͷӡ༻ςΫχοΫ

    View Slide

  9. Ωϟογϡ͞ΕͯΕ͹ར༻ɺͳ͚Ε͹औಘͯ͠อଘ
    ϙΠϯτ
    ༻్͝ͱʹFYQJSFΛௐ੔͢Δ
    ελϯμʔυͳར༻ํ๏ɻ
    .Z42-ͳͲͷ%#ʹอଘ͞Ε͍ͯΔσʔλͱဃ཭ ஗Ԇ
    ͕ൃੜ͢Δ͜ͱ͕͋Δɻ
    ஗Ԇ͕໰୊ʹͳΒͳ͍Α͏ʹFYQJSFΛௐ੔͢Δ
    my $memd = Cache::Memcached::Fast->new();
    my $value = $memd->get($cache_key);
    unless (defined($value)) {
    $value = _get_value();
    $memd->set($cache_key, $value, 30);
    }
    print $value;

    ϥΠϒҰཡͷऔಘͳͲ
    ऴྃࡁΈͷϥΠϒ͕Ϧετʹؚ·ΕΔ৔߹͕͋ΔͷͰͦΕ͸ϑΟϧλͯ͠ϨεϙϯεΛฦ͢

    View Slide

  10. σʔλ͕ߋ৽͞ΕͨΒΩϟογϡΛ࡟আ PSߋ৽

    ࢖͍ॴ
    ΩϟογϡʹΑΔ஗ԆΛճආ͍ͨ͠৔߹
    Ϣʔβʔͷૢ࡞͕ଈ࣌൓ө͞Εͳ͍69͸ྑ͘ͳ͍ɻ
    NFNDBDIFE͚ͩͰͷอଘ͸شൃϦεΫ͕͋Δ
    σʔλͷߋ৽࣌ʹΩϟογϡͷσʔλΛ࡟আ͢Δ͜ͱͰ࣍ճͷࢀর͕%#ʹ޲͘Α͏ʹ͢Δ
    $teng->update('update table_a set hoge = 2 where id = 1');
    $memd->delete($cache_key);
    # or $memd->set($cache_key, $new_obj, 30);

    ϧʔϜ৘ใͷऔಘͳͲ
    ϧʔϜ໊ͱ͔ߋ৽ͨ͠Βଈ࣌ʹ൓ө͞Εͯ΄
    ͍͠

    View Slide

  11. ಉ͡σʔλΛෳ਺Ωϟογϡͯ͠ෛՙ෼ࢄͰ͖ΔΑ͏ʹ͢Δ
    ࢖͍ॴ
    ಛఆͷLFZ΁ͷΞΫηε͕ूதͯ͠ෛՙ෼ࢄͰ͖͹͍৔߹
    NFNDBDIFEͷϊʔυΛෳ਺༻ҙͯ͠΋ಛఆͷLFZʹϦΫΤετ͕ूத͢Δͱҙਤ௨Γʹ෼ࢄ
    ͞Εͳ͍ͷͰ޻෉͕ඞཁ
    my $cache_key = join(':', ('room', int(rand(3))));
    my $value = $memd->get($cache_key);
    unless (defined($value)) {
    $value = _get_value();
    $memd->set($cache_key, $value, 30);
    }
    $teng->update('update table_a set hoge = 2 where id
    = 1');
    for my $i (0..2) {
    my $cache_key = join(':', ('room', $i));
    $memd->delete($cache_key);
    }
    ਓؾԋऀʹ
    ϦΫΤετ͕ภΔ

    View Slide

  12. ෳ਺ͷΩϟογϡػߏΛ૊Έ߹Θͤͯར༻
    ϙΠϯτ
    ෳࡶ͞ͱརศੑͷτϨʔυΦϑ
    1 1 1
    .FNDBDIFE
    1SPDFTT$BDIF
    .Z42-

    1 1 1

    1 1 1
    ϓϩηεΩϟογϡ͚ͩͷ৔
    ߹ɺϓϩηεͷ਺͚ͩ.Z42-
    ʹϦΫΤετ͕͘Δ
    NFNDBDIFE΋ෛՙʹΑͬ
    ͯμ΢ϯ͢Δ͜ͱ͕͋Δ
    ଟஈΩϟογϡͷ֤૚ͰϦΫ
    ΤετΛϑΟϧλ͠ɺωοτ
    ϫʔΫ*0ͳͲ΋ܰݮ͢Δ
    Ωϟογϡ͕ෳ਺ͷ૚ʹ
    อଘ͞ΕΔͷͰɺҰ੪ߋ
    ৽ɺ࡟আ͸ۃΊͯࠔ೉ɻ
    ΩϟογϡΩʔΛมߋ͠
    ࣮࣭ͯϦηοτ͕ݱ࣮త

    View Slide

  13. ·ͱΊ

    View Slide

  14. ·ͱΊ
    w 4)08300.Ͱར༻͍ͯ͠ΔΩϟογϡػߏΛ͝঺հ
    w NFNDBDIFE
    w ϑΝΠϧΩϟογϡ
    w ϓϩηεΩϟογϡ
    w ࢖͍ํͷྫΛ4)08300.ͷࣄྫΛަ͑ͯ঺հ
    w ߋ৽࣌ʹΩϟογϡ࡟আͰ஗ԆΛճආ
    w ಉ͡σʔλΛෳ਺Ωϟογϡͯ͠ෛՙ෼ࢄ
    w ଟஈΩϟογϡͷར༻
    4)08300.ɺϥΠϒετϦʔϛ
    ϯάʹݶΒͣ൚༻తʹ࢖͑Δٕͩͱ
    ࢥ͏ͷͰɺ͝ࢀߟʹ͍͖ͯͨͩͭ͠
    ͭɺ΋ͬͱ͍͍ํ๏͋Ε͹ڭ͑ͯ͘
    ͍ͩ͞ʂҰॹʹษڧͤͯͩ͘͞͞
    ͍ʂʂ

    View Slide

  15. View Slide

  16. ϥΠϒετϦʔϛϯά 4)08300.
    ͳΒͰ͸ͷେม͞
    w ͍͖ͳΓਓؾ഑৴͕͸͡·Δ
    w ͍͖ͳΓେ͖ͳऔΓ૊Έ͕ܾ·Δ
    w ͍͖ͳΓ"1*ϦΫΤετ਺͕εύΠΫ͢Δ
    ίϯςϯπʹΑΔӨڹ͕େ͖͍
    ߴෛՙͳίϯςϯπͷ৔߹ɺχϡʔεϝσΟΞ
    ʹऔΓ্͛ΒΕΔ͜ͱ΋ଟʑ͋ΓɺͦΜͳίϯ
    ςϯπͱ޲͖߹͑Δͷ͸΍Γ͕͍ϙΠϯτɻ
    ഑৴։࢝લʹʮαʔόʔམͪΔͷͰ͸ʁʯͱ͍ͬ
    ͨͭͿ΍͖Λݟ͚ͭΔͱzෛ͚ͣݏ͍z΍αʔόʔ
    Λzࢧ͑ͳ͖Όײz͕ൃಈͯ͠ΑΓ΍ΔؾͰΔɻ
    8αʔόʔʹؔͯ͠΋഑৴αʔόʔಉ༷ʹ
    Φʔτεέʔϧ͕ؒʹ߹Θͳ͍ಥൃతͳߴෛՙ
    ͕ൃੜ͢ΔͷͰɺࣄલ४උɾ৺ߏ͕͑ඞཁ

    View Slide

  17. ऴΘΓ
    ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
    4)08300.͸೔ʑ੒௕͍ͯ͠·͢ɻ
    ͦΜͳαʔϏεͱҰॹʹ੒௕͍ͨ͠ෛ͚ͣݏ͍
    ͳΤϯδχΞΛืू͍ͯ͠·͢ʂ

    View Slide