Slide 1

Slide 1 text

΢ΣϒΞϓϦέʔγϣϯ ϑϨʔϜϫʔΫͷ޲͜͏ଆ ͸ͯͳΠϯλʔϯ Πϯϑϥߨٛ dΠϯλʔϯͷ͜Ζʹ஌Γ͔ͨͬͨΠϯϑϥͷ࿩d

Slide 2

Slide 2 text

JEZ@VVLJ γεςϜϓϥοτϑΥʔϜ෦ ͸ͯͳΠϯλʔϯ

Slide 3

Slide 3 text

ߨٛͷ͸͡Ίʹ wޙ൒աఔʹ޲͚ͯɺ͸ͯͳͷຊ൪γεςϜʹ͍ͭ ͯཧղΛਂΊ͍ͯͩ͘͞ w͸ͯͳʹґଘ͠ͳ͍ͳΔ΂͘Ұൠతͳ࿩Λ৺͕ ͚͍ͯ·͢ w਺ࣈҎ֎͸ެ։ͯ͠Α͍಺༰Ͱ͢ w՝୊͸͋Γ·ͤΜɻؾܰʹௌ͍͍ͯͩ͘͞

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

΢ΣϒΞϓϦέʔγϣϯ ϑϨʔϜϫʔΫ

Slide 6

Slide 6 text

63-3PVUFS $POUSPMMFS .PEFM .Z42- #SPXTFS HTTP Request HTTP Response 8"'Ͱίʔυॻ͍ͯΔͱ͖ͷΠϝʔδ

Slide 7

Slide 7 text

΢ΣϒΞϓϦέʔγϣϯ ͷϒϥοΫϘοΫε

Slide 8

Slide 8 text

ʮϞσϧͷ෦෼͸͍͢͝Πϯϑϥ͕ ͦͷઌʹ͋Δʯ

Slide 9

Slide 9 text

͍͢͝Πϯϑϥ

Slide 10

Slide 10 text

͸ͯͳϒϩά

Slide 11

Slide 11 text

.BDLFSFM

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

8"' Πϯϑϥ

Slide 14

Slide 14 text

ΈΜͳ͕ݺΜͰΔ Πϯϑϥͬͯ

Slide 15

Slide 15 text

ΞϓϦέʔγϣϯΤϯδχΞ ͔ΒΈͨΠϯϑϥ wΞϓϦέʔγϣϯࣗମ͸ͲͷΑ͏ʹͯ͠ಈ͍͍ͯΔͷ͔ w8FCαʔό 1SFGPSL σʔλϕʔε઀ଓͷҡ࣋ wΞϓϦέʔγϣϯ͸ͲͷΑ͏ʹͯ͠σʔλϕʔεʹΞΫ ηε͍ͯ͠Δͷ͔ wεϨʔϒ γϟʔσΟϯά wϦΫΤετ͸ΞϓϦέʔγϣϯʹͲͷΑ͏ʹͯ͠౸ୡ͢ Δͷ͔ wϦόʔεϓϩΩγ

Slide 16

Slide 16 text

8FCγεςϜͷجຊ

Slide 17

Slide 17 text

8FCγεςϜͷجຊ w)551ϦΫΤετΛड͚ͯϨεϙϯεΛฦ͢ wෳ਺ͷϢʔβ͕ಉ࣌ʹϦΫΤετΛ౤͛͏Δ wϨΠςϯγͱεϧʔϓοτΛಉ࣌ʹୡ੒͢Δ ඞཁ͕͋Δ wͲΜͳʹෳࡶͳ8FCγεςϜͰ΋جຊ͸ಉ͡

Slide 18

Slide 18 text

ΞϓϦέʔγϣϯ͸Ͳͷ Α͏ʹಈ͍͍ͯΔͷ͔

Slide 19

Slide 19 text

ΞϓϦέʔγϣϯαʔό w8FCαʔϏεʹ͓͍ͯγεςϜͷத৺ͱͳΔαʔό wΞϓϦέʔγϣϯϩδοΫ͸͜͜Ͱ࣮ߦ͞ΕΔ wҎԼͷॲཧΛ࣮ߦ͢Δ8FCαʔό wϦΫΤετड৴ w)551ϦΫΤετͷղੳ wσʔλϕʔεΞΫηεΛؚΉΞϓϦέʔγϣϯϩδοΫͷ ࣮ߦ w)551Ϩεϙϯεͷߏங wϨεϙϯεૹ৴

Slide 20

Slide 20 text

ΞϓϦέʔγϣϯαʔόͱݴޠ w ੲ͸ωοτϫʔΫ΍)551ͷϔομॲཧ͚ͩ "QBDIF $ݴޠ Ͱ΍Β͍ͤͯͨ w $(*ͱ͔NPE@IPHFͱ͔ͷಾٕज़Ͱແཧ΍Γ$ ݴޠͷ8FCαʔόͷ্ʹ1FSMͳͲΛಈ͔͢ w ࠓͰ͸ΞϓϦέʔγϣϯίʔυͱಉ͡ݴޠͷ8FCαʔ όΛ࢖͏ w 1FSMͳΒ4UBSMFU1MBDL 4DBMBͳΒ+FUUZͳͲ

Slide 21

Slide 21 text

Ͳ͏΍ͬͯωοτϫʔΫ௨৴ ͢Δͷ͔ w ωοτϫʔΫ௨৴͸جຊతʹ04Χʔωϧ͕΍Δ w -JOVYͷ৔߹γεςϜίʔϧΛ࢖ͬͯ04Χʔωϧͷ ػೳΛωοτϫʔΫ௨৴ػೳΛݺͼग़͢ w TPDLFU CJOE MJTUFO BDDFQU w جຊ͸ແݶϧʔϓͭͭ͠ɺΧʔωϧ͔Βσʔλड৴ Πϕϯτ͕͖ͨΒϦΫΤετॲཧʹҠΔ

Slide 22

Slide 22 text

ΫϥΠΞϯτ αʔό socket(2) bind(2) listen(2) accept(2) connect(2) write(2) (ϒϩοΫ͢Δ) socket(2) “GET / HTTP1.1\nHost: TCP 3-way handshake “HTTP/1.1 200 OK\n…” read(2) (accept͔Β໭Δ) read(2) (ϒϩοΫ͢Δ) (ϒϩοΫ͢Δ) (ϒϩοΫ͢Δ) (read͔Β໭Δ) ϦΫΤετॲཧ write(2) (read͔Β໭Δ) read(2) (ϒϩοΫ͢Δ) close(2) লུ

Slide 23

Slide 23 text

8FCαʔόΛෳ਺ͷ ΫϥΠΞϯτʹରԠ͢Δ

Slide 24

Slide 24 text

worker! process worker! process worker! process worker! process parent! process Client accept loop accept loop accept loop accept loop fork fork fork fork Client Client Client 1SFGPSLํࣜ

Slide 25

Slide 25 text

thread thread thread thread Client accept loop accept loop accept loop accept loop Client Client Client εϨουϓʔϧํࣜ Process

Slide 26

Slide 26 text

Client Client Client Client main! thread select loop data! base non-blocking I/O Πϕϯτۦಈํࣜ

Slide 27

Slide 27 text

w 1FSM͸1SFGPSL 4DBMB +BWB ͸εϨουϓʔϧ ͕ଟ͍ w Ϛϧνϓϩηε 1SFGPSL ͔ϚϧνεϨου εϨο υϓʔϧ ͔Ͱάϩʔόϧม਺ͷѻ͍͕͔ΘΔ w ϚϧνεϨουͰάϩʔόϧม਺ͷϩοΫڝ߹ͯ͠ ٧·ΔͳͲ w ٯʹϚϧνϓϩηεͳΒෳ਺ͷίϯςΩετ͔Βڞ ௨ͷΦϒδΣΫτΛࢀর͢Δ͜ͱ͸͋·Γͳ͍ ʢϑΝΠϧͳͲ04ͷϦιʔε͸ผʣ

Slide 28

Slide 28 text

ΞϓϦέʔγϣϯ͸ ͲͷΑ͏ʹͯ͠σʔλϕʔε ʹΞΫηε͍ͯ͠Δͷ͔

Slide 29

Slide 29 text

σʔλϕʔεͱͷ઀ଓ

Slide 30

Slide 30 text

͍ͭ઀ଓ։࢝͢Δͷ͔ w 1FSM w %#*DPOOFDUΛݺΜͩͱ͖ w େ఍ɺ࣮ࡍʹϦΫΤετ͕ͱΜͰ͖ͯσʔλϕʔ εΞΫηε͢Δஈ֊Ͱ઀ଓ͢Δ w 4DBMB w ΞϓϦέʔγϣϯͷىಈ࣌ʹ઀ଓࡁΈͷ%#Φϒ δΣΫτ͕࡞੒͞ΕΔ

Slide 31

Slide 31 text

઀ଓͷҡ࣋ʁ w σʔλϕʔεͷ઀ଓίετ w 5$1ͷXBZϋϯυγΣʔΫ w %#૚ͷϋϯυγΣʔΫ w %#૚ͷೝূ w %#ଆͷ઀ଓ༻ϓϩηεεϨουͷੜ੒ίετ w ઀ଓ਺͕ଟ͍ͱ%#αʔόͷෛՙ͕ߴ͍ w ઀ଓࡁΈͷιέοτΛ࢖͍·Θ͍ͨ͠

Slide 32

Slide 32 text

઀ଓͷӬଓԽ w ౎౓઀ଓ w ϦΫΤετॲཧதͷΈ઀ଓΛҡ࣋͢Δ w ECIΦϒδΣΫτΛίϯςΩετΦϒδΣΫτͳ ͲʹΩϟογϡ͢Ε͹Α͍ w ৗ࣌઀ଓ w ECIΦϒδΣΫτΛάϩʔόϧม਺ͳͲʹΩϟο γϡ͢Δ w ίωΫγϣϯϓʔϧΛ࢖͏

Slide 33

Slide 33 text

઀ଓͷӬଓԽͷϋϚΓϙΠϯτ w ઀ଓ͸͞·͟·ͳཁҼͰ్தͰ੾ΕΔ͜ͱ͕͋Δ w %#͕͓ͪͯϑΣΠϧΦʔόͨ͠ w ωοτϫʔΫো֐ w ECIΦϒδΣΫτ͸উखʹ࠶઀ଓͯ͘͠Εͳ͍ w 4DPQF$POUBJOFS%#* %#*Y)BOEMFSΛ ࢖͏ w ϩʔυόϥϯα͔ΒॏΈௐ੔Ͱ%#୆αʔϏεΞ΢ τͰ͖ͳ͍ແཧ΍Γ੾Δ

Slide 34

Slide 34 text

8FCαʔϏε૚ߏ੒

Slide 35

Slide 35 text

Proxy App Database request response request response transaction w ϦόʔεϓϩΩγ/HJOY "QBDIF w ΞϓϦέʔγϣϯ1FSM 4DBMB w σʔλϕʔε.Z42- 1PTUHSF42-

Slide 36

Slide 36 text

ͳͥෳ਺ͷαʔόΛ࢖͏ ͷ͔

Slide 37

Slide 37 text

ෳ਺ͷαʔόΛ࢖͏ཧ༝ wγεςϜͷՄ༻ੑͷ୲อ wෛՙ෼ࢄ wૄ݁߹Խ

Slide 38

Slide 38 text

Մ༻ੑͷ୲อ wαʔό͸෺ཧతʹյΕͨΓաෛՙ΍ΦϖϨʔγϣϯϛε Ͱఀࢭ wελϯόΠػʹॲཧΛҾ͖ܧ͙ʢϑΣΠϧΦʔόεΠο νΦʔόʣ͕୅දత wΞΫςΟϒɾελϯόΠؒͰૄ௨؂ࢹ w૬ख͕མͪͯͨΒࣗ෼͕ΞΫςΟϒʹͳΔ w7*1 Ծ૝*1 Ͱ઀ଓઌΛมߋ͢Δ wϛυϧ΢ΣΞଆͰϞʔυ੾Γସ͑ͳͲ͕ඞཁͳ͜ͱ΋ wLFFQBMJWFE)FBSUCFBUͳͲͷπʔϧ

Slide 39

Slide 39 text

ෛՙ෼ࢄ wϩʔυόϥϯαΛલஈʹஔ͍ͯৼΓ෼͚ wಉ͡໾ׂͷαʔόΛฒ΂Δ wϩʔυόϥϯαʹ͸7*1ͳͲͷΤϯυϙΠϯτ͕ ͍͍ͭͯΔ wΞϓϦέʔγϣϯ͔Β͸ͦ͜Λࢀর͢Δ͚ͩ wઐ༻ͷϩʔυόϥϯα-74 )"1SPYZ wϦόʔεϓϩΩγͰ୅༻͢Δ͜ͱ΋͋Δ w৑௕Խ΋݉Ͷඋ͍͑ͯΔ

Slide 40

Slide 40 text

ૄ݁߹Խ wಉ͡ϗετʹෳ਺ͷϛυϧ΢ΣΞΛಉډͤ͞Δ ͜ͱ΋Ͱ͖Δ w࣮ࡍʹ͸ w໰୊ͷ੾Γ෼͚ͷ͠΍͢͞ wෛՙ෼ࢄ w໾ׂ͕ҟͳΔ͔Βͱ͍ͬͯɺશ෦෼͚ͨ΄͏͕ Α͍Θ͚Ͱ͸ͳ͍ wαʔό਺͕૿͑͗͢Δ৔߹͸ಉډ΋ݕ౼

Slide 41

Slide 41 text

Proxy App Database request response request response transaction w ϦόʔεϓϩΩγ/HJOY "QBDIF w ΞϓϦέʔγϣϯ1FSM 4DBMB w σʔλϕʔε.Z42- 1PTUHSF42-

Slide 42

Slide 42 text

ϦόʔεϓϩΩγ

Slide 43

Slide 43 text

w άϩʔόϧ͔ΒϦΫΤετΛ௚઀ड͚෇͚Δαʔό w ϦΫΤετͷ಺༰ʹ͋Θͤͯ w ޙଓͷαʔόʹϦΫΤετͨ͠Γ w ΞΫηε੍ޚͨ͠Γ w ੩తϑΝΠϧΛฦͨ͠Γ͢Δ w ੍ޚՄೳϙΠϯτΛ૿΍ͯ͠ɺύϑΥʔϚϯε޲্ ͤͨ͞ΓɺγεςϜશମͷӡ༻ޮ཰Λ্͛Δ Proxy App Database request response request response transaction

Slide 44

Slide 44 text

Proxy bot༻app request response user༻app UserAgent: ~Googlebot w CPU༻ͱVTFS༻Λ6"Ͱ൑ఆͯ͠ৼΓ෼͚Δ w ো֐ͷӨڹൣғΛݶఆ͍ͨ͠ w CPUͱVTFSͰνϡʔχϯά಺༰Λม͑ͨΓ͢Δ w QSFGPSLܕͰ͸ಛʹޮ͖΍͍͢

Slide 45

Slide 45 text

ΞϓϦέʔγϣϯ

Slide 46

Slide 46 text

w ͍͍ͩͨطग़ w άϩʔόϧͳϦΫΤετ͸ΞϓϦαʔόͰड͚ͯ͸ ͍͚ͳ͍ͱ͍͏Θ͚Ͱ͸ͳ͍ w 4UBSMFU΍+FUUZΑΓɺ/HJOY"QBDIFͷ΄͏͕ ֎ʹެ։͢Δ8FCαʔόͱͯ͠͸҆৺ w มͳϔομ৯Θ͞ΕΔͱ͔ w খ͞ͳαʔϏεͩͱΞϓϦαʔόͱϦόʔεϓϩΩ γΛಉډͤ͞Δ͜ͱ΋͋Δ Proxy App Database request response request response transaction

Slide 47

Slide 47 text

σʔλϕʔε

Slide 48

Slide 48 text

w ͸ͯͳϒϩάن໛ͳΒϚελ̍୆Ͱࡹ͚Δ w ςʔϒϧσʔλͷΑ͘ࢀর͞ΕΔ෦෼͕ϝϞϦʹ৐ͬ ͍ͯͯɺద੾ʹΠϯσοΫεΛ͸Δ w ελϯόΠϚελͷ༻ҙ͠.)"ͷΑ͏ͳ࢓૊ΈͰϑΣ ΠϧΦʔόͤ͞Δ w ϚελͷεέʔϧΞοϓʹݶք͕དྷͨ w SFBE͕ݶքࢀর༻εϨʔϒΛ༻ҙ w XSJUF͕ݶքਫฏ෼ׂ Proxy App Database request response request response transaction

Slide 49

Slide 49 text

slave Load! Balancer master slave slave App ࢀরΫΤϦͷΈ ߋ৽ΫΤϦத৺ SELECT INSERT/UPDATE ࢀর༻εϨʔϒ

Slide 50

Slide 50 text

master A App ਫฏ෼ׂ γϟʔσΟϯά master B master C ϢʔβIDΛ 3Ͱׂͬͨ৒༨͕0 ৒༨͕1 ৒༨͕2

Slide 51

Slide 51 text

ϫϯϥϯΫ্ͷ γεςϜΛߏங͢Δ

Slide 52

Slide 52 text

Ωϟογϡ

Slide 53

Slide 53 text

w $16ͷΩϟογϡϝϞϦ - -ΩϟογϡͳͲʣ w 04ͷϖʔδΩϟογϡ w .Z42- *OOP%# ͷόοϑΝϓʔϧ w ෼ࢄΩϟογϡαʔό NFNDBDIFE w Ωϟογϡػೳ͖ͭϦόʔεϓϩΩγ 7BSOJTI 4RVJE

Slide 54

Slide 54 text

Proxy App Database Squid/ Varnisn memcached

Slide 55

Slide 55 text

ඈͼಓ۩ͱͯ͠ͷ ,74/P42-

Slide 56

Slide 56 text

w 3FEJT NFNDBDIFE .POHP%#ͳͲ w 3%#.4ΑΓ͸΍͍σʔλϕʔε w ετϨʔδͱͯ͠ͷ҆৺ײ͸ྼΔ͔΋͠Εͳ͍ w ো֐࣌ͷσʔλ੔߹ੑ͕ෆ҆ w ϦϨʔγϣφϧϞσϧͷΑ͏ͳཧ࿦తʹཱ֬͞Εͨσʔ λϞσϧͰ͸ͳ͍ w ύϑΥʔϚϯε޲্ͷͨΊʹิॿతʹ࢖༻͢Δ͜ͱ͕ଟ͍ w .BDLFSFMͰ͸࣌ܥྻσʔλϕʔεͱͯ͠(SBQIJUFΛ ࢖͍ͬͯΔ

Slide 57

Slide 57 text

ඇಉظॲཧ

Slide 58

Slide 58 text

w ϝʔϧ΍5XJUUFS΁ͷ౤ߘͳͲ͸ɺ֎෦γεςϜ͕མ ͪͯҾ͖ͣΒΕͯ͠·͏ͷΛ๷͙ w QSFGPSLͷϓϩηεͷେ෦෼͕ো֐தͷ֎෦γε ςϜΛୟ͍͍ͯΔͱɺࣗ෼ͷαʔϏε΋མͪΔ w ֎෦γεςϜʹґଘͨ͠Γɺ࣮ߦ͕஗͍ॲཧΛ͋ͱͰ ࣮ߦ͍ͨ͠ඇಉظॲཧ w ͸ͯͳͰ͸δϣϒΩϡʔΛ࢖͏ w ઐ༻ͷ.Z42-ʹδϣϒΛ౤ೖ w ผαʔόͰಈ͘ϫʔΧʔ͕.Z42-ʹϙʔϦϯά

Slide 59

Slide 59 text

Proxy App db-master workerdb worker db-slave

Slide 60

Slide 60 text

όονॲཧ

Slide 61

Slide 61 text

w ຖேϢʔβʹϝʔϧΛ഑৴͍ͨ͠ɺఆظతʹϗοτΤ ϯτϦΛߋ৽͍ͨ͠ͳͲ w ઐ༻ͷόοναʔόͰDSPOʹεΫϦϓτΛஔ͘ w όονॲཧ͸σʔλϕʔεͷ಺༰Λूܭ͢ΔΑ͏ͳॏ ͍ΫΤϦ͕౤͛ΒΕΔ͜ͱ͕ଟ͍ w όονॲཧ༻ͷ%#εϨʔϒΛ༻ҙͯ͠ɺͦͬͪʹ ޲͚Δ

Slide 62

Slide 62 text

͸ͯͳϒϩά

Slide 63

Slide 63 text

.BDLFSFM

Slide 64

Slide 64 text

ʮࡸ૿΍ͤ͹ʁʯ

Slide 65

Slide 65 text

؆୯ʹ૿΍ͯ͠ղܾͰ͖ΔΑ͏ ͳΞʔΩςΫνϟΛߟ͑Δͷ͕ ͨͷ͍͠

Slide 66

Slide 66 text

ࢀߟจݙ

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

wʮ੒௕͢ΔαʔϏεʯ w IUUQCMPHIBSVLBTBOKQFOUSZ wʮΫϥ΢υͱΦϯϓϨʯ w IUUQCMPHIBSVLBTBOKQFOUSZ

Slide 69

Slide 69 text

·ͱΊ wΞϓϦέʔγϣϯαʔόΛத৺ʹݱ৔ͷαʔό ߏ੒ͱͦͷצͲ͜ΖΛ঺հ wͳͥෳ਺ͷαʔόΛ࢖͏ͷ͔ w8FCαʔϏε૚ߏ੒ 1SPYZ"QQ%# wΩϟογϡɺ/P42-ɺඇಉظॲཧɺόον

Slide 70

Slide 70 text

͍͞͝ʹ wΞϓϦέʔγϣϯΤϯδχΞ͔ΒΦϖ ϨʔγϣϯΤϯδχΞʹస޲͢Δਓ͸ ҙ֎ͱଟ͍ w͢͜͠Ͱ΋8FCͷΠϯϑϥʹڵຯΛ ΋ͬͯ΋Β͑Ε͹ͱࢥ͍·͢