Slide 1

Slide 1 text

ISUCON Նظߨश 2017 ߨٛฤ 2017.08.25 @fujiwara

Slide 2

Slide 2 text

@fujiwara ٕज़෦ github.com/fujiwara sfujiwara.hatenablog.com

Slide 3

Slide 3 text

ISUCON શઓ੷ ISUCON 1 - ༏উ (@songmu @sugyan) ISUCON 2 - ༏উ (@songmu @typester) ! ISUCON 3 - ग़୊ ISUCON 4 - 3Ґ (@acidlemon @handlename) ISUCON 5 - ༏উ (@songmu @sugyan) ISUCON 6 - ४༏উ (@moshisora990 @kasari)

Slide 4

Slide 4 text

ISUCON ͱ͸

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ISUCON = Iikanjini Speed Up CONtest ༩͑ΒΕͨWebΞϓϦέʔγϣϯΛ ͋ΒΏΔखஈΛ΋ͬͯߴ଎Խ͢Δ ίϯςετ ϕϯνϚʔΫ͕࣮ߦ͞ΕɺͦͷείΞ͕ߴ͍νʔϜ͕উར OSͷઃఆมߋɺΞϓϦέʔγϣϯͷॻ͖׵͑ɺͳΜͰ΋OK ϕϯνϚʔΫ͕༗ޮͳείΞΛग़ͨ͠ == ੒ޭ

Slide 7

Slide 7 text

֓೦ਤ

Slide 8

Slide 8 text

ISUCON ͷྺ࢙

Slide 9

Slide 9 text

ISUCON 1,2 - ઌணॱຊબظ ༧બͳ͠ ઌணॱͰਃ͠ࠐΜͩνʔϜ͕ࢀՃͰ͖Δ (20νʔϜ) ISUCON 1 ༏উ৆ۚ10ສԁ ͓୊: blogͷίϝϯτཝ ग़୊: Livedoor1 ISUCON 2 ༏উ৆ۚ30ສԁ ͓୊: νέοτൢചαΠτ ग़୊: NHN Japan1 1 ͲͪΒ΋ݱ LINE

Slide 10

Slide 10 text

ISUCON 3,4 - ༧બϩʔΧϧϕϯνظ ༧બɺֶੜ࿮͕Ͱ͖ͨ ༧બ͸ AWS ্ͷΠϯελϯεΛ֤νʔϜ͕1୆ىಈ ϕϯνϚʔΫ͸Πϯελϯε্ͷϓϩάϥϜ(Go੡όΠφϦ)͕ localhost ʹର࣮ͯ͠ߦ ISUCON 3 ༏উ৆ۚ100ສԁ(Ҏޙಉ͡) ͓୊: Nopaste / ը૾౤ߘSNS ग़୊: ΧϠοΫ ISUCON 4 ͓୊: ͍͢͜Μۜߦ / ಈը޿ࠂ഑৴ ग़୊: Cookpad

Slide 11

Slide 11 text

ISUCON 3,4 ༧બ֓೦ਤ

Slide 12

Slide 12 text

ISUCON 5,6 - ༧બϦϞʔτϕϯνظ ༧બ͸ GCP(5) Azure(6) ্ͷΠϯελϯεΛ֤͕ࣗىಈ ϕϯνϚʔΫ͸ӡӦ͕༻ҙͨ͠Πϯελϯε͕ ֤ࣗͷΠϯελϯεʹର࣮ͯ͠ߦ ISUCON 5 ͓୊: SNS(mixiతͳ) / ϚΠΫϩαʔϏε ग़୊: Treasure Data ISUCON 6 ͓୊: ΩʔϫʔυࣗಈϦϯΫ / ͓ֆ͔͖ڞ༗αΠτ ग़୊: ͸ͯͳ(༧બ) pixiv(ຊબ)

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Ұൠ࿮ͷ༧બ௨աഒ཰͸15ഒҎ্ (16/267) ֶੜ࿮͸5ഒ (10/50) ຊબʹग़৔Ͱ͖Ε͹৆ۚ100ສԁ΋ເͰ͸ͳ͍ʂ

Slide 15

Slide 15 text

ISUCON ࢀՃऀͷօ͞Μ(Ұൠ࿮) Webܥاۀʹ͓ۈΊ (͕ଟ͍) ೔ࠒ͔ΒڊେͳτϥϑΟοΫΛࡹ͍͍ͯΔ (ਓ΋͍Δ) ஶ໊ OSS ͷίϛολͱ͔ (كʹ͍Δ) νʔϜ͸৬৔Ͱ૊ΜͩΓɺ༑ਓͰ૊ΜͩΓ ΠϯϑϥدΓͷਓ͕ଟ͍ɺͱ͍͏͜ͱ΋ͳ͍

Slide 16

Slide 16 text

ISUCON ͸૯߹֨ಆٕ OSɺϛυϧ΢ΣΞͷνϡʔχϯάͷΈͰ͸উͯͳ͍(ઈରʹ) ڝٕதͷ୹࣌ؒʹΞϓϦέʔγϣϯΛॻ͖׵͑ΔεΩϧ DB ͷ஌ࣝ ޮ཰ͷΑ͍ΞʔΩςΫνϟͷ஌ࣝ ϘτϧωοΫΛత֬ʹൃݟ͢Δೳྗ ຊબͰ͸ෳ਺୆ߏ੒ɺσϓϩΠ΋

Slide 17

Slide 17 text

͓͢͢Ίͷϝϯόʔߏ੒ OS΍ϛυϧ΢ΣΞʹڧ͍ਓ: 1໊ ΞϓϦέʔγϣϯʹڧ͍ਓ: 2໊ ϘτϧωοΫͷൃݟɺత֬ͳઃఆɺϞχλϦϯά͸ඞཁ ࣌ؒ഑෼ͱͯ͠଍Γͳ͍ͷ͸ΞϓϦέʔγϣϯͷॻ͖׵͑

Slide 18

Slide 18 text

ISUCON Ͱ΍Δ͜ͱ = ύϑΥʔϚϯενϡʔχϯά

Slide 19

Slide 19 text

ύϑΥʔϚϯενϡʔχϯά ISUCON ʹ͓͚ΔύϑΥʔϚϯε == ॲཧͨ͠HTTPϦΫΤετ਺ (جຊ) 2 Ұఆ࣌ؒ಺ʹͲΕ͚ͩଟ͘ͷHTTPϨεϙϯεΛฦͤΔ͔ 1ϦΫΤετ౰ͨΓͷॲཧ࣌ؒΛ୹͘͢Δ ฒߦͰଟ਺ͷϦΫΤετΛॲཧ͢Δ 2 είΞͷܭࢉʹ͍ͭͯৄࡉ͸ϨΪϡϨʔγϣϯʹهࡌ͋Γ

Slide 20

Slide 20 text

WebΞϓϦέʔγϣϯͷ֓೦ਤ ֤ཁૉͷॲཧΛ͍͔ʹগͳ͘͢Δ͔ ྫ: ੩తϑΝΠϧ͸WebαʔόͰ഑৴ (AppͰॲཧ͠ͳ͍) App͔ΒStorage΁ͷΫΤϦΛݮΒ ͢ StorageͰDiskΞΫηεΛݮΒ͢ ͦ΋ͦ΋ΫϥΠΞϯτ͔ΒϦΫΤε τͤ͞ͳ͍(Cache-Controlͱ͔)

Slide 21

Slide 21 text

શϓϩάϥϚʔ͕஌Δ΂͖ϨΠςϯγʔ਺3 nano sec L1Ωϟογϡࢀর 0.5 ෼ذ༧ଌࣦഊ 5 L2Ωϟογϡࢀর 7 MutexͷϩοΫͱΞϯϩοΫ 25 ϝΠϯϝϞϦʔࢀর 100 Zippy[Snappy]ʹΑΔ1KBͷѹॖ 3,000 1GbpsωοτϫʔΫӽ͠ʹ2KBΛૹ৴ 20,000 ϝϞϦʔ͔Β࿈ଓͨ͠1MBͷྖҬͷಡΈग़͠ 250,000 ಉҰσʔληϯλʔ಺ʹ͓͚Δϥ΢ϯυτϦοϓ 500,000 0.5 msec σΟεΫγʔΫ 10,000,000 10 msec σΟεΫ͔Β࿈ଓͨ͠1MBͷྖҬͷಡΈग़͠ 20,000,000 20 msec ύέοτΛΧϦϑΥϧχΞ→Φϥϯμ→ΧϦϑΥ ϧχΞͱૹΔ 150,000,000 150 msec 3 http://norvig.com/21-days.html#answers

Slide 22

Slide 22 text

ͨͱ͑͹ TCP ͷ 3way handshake ઀ଓཱ֬·Ͱʹ 0.5ms x 1.5ճ = 0.75ms

Slide 23

Slide 23 text

ฒྻ౓Λ্͛ͯϨΠςϯγΛӅṭ͢Δ redis-benchmark -h $redis_server -c $c -t get

Slide 24

Slide 24 text

ͨͱ͑͹ 1 HTTP ϦΫΤετΛ10msͰฦ٫͢Δ 1ճ͋ͨΓ ճ਺ ߹ܭ LL ͷ HTTP αʔόͰ Hello World 0.5ms 1 0.5ms ηογϣϯ؅ཧͷͨΊʹ Redis ʹΫΤϦ 0.5ms 1 0.5ms DBʹରͯ͠5ճΫΤϦΛൃߦ 1ms 5 5ms ςϯϓϨʔτΛϨϯμϦϯ ά 3ms 1 3ms 10 ms/req = 100 req/sec (1ฒྻ) ͪͳΈʹ ISUCON 1 ͷ༏উείΞ͸ 1500 req/sec ૬౰

Slide 25

Slide 25 text

۩ମతʹͲ͏͢Δ?

Slide 26

Slide 26 text

۩ମతʹͲ͏͢Δ? 1. ϘτϧωοΫΛݟ͚ͭΔ 2. ղফͯ͠ܭଌ͢Δ 3. (1,2Λ܁Γฦ͠) 4. ༏উ

Slide 27

Slide 27 text

ϘτϧωοΫ Ұ൪ࡉ͍(஗͍)ͱ͜ΖΛվળ͠ͳ͍ͱҙຯ͕ͳ͍

Slide 28

Slide 28 text

ଓ͖͸ ࣮ફฤ Ͱ

Slide 29

Slide 29 text

TCP 3way handshake ը૾ग़య https://commons.wikimedia.org/wiki/File:Tcp_normal.svg