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

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

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

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

15a96795b858c75dd36d7c6e42a93d5a?s=128

shimizu-masaya

November 15, 2018
Tweet

Transcript

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

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


    CZ1BWFM/FEWⒿE ʮటषͪ͘ΌͩΊͰ͔͢ʁʯCZ4BSJOB4PEB ʮແྉνΣΩձʯ
  3. ࠷ۙͷొஃͷ঺հ 4USFBNJOH$POGFSFODF 4)08300.ͷz࠷ۙͷzෛՙରࡦ IUUQTTQFBLFSEFDLDPNPUUPTIPXSPPNGBMTF[VJKJOGBMTFGVIF EVJDF Φʔτεέʔϧͷؒʹ߹Θͳ͍ಥൃతͳෛՙʹରͯ͋͠Β͔͡ΊαʔόʔΛ૿΍ͯ͠଴ͪ ߏ͑Δ ௿஗Ԇ͕ͦ͜·ͰٻΊΒΕͳ͍഑৴Ͱ͸ੵۃతʹ$%/Λར༻

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

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

  6. 4)08300.Ͱར༻͍ͯ͠ΔΩϟογϡػߏ NFNDBDIFEαʔόʔ ϑΝΠϧΩϟογϡ ϓϩηεΩϟογϡ શͯͷαʔόʔɺશͯͷϓϩηεͰڞ௨ͷ஋ΛࢀরͰ͖Δɻ
 ωοτϫʔΫ*0͕͋Δɻ ಉ͡αʔόʔ಺ͷϓϩηεͰ஋Λڞ༗Ͱ͖Δɻ ωοτϫʔΫ*0͸ͳ͍͕ɺϑΝΠϧ*0͕͋Δɻ ࠷଎ɻ
 ϓϩηε͝ͱʹΩϟογϡ͞ΕΔɻ

    ֎෦͔Βͷૢ࡞͕ࠔ೉ɻ 1 1 1 1 1 1 'JMF$BDIF .FNDBDIFE 1SPDFTT$BDIF
  7. ๻ͷߟ͑ΔΦεεϝͷΩϟογϡػߏ࢖͍෼͚ ϙΠϯτ ߋ৽ස౓ɾλΠϛϯάΛߟྀ͢Δ w ϑΝΠϧΩϟογϡ ϓϩηεΩϟογϡ ͷଟஈΩϟογϡ w ͱʹ͔͘.Z42-αʔόʔʹϦΫΤετΛ ૹΒͤͳ͍

    w ߋ৽ͷλΠϛϯάͰద੾ͳέΞΛ w NFNDBDIFE w ϦΫΤετස౓͕௿͍΋ͷ͸Ωϟογϡ͠ ͳ͍ w ద੾ͳFYQJSF࣌ؒ w ߋ৽ͷλΠϛϯάͰDBDIFͷ࡟আPSߋ৽ Ϛελʔσʔλܥ Ϣʔβʔσʔλܥ ଟগͷ஗ԆɺζϨ͕ڐ༰͞ΕΔ৔߹ ஗Ԇ΍ζϨΛڐ༰ͨ͘͠ͳ͍৔߹
  8. NFNDBDIFEͷӡ༻ςΫχοΫ

  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; ྫ ϥΠϒҰཡͷऔಘͳͲ ऴྃࡁΈͷϥΠϒ͕Ϧετʹؚ·ΕΔ৔߹͕͋ΔͷͰͦΕ͸ϑΟϧλͯ͠ϨεϙϯεΛฦ͢
  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); ྫ ϧʔϜ৘ใͷऔಘͳͲ ϧʔϜ໊ͱ͔ߋ৽ͨ͠Βଈ࣌ʹ൓ө͞Εͯ΄ ͍͠
  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); } ਓؾԋऀʹ ϦΫΤετ͕ภΔ
  12. ෳ਺ͷΩϟογϡػߏΛ૊Έ߹Θͤͯར༻ ϙΠϯτ ෳࡶ͞ͱརศੑͷτϨʔυΦϑ 1 1 1 .FNDBDIFE 1SPDFTT$BDIF .Z42- 1

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

  14. ·ͱΊ w 4)08300.Ͱར༻͍ͯ͠ΔΩϟογϡػߏΛ͝঺հ w NFNDBDIFE w ϑΝΠϧΩϟογϡ w ϓϩηεΩϟογϡ w

    ࢖͍ํͷྫΛ4)08300.ͷࣄྫΛަ͑ͯ঺հ w ߋ৽࣌ʹΩϟογϡ࡟আͰ஗ԆΛճආ w ಉ͡σʔλΛෳ਺Ωϟογϡͯ͠ෛՙ෼ࢄ w ଟஈΩϟογϡͷར༻ 4)08300.ɺϥΠϒετϦʔϛ ϯάʹݶΒͣ൚༻తʹ࢖͑Δٕͩͱ ࢥ͏ͷͰɺ͝ࢀߟʹ͍͖ͯͨͩͭ͠ ͭɺ΋ͬͱ͍͍ํ๏͋Ε͹ڭ͑ͯ͘ ͍ͩ͞ʂҰॹʹษڧͤͯͩ͘͞͞ ͍ʂʂ
  15. None
  16. ϥΠϒετϦʔϛϯά 4)08300. ͳΒͰ͸ͷେม͞ w ͍͖ͳΓਓؾ഑৴͕͸͡·Δ w ͍͖ͳΓେ͖ͳऔΓ૊Έ͕ܾ·Δ w ͍͖ͳΓ"1*ϦΫΤετ਺͕εύΠΫ͢Δ ίϯςϯπʹΑΔӨڹ͕େ͖͍

    ߴෛՙͳίϯςϯπͷ৔߹ɺχϡʔεϝσΟΞ ʹऔΓ্͛ΒΕΔ͜ͱ΋ଟʑ͋ΓɺͦΜͳίϯ ςϯπͱ޲͖߹͑Δͷ͸΍Γ͕͍ϙΠϯτɻ ഑৴։࢝લʹʮαʔόʔམͪΔͷͰ͸ʁʯͱ͍ͬ ͨͭͿ΍͖Λݟ͚ͭΔͱzෛ͚ͣݏ͍z΍αʔόʔ Λzࢧ͑ͳ͖Όײz͕ൃಈͯ͠ΑΓ΍ΔؾͰΔɻ 8&#αʔόʔʹؔͯ͠΋഑৴αʔόʔಉ༷ʹ Φʔτεέʔϧ͕ؒʹ߹Θͳ͍ಥൃతͳߴෛՙ ͕ൃੜ͢ΔͷͰɺࣄલ४උɾ৺ߏ͕͑ඞཁ
  17. ऴΘΓ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 4)08300.͸೔ʑ੒௕͍ͯ͠·͢ɻ ͦΜͳαʔϏεͱҰॹʹ੒௕͍ͨ͠ෛ͚ͣݏ͍ ͳΤϯδχΞΛืू͍ͯ͠·͢ʂ