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

200万ドメインを超えるレンタルサーバのコンテンツキャッシュ機能の裏側/2_million_more_than_the_domain_the_back_of_the_rental_server_content_cache

 200万ドメインを超えるレンタルサーバのコンテンツキャッシュ機能の裏側/2_million_more_than_the_domain_the_back_of_the_rental_server_content_cache

July Tech Festa 2018 (https://2018.techfesta.jp/)

Takuma Kume

July 29, 2018
Tweet

More Decks by Takuma Kume

Other Decks in Technology

Transcript

  1. !UBLVNBLVNF(.01FQBCP *OD
    +VMZ5FDI'FTUB
    ສυϝΠϯΛ௒͑ΔϨϯλϧαʔόͷ
    ίϯςϯπΩϟογϡػೳͷཪଆ

    View Slide

  2. (.0ϖύϘϗεςΟϯάࣄۀ෦
    ΠϯϑϥΤϯδχΞ
    ٱถ୓അ!UBLVNBLVNF

    View Slide

  3. View Slide

  4. ֹ݄ԁ͔Βར༻Ͱ͖Δʂ

    View Slide

  5. ֹ݄ԁ͔Βར༻Ͱ͖Δʂ
    ඵؒ໿ສઍϦΫΤετΛॲཧʂ

    View Slide

  6. ֹ݄ԁ͔Βར༻Ͱ͖Δʂ
    ສαΠτҎ্ӡ༻தʂ
    ඵؒ໿ສઍϦΫΤετΛॲཧʂ

    View Slide

  7. View Slide

  8. ίϯςϯπΩϟογϡػೳ
    3FWFSTF1SPYZ
    84FSWFS
    ௨ৗ

    View Slide

  9. ίϯςϯπΩϟογϡػೳ
    3FWFSTF1SPYZ
    84FSWFS
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    ίϯςϯπΩϟογϡ͋Γ

    View Slide

  10. ίϯςϯπΩϟογϡػೳ
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    ίϯςϯπΩϟογϡ͋Γ
    84FSWFSͷલஈͰΩϟογϡͯ͠
    ߴ଎ʹԠ౴͢Δɻ

    View Slide

  11. ίϯςϯπΩϟογϡػೳ
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    ίϯςϯπΩϟογϡ͋Γ
    OHJOY
    IUUQE
    ύϑΥʔϚϯεͷߴ͍OHJOYͰϦΫΤετ
    Λॲཧ͢Δɻ
    84FSWFSͷલஈͰΩϟογϡͯ͠
    ߴ଎ʹԠ౴͢Δɻ

    View Slide

  12. ίϯςϯπΩϟογϡػೳ
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    ίϯςϯπΩϟογϡ͋Γ
    OHJOY
    IUUQE
    ύϑΥʔϚϯεͷߴ͍OHJOYͰϦΫΤετ
    Λॲཧ͢Δɻ
    1)1౳ͷॲཧͰߴෛՙʹͳΓ΍͍͢
    8αʔόͷෛՙ௿ݮ
    84FSWFSͷલஈͰΩϟογϡͯ͠
    ߴ଎ʹԠ౴͢Δɻ

    View Slide

  13. ฒྻສϦΫΤετ
    #FODI.BSLFS "QBDIF#FODI

    3FWFSTF1SPYZ
    84FSWFS
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    8PSE1SFTTαΠτ 8PSE1SFTTαΠτ

    View Slide

  14. 3FWFSTF1SPYZ
    84FSWFS
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    8PSE1SFTTαΠτ 8PSE1SFTTαΠτ
    ύϑΥʔϚϯεഒʂ

    View Slide

  15. 3FWFSTF1SPYZ
    84FSWFS
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    84FSWFS
    Ωϟογϡ
    8PSE1SFTTαΠτ 8PSE1SFTTαΠτ
    ύϑΥʔϚϯεഒʂ
    ແྉఏڙ

    View Slide

  16. ͳͥ࡞ͬͨͷ͔ʁ

    View Slide

  17. ࠃ಺࠷଎
    Ϩϯαό
    ࠷଎

    View Slide

  18. ੈͷதʹ͸ଟ͘ͷ
    $%/ࣄۀऀ͕ଘࡏ͢Δ
    ίϯςϯπΩϟογϡͱ͍͑͹$%/

    View Slide

  19. ϩϦϙοϓʂͰ֎෦$%/αʔϏε࢖͏
    *OUFSOFU
    3FWFSTF1SPYZ $BDIF4FSWFS
    84FSWFS
    $%/ࣄۀऀ%$
    ΞΫηε
    ϩϦϙοϓʂ

    View Slide

  20. *OUFSOFU
    3FWFSTF1SPYZ $BDIF4FSWFS
    84FSWFS
    $%/ࣄۀऀ%$
    ΞΫηε
    ΦϦδϯͷαʔόʹΞΫηε
    Ωϟογϡର৅֎ͷίϯςϯπ
    Ωϟογϡظݶ੾Ε
    ϩϦϙοϓʂ
    ϩϦϙοϓʂͰ֎෦$%/αʔϏε࢖͏

    View Slide

  21. *OUFSOFU
    3FWFSTF1SPYZ $BDIF4FSWFS
    84FSWFS
    $%/ࣄۀऀ%$
    ΞΫηε
    ϩϦϙοϓʂ
    ΠϯλʔωοτΛߦ͖དྷ͢Δඞཁ͕͋Δ
    ϩϦϙοϓʂͰ֎෦$%/αʔϏε࢖͏

    View Slide

  22. ίϯςϯπΩϟογϡػೳͷ৔߹
    *OUFSOFU
    3FWFSTF1SPYZ $BDIF4FSWFS
    84FSWFS
    ΞΫηε
    ϩϦϙοϓʂ

    View Slide

  23. ίϯςϯπΩϟογϡػೳͷ৔߹
    *OUFSOFU
    3FWFSTF1SPYZ $BDIF4FSWFS
    84FSWFS
    ΞΫηε
    ໢಺ߴ଎
    ϩϦϙοϓʂ

    View Slide

  24. $%/͸োน͕ߴ͍

    View Slide

  25. $%/͸োน͕ߴ͍
    υϝΠϯΛ$%/ʹ޲͚ΔͨΊͷ%/4ͷઃఆ
    ͦ΋ͦ΋%/4ͱ͸ʁ
    $%/͸ػೳ͕ଟ͘ઃఆ͕ෳࡶ
    ඇΤϯδχΞͷํʹͱͬͯ͸೉͍͠
    αʔϏεʹΑͬͯ͸ར༻ྉ͕ۚൃੜ͢Δ
    ϩϦϙοϓʂ͸ΤϯδχΞҎ֎ͷํʑ͔Β΋
    ଟ͘͝ར༻௖͍͍ͯΔ

    View Slide

  26. ίϯςϯπΩϟογϡػೳ͸ʁ

    View Slide

  27. View Slide

  28. Άͪͬ

    View Slide

  29. Άͪͬ
    ଟػೳΑΓ؆୯Λ༏ઌ

    View Slide

  30. ͜͜·Ͱͷ͓͞Β͍
    ίϯςϯπΩϟογϡػೳΛϦϦʔε
    ࠃ಺࠷଎ϨϯαόΛ໨ࢦ͢ʂ
    ֎෦$%/Λซ༻͢ΔΑΓɺ໢಺ંฦ͠
    ͷ௨৴Ͱ׬݁͢Δɻ
    ୭Ͱ΋؆୯ʹઃఆͰ͖Δʂ
    $%/͕೉͍͠ͱײ͡Δ͓٬༷Ͱ΋؆୯
    ʹઃఆ͕Մೳɻ

    View Slide

  31. ͜͜·Ͱ໘ന͘ͳ͍Ͷʁ

    View Slide

  32. ຊ೔͸
    େن໛ϗεςΟϯάͳΒͰ͸ͷ
    ίϯςϯπΩϟογϡػೳΛ
    ࢧ͑ΔΠϯϑϥٕज़ʹ͍ͭͯ
    ͓࿩͠·͢ʂ

    View Slide

  33. ઃܭ
    લఏ
    ࣮૷
    ·ͱΊ
    ຊ೔ͷྲྀΕ
    ίϯςϯπΩϟογϡͷ֓ཁɾ։ൃܦҢ
    ࠓίί
    ίϯςϯπΩϟογϡͷػೳͱΠϯϑϥʹٻΊͨ͜ͱ

    View Slide

  34. ઃܭ
    લఏ ࣮૷ ·ͱΊ
    ίϯςϯπΩϟογϡͷػೳͱ
    ΠϯϑϥʹٻΊͨ͜ͱ

    View Slide

  35. ΩϟογϡϞʔυ

    View Slide

  36. ΩϟογϡϞʔυ
    81Ωϟογϡػೳ
    ੩తΩϟογϡػೳ

    View Slide

  37. 81Ωϟογϡػೳ
    8PSE1SFTT༻ʹ࠷దԽͨ͠Ωϟογϡػೳ
    ϩϦϙοϓʂͷ͓٬༷ͷଟ͘͸8PSE1SFTTΛ
    ར༻͍ͯ͠Δ
    ੩తΩϟογϡػೳ
    ը૾΍+4 $44ͳͲͷ੩తίϯςϯπΛର৅ʹ
    ͨ͠Ωϟογϡػೳ
    8PSE1SFTTҎ֎Λར༻͍ͯ͠Δํ޲͚
    ҆ఆͨ͠αΠτදࣔʹد༩
    ΩϟογϡϞʔυ

    View Slide

  38. ͢΂ͯͷίϯςϯπΛΩϟογϡͨ͠৔߹ɿ
    8PSE1SFTTͷϩάΠϯޙͷ؅ཧը໘͕Ωϟο
    γϡ͞Εͨ৔߹ʹҙਤ͠ͳ͍৘ใ͕࿙ΕΔ
    ಠࣗձһ੍8ΞϓϦέʔγϣϯͰɺผͷ
    ձһͷϖʔδ͕ݟ͑ͯ͠·͏
    ϚωʔδυͳΩϟογϡػೳΛఏڙ
    ΩϟογϡϞʔυ
    ͳͥΩϟογϡϞʔυΛ෼͚Δඞཁ͕͋Δʁ

    View Slide

  39. υϝΠϯͷઃఆʹԠͨ͡
    ػೳͷϋϯυϦϯά

    View Slide

  40. طଘͷߏ੒
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ


    View Slide

  41. طଘͷߏ੒
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ


    ໿ສαΠτ

    View Slide

  42. υϝΠϯͷઃఆʹԠͯ͡ϓϩΩγઌΛมߋ͍ͨ͠
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    PS
    ίϯςϯπΩϟογϡػೳ͸
    0/ʁ0''ʁ

    View Slide

  43. 3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    PS
    ΩϟογϡͷϞʔυ͸
    81Ωϟογϡʁ
    ੩తΩϟογϡʁ

    υϝΠϯͷઃఆʹԠͯ͡ৼΔ෣͍Λ੍ޚ͍ͨ͠

    View Slide

  44. εέʔϥϏϦςΟ

    View Slide

  45. εέʔϥϏϦςΟ
    αʔόΛ௥Ճ͚ͨͩ͠Ͱউखʹػೳ͕εέʔϧ
    ͢ΔΠϯϑϥΞʔΩςΫνϟʹ͍ͨ͠
    $BDIF4FSWFS $BDIF4FSWFS $BDIF4FSWFS

    3FWFSTF1SPYZ

    View Slide

  46. ߴՄ༻ੑ

    View Slide

  47. ߴՄ༻ੑ
    αʔό͸յΕΔ
    յΕͯ΋શࣗಈͰαʔϏεͷঢ়ଶ͕෮چ͢Δ
    ΠϯϑϥΞʔΩςΫνϟʹ͍ͨ͠
    $BDIF4FSWFS $BDIF4FSWFS $BDIF4FSWFS
    3FWFSTF1SPYZ

    View Slide

  48. ޮ཰తͳΩϟογϡ

    View Slide

  49. ޮ཰తͳΩϟογϡ
    ୯७ʹ$BDIF4FSWFSΛฒ΂ͯ෼ࢄ͢Δͱ
    3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS

    84FSWFS
    Ωϟογϡώοτ཰௿Լ
    σΟεΫྖҬͷফඅ
    FYBNQMFDPN
    FYBNQMFDPN

    View Slide

  50. ޮ཰తͳΩϟογϡ
    υϝΠϯຖʹॲཧ͢Δ$BDIF4FSWFSΛݶఆ͍ͨ͠
    3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS

    84FSWFS
    Ωϟογϡώοτ཰޲্
    σΟεΫྖҬͷઅ໿
    FYBNQMFDPN
    FYBNQMFDPN

    View Slide

  51. ͜͜·Ͱͷ͓͞Β͍
    ΩϟογϡϞʔυ 81 ੩తΩϟογϡ

    υϝΠϯͷઃఆʹԠͨ͡ػೳͷϋϯυϦϯά
    εέʔϥϏϦςΟ
    ߴՄ༻ੑ
    ޮ཰తͳΩϟογϡ
    ίϯςϯπΩϟογϡͷػೳͱ
    ɹɹɹɹɹɹɹɹΠϯϑϥʹٻΊͨ͜ͱ

    View Slide

  52. ͜ΕΒΛಉ࣌ʹຬͨ͢
    ج൫Λ࣮૷͢Δඞཁ͕͋Δ

    View Slide

  53. ࣮૷
    લఏ ઃܭ ·ͱΊ
    ίϯςϯπΩϟογϡػೳͷ࣮૷

    View Slide

  54. ͜͜Ͱ#FFS
    څਫ

    View Slide

  55. ΩϟογϡϞʔυͷ࣮૷

    View Slide

  56. ΩϟογϡϞʔυͷ࣮૷
    http {
    :
    proxy_cache_path /var/cache/nginx/cache levels=1:2 \
    keys_zone=zone1:1024m inactive=10m;
    proxy_cache_valid 200 10m;
    proxy_cache_valid 404 1m;
    server {
    :
    proxy_cache zone1;
    proxy_cache_key $proxy_scheme://$host$ $is_args$args;
    proxy_pass $proxy_scheme://${Origin Server};
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻

    View Slide

  57. http {
    :
    proxy_cache_path /var/cache/nginx/cache levels=1:2 \
    keys_zone=zone1:1024m inactive=10m;
    proxy_cache_valid 200 10m;
    proxy_cache_valid 404 1m;
    server {
    :
    proxy_cache zone1;
    proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;
    proxy_pass $proxy_scheme://${Origin Server};
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
    DBDIFͷอଘઌ΍αΠζɺ༗ޮظؒ
    ΩϟογϡϞʔυͷ࣮૷

    View Slide

  58. http {
    :
    proxy_cache_path /var/cache/nginx/cache levels=1:2 \
    keys_zone=zone1:1024m inactive=10m;
    proxy_cache_valid 200 10m;
    proxy_cache_valid 404 1m;
    server {
    :
    proxy_cache zone1;
    proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;
    proxy_pass $proxy_scheme://${Origin Server};
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
    εςʔλείʔυʹ
    ΑͬͯอଘظؒΛม͑Δ
    ΩϟογϡϞʔυͷ࣮૷

    View Slide

  59. http {
    :
    proxy_cache_path /var/cache/nginx/cache levels=1:2 \
    keys_zone=zone1:1024m inactive=10m;
    proxy_cache_valid 200 10m;
    proxy_cache_valid 404 1m;
    server {
    :
    proxy_cache zone1;
    proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;
    proxy_pass $proxy_scheme://${Origin Server};
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
    [POFΛ࢖ͬͯΩϟογϡ͢Δ
    ΩϟογϡϞʔυͷ࣮૷

    View Slide

  60. http {
    :
    proxy_cache_path /var/cache/nginx/cache levels=1:2 \
    keys_zone=zone1:1024m inactive=10m;
    proxy_cache_valid 200 10m;
    proxy_cache_valid 404 1m;
    server {
    :
    proxy_cache zone1;
    proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;
    proxy_pass $proxy_scheme://${Origin Server};
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
    Ωϟογϡͷอଘɾ୳ࡧͷΩʔ
    ΩϟογϡϞʔυͷ࣮૷

    View Slide

  61. ΩϟογϡϞʔυͷ࣮૷
    http {
    :
    proxy_cache_path /var/cache/nginx/cache levels=1:2 \
    keys_zone=zone1:1024m inactive=10m;
    proxy_cache_valid 200 10m;
    proxy_cache_valid 404 1m;
    server {
    :
    proxy_cache zone1;
    proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;
    proxy_pass $proxy_scheme://${Origin Server};
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
    Ωϟογϡ͕ͳ͍৔߹ɾ༗ޮظݶ੾Εͷ৔߹ʹ
    ΞΫηε͢ΔΦϦδϯαʔό

    View Slide

  62. ΩϟογϡϞʔυͷ࣮૷
    http {
    :
    server {
    :
    location /login {
    proxy_no_cache 1;
    proxy_cache_bypass 1;
    }
    }
    }
    OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
    Ωϟογϡ͠ͳ͍
    ΩϟογϡΛ୳ࡧ͠ͳ͍

    View Slide

  63. Ωϟογϡػೳ
    :
    location / {
    :
    set $do_not_cache 0;
    if ($http_cookie ~ '(wordpress_|comment_author|wp-postpass)') {
    set $do_not_cache 1;
    }
    proxy_no_cache $do_not_cache;
    proxy_cache_bypass $do_not_cache;
    proxy_cache zone1;
    proxy_cache_key "$proxy_scheme://$host$request_uri$is_args$args";
    proxy_pass $proxy_scheme://${Origin Server};
    }
    DPPLJFʹಛఆͷจࣈྻ͕
    ͋Δ࣌͸Ωϟογϡ͠ͳ͍
    81Ωϟογϡػೳͷྫ Ұ෦
    ɿ

    View Slide

  64. ஌ͬͯΔ͠
    ͋Μ·໘ന͘ͳ͍Ͱ͢ΑͶʂ

    View Slide

  65. Ҏ߱ͰɺϨϯαόʹ͓͚Δ
    ՝୊Λόʔϯͱղܾ͢Δ
    ιϑτ΢ΣΞͷ࿩Λ
    ͍͖ͯ͠·͢

    View Slide

  66. υϝΠϯʹԠͨ͡
    ػೳͷϋϯυϦϯάͷ࣮૷

    View Slide

  67. ΍Γ͍ͨ͜ͱ
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    PS

    ίϯςϯπΩϟογϡػೳ͸
    0/ʁ0''ʁ
    ΩϟογϡͷϞʔυ͸
    81Ωϟογϡʁ
    ੩తΩϟογϡʁ

    View Slide

  68. ͲͷΑ͏ʹ࣮૷͢Δ͔ʁ

    View Slide

  69. طଘͷߏ੒Λ΋͏গ͠ৄ͘͠
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ


    View Slide

  70. 3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ


    ਺ඦ୆
    طଘͷߏ੒Λ΋͏গ͠ৄ͘͠

    View Slide

  71. 3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ


    ໿ສαΠτ
    طଘͷߏ੒Λ΋͏গ͠ৄ͘͠

    View Slide

  72. 3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ


    සൟʹ૿ݮ͢Δ
    طଘͷߏ੒Λ΋͏গ͠ৄ͘͠

    View Slide

  73. Ϩϯλϧαʔόͷ৔߹
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%


    େྔͷ૿ݮ͢ΔυϝΠϯΛ
    ͲͷΑ͏ʹϓϩΩγ͍ͯ͠Δ͔ʁ

    View Slide

  74. େྔυϝΠϯͷϓϩΩγ
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    ສαΠτҎ্ͷ
    ϓϩΩγͷઃఆΛ
    ॻ͘ͷ͸ݱ࣮తͰ͸ͳ͍

    View Slide

  75. େྔυϝΠϯͷಈతͳϓϩΩγ
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    OHJOY

    OHY@NSVCZ

    View Slide

  76. ฐࣾͷ!NBUTVNPUPSZ͕։ൃ͍ͯ͠Δ
    OHJOYʹ૊ΈࠐΉ͜ͱͰϓϩηεͷىಈ΍
    ϦΫΤετͷλΠϛϯάͰNSVCZͷεΫϦ
    ϓτΛ࣮ߦͰ͖Δ
    NSVCZ૊ΈࠐΈ޲͚ͷܰྔ3VCZ࣮૷
    OHY@NSVCZ

    View Slide

  77. େྔυϝΠϯͷಈతͳϓϩΩγ
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    OHJOY

    OHY@NSVCZ

    View Slide

  78. େྔυϝΠϯͷಈతͳϓϩΩγ
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    υϝΠϯͱ84FSWFSͷඥ͚ͮ
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    OHJOY

    OHY@NSVCZ

    View Slide

  79. େྔυϝΠϯͷಈతͳϓϩΩγ
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    υϝΠϯͱ84FSWFSͷඥ͚ͮ
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    OHJOY

    OHY@NSVCZ
    NSVCZΛ࢖ͬͯ
    ίϯςϯπΩϟογϡػೳͷ
    ϋϯυϦϯάΛߦ͏ʂ

    View Slide

  80. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    PS

    ίϯςϯπΩϟογϡػೳ͸
    0/ʁ0''ʁ
    ΩϟογϡͷϞʔυ͸
    81Ωϟογϡʁ
    ੩తΩϟογϡʁ
    ίϯςϯπΩϟογϡػೳ͸
    0/ʁ0''ʁ
    ΩϟογϡͷϞʔυ͸
    81Ωϟογϡʁ
    ੩తΩϟογϡʁ
    3FWFSTF1SPYZ
    84FSWFS
    $BDIF4FSWFS

    View Slide

  81. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81

    View Slide

  82. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    ΩϟογϡͷϞʔυ͸
    81Ωϟογϡʁ
    ੩తΩϟογϡʁ
    ΩϟογϡͷϞʔυ͸
    81Ωϟογϡʁ
    ੩తΩϟογϡʁ

    View Slide

  83. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    ΩϟογϡͷϞʔυ
    81PS੩త

    ʹΑͬͯڍಈΛม͍ͨ
    Ωϟογϡର৅֎΍
    ظݶ੾Εͷ৔߹ʹ
    ΞΫηε͢Δ
    ΦϦδϯαʔόͷ৘ใ
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81

    View Slide

  84. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    OHY@NSVCZ
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81

    View Slide

  85. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    OHY@NSVCZ
    OHY@NSVCZΛ࢖͑͹
    ΋ͬͱεϚʔτʹͰ͖Δ

    View Slide

  86. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    OHY@NSVCZ
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    3FWFSTF1SPYZ
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    %#͔Βऔಘͨ͠σʔλΛ

    View Slide

  87. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    84FSWFS
    *OUFSOFU
    84FSWFS

    IUUQTTJUFBDPN
    4JUF" 4JUF# 4JUF$ 4JUF%
    ͓٬༷ͷίϯςϯπ
    $BDIF4FSWFS
    σʔλϕʔε
    OHY@NSVCZ
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    σʔλϕʔε
    υϝΠϯTJUFBDPN
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    3FWFSTF1SPYZ
    $BDIF4FSWFS
    %#͔Βऔಘͨ͠σʔλΛ
    NSVCZͰ
    IUUQϔομʹ
    ෇༩ͯ͠఻ൖ
    )551ϔομ

    View Slide

  88. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    84FSWFS 84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    $BDIF4FSWFS
    IUUQTTJUFBDPN
    σʔλϕʔε
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81

    View Slide

  89. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    84FSWFS 84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    $BDIF4FSWFS
    IUUQTTJUFBDPN
    σʔλϕʔε
    IUUQϔομΛ௥Ճ
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    9-0-*10161453&".8FC4FSWFS
    9-0-*101$"$)&5:1&81
    h = Nginx::Headers_in.new
    h['X-LOLIPOP-UPSTREAM'] = 'Web Server1'
    h['X-LOLIPOP-CACHE-TYPE'] = 'WP'
    ࣮ࡍ͸%#͔Βऔಘͨ͠஋

    View Slide

  90. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    84FSWFS 84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    $BDIF4FSWFS
    IUUQTTJUFBDPN
    σʔλϕʔε
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    9-0-*10161453&".8FC4FSWFS
    9-0-*101$"$)&5:1&81
    if ($http_x_lolipop_cache_type = "WP") {
    # WPΩϟογϡػೳͷڍಈ
    :
    }
    IUUQϔομΛ௥Ճ
    IUUQϔομΛ΋ͱʹ
    ΩϟογϡػೳͷڍಈΛมߋ

    View Slide

  91. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    84FSWFS 84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    $BDIF4FSWFS
    IUUQTTJUFBDPN
    σʔλϕʔε
    IUUQϔομΛ΋ͱʹϓϩΩγ
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    9-0-*10161453&".8FC4FSWFS
    9-0-*101$"$)&5:1&81
    IUUQϔομΛ΋ͱʹ
    ΩϟογϡػೳͷڍಈΛมߋ
    proxy_pass $proxy_scheme://$http_x_lolipop_upstream;
    IUUQϔομΛ௥Ճ

    View Slide

  92. ػೳͷϋϯυϦϯά
    3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    84FSWFS 84FSWFS
    4JUF" 4JUF# 4JUF$ 4JUF%
    $BDIF4FSWFS
    IUUQTTJUFBDPN
    σʔλϕʔε
    IUUQϦΫΤετϔομΛ௥Ճ
    IUUQϦΫΤετϔομΛ΋ͱʹϓϩΩγ
    αʔό84FSWFS
    ΩϟογϡPO
    ΩϟογϡλΠϓ81
    9-0-*10161453&".8FC4FSWFS
    9-0-*101$"$)&5:1&81
    IUUQϦΫΤετϔομΛ΋ͱ
    ʹΩϟογϡػೳͷڍಈΛมߋ
    proxy_pass $proxy_scheme://$http_x_lolipop_upstream;
    NSVCZͰσʔλϕʔε͔Βऔಘͨ͠஋ΛIUUQ
    ϔομʹຒΊࠐΉ
    $BDIF4FSWFSଆ͸ຒΊࠐ·ΕͨIUUQϔομΛ
    ࢀর͚ͩͰυϝΠϯຖͷৼΔ෣͍ͷ੍ޚ͕Մೳ
    IUUQϔομʹΑΔ৘ใͷ఻೻ͳͷͰɺ$BDIF
    4FSWFS͸௨ৗͷOHJOYͰΑ͍ͷͰγϯϓϧ

    View Slide

  93. 3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    σʔλϕʔε
    ϦΫΤετ
    ύϑΥʔϚϯεେৎ෉ʁ

    View Slide

  94. ύϑΥʔϚϯεྼԽΛ࠷খݶʹ
    ཈͑ΔςΫχοΫΛ͝঺հ͠·͢ʂ

    View Slide

  95. Ωϟογϡͷಋೖ

    View Slide

  96. Ωϟογϡͷಋೖ
    3FWFSTF1SPYZ
    .Z42-
    ϦΫΤετ
    3FEJT
    OHJOYOHY@NSVCZ

    View Slide

  97. Ωϟογϡͷಋೖ
    3FWFSTF1SPYZ
    .Z42-
    ϦΫΤετ
    3FEJT
    OHJOYOHY@NSVCZ


    ᶃ3FEJT͔Β৘ใΛऔಘ

    View Slide

  98. Ωϟογϡͷಋೖ
    3FWFSTF1SPYZ
    .Z42-
    ϦΫΤετ
    3FEJT
    OHJOYOHY@NSVCZ



    ᶃ3FEJT͔Β৘ใΛऔಘ
    ᶄᶃͰଘࡏ͠ͳ͚Ε͹.Z42-͔Β৘ใΛऔಘ

    View Slide

  99. Ωϟογϡͷಋೖ
    3FWFSTF1SPYZ
    .Z42-
    ϦΫΤετ
    3FEJT
    OHJOYOHY@NSVCZ




    ᶃ3FEJT͔Β৘ใΛऔಘ
    ᶄᶃͰଘࡏ͠ͳ͚Ε͹.Z42-͔Β৘ใΛऔಘ
    ᶅᶄͰऔಘͨ͠৘ใΛ࣍ճϦΫΤετͷͨΊʹ
    3FEJTʹॻ͖ࠐΈ

    View Slide

  100. ϖύϘͰ͸ɺσʔλετΞΛ
    ֊૚Խͯ͠Λ͍͍ײ͡ʹ͢Δ
    NSCHFNΛެ։͍ͯ͠·͢
    ֦ுػߏ 3VCZͰ͍͏HFN

    View Slide

  101. NSVCZNTE
    MPDBMNFNDBDIF
    ΠϯϝϞϦ,74

    3FEJT .Z42-
    ॲཧίετ͕௿͍ॱʹGFUDI
    ࣍ճҎ߱ͷGFUDIͷͨΊʹΩϟογϡ
    .VMUJ4UBHF%BUBTUPSF
    https://github.com/pepabo/mruby-msd
    NTE͕͍͍ײ͡ʹߴ଎ͳσʔλετΞ͔ΒGFUDI͢Δ

    View Slide

  102. NSVCZNTE
    redis = Msd::Store::Redis.new
    mysql = Msd::Store::MySQL.new(
    'SELECT host FROM table WHERE domain = ?',
    'localhost', 'root', 'password', 'DBName'
    )
    msd = Msd::Client.new
    msd.configure do |c|
    c.stores = [redis, mysql]
    end
    msd.fetch('site-a.com')
    # => "Web Server1"

    View Slide

  103. NSVCZNTE
    redis = Msd::Store::Redis.new
    mysql = Msd::Store::MySQL.new(
    'SELECT host FROM table WHERE domain = ?',
    'localhost', 'root', 'password', 'DBName'
    )
    msd = Msd::Client.new
    msd.configure do |c|
    c.stores = [redis, mysql]
    end
    msd.fetch('site-a.com')
    # => "Web Server1"
    ઀ଓ

    View Slide

  104. NSVCZNTE
    redis = Msd::Store::Redis.new
    mysql = Msd::Store::MySQL.new(
    'SELECT host FROM table WHERE domain = ?',
    'localhost', 'root', 'password', 'DBName'
    )
    msd = Msd::Client.new
    msd.configure do |c|
    c.stores = [redis, mysql]
    end
    msd.fetch('site-a.com')
    # => "Web Server1"
    ઀ଓ
    σʔλετΞΛొ࿥

    View Slide

  105. NSVCZNTE
    redis = Msd::Store::Redis.new
    mysql = Msd::Store::MySQL.new(
    'SELECT host FROM table WHERE domain = ?',
    'localhost', 'root', 'password', 'DBName'
    )
    msd = Msd::Client.new
    msd.configure do |c|
    c.stores = [redis, mysql]
    end
    msd.fetch('site-a.com')
    # => "Web Server1"
    ઀ଓ
    σʔλετΞΛొ࿥
    σʔλΛΩϟογϡͭͭ͠GFUDI͢Δ

    View Slide

  106. 3FWFSTF1SPYZ
    OHJOYOHY@NSVCZ

    .Z42-
    3FEJT
    ϦΫΤετ
    ϦΫΤετຖʹίωΫγϣϯΛ
    ுΔͷ͸ίετ͕ߴ͍
    ίωΫγϣϯ

    View Slide

  107. ίωΫγϣϯͷ࢖͍ճ͠

    View Slide

  108. OHY@NSVCZʹ͸NSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ
    https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives
    mruby_init_worker /path/to/init.rb;
    mruby_init_worker_code "
    # ίʔυ
    ";
    mruby_set $variable /path/to/variable.rb;
    mruby_access_handler /path/to/access.rb;
    mruby_access_handler /path/to/access.rb cache;
    nginx.conf
    # Workerϓϩηεىಈ࣌
    # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ
    # _code ͷσΟϨΫςΟϒ͸ΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ
    # mrubyͷ࣮ߦ݁ՌΛnginxͷม਺ʹ֨ೲ͢Δ
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ

    View Slide

  109. OHY@NSVCZʹ͸NSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ
    https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives
    mruby_init_worker /path/to/init.rb;
    mruby_init_worker_code "
    # ίʔυ
    ";
    mruby_set $variable /path/to/variable.rb;
    mruby_access_handler /path/to/access.rb;
    mruby_access_handler /path/to/access.rb cache;
    nginx.conf
    # Workerϓϩηεىಈ࣌
    # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ
    # _code ͷσΟϨΫςΟϒ͸ΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ
    # mrubyͷ࣮ߦ݁ՌΛnginxͷม਺ʹ֨ೲ͢Δ
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ

    View Slide

  110. OHY@NSVCZʹ͸NSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ
    https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives
    mruby_init_worker /path/to/init.rb;
    mruby_init_worker_code "
    # ίʔυ
    ";
    mruby_set $variable /path/to/variable.rb;
    mruby_access_handler /path/to/access.rb;
    mruby_access_handler /path/to/access.rb cache;
    nginx.conf
    # Workerϓϩηεىಈ࣌
    # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ
    # _code ͷσΟϨΫςΟϒ͸ΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ
    # mrubyͷ࣮ߦ݁ՌΛnginxͷม਺ʹ֨ೲ͢Δ
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ

    View Slide

  111. OHY@NSVCZʹ͸NSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ
    https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives
    mruby_init_worker /path/to/init.rb;
    mruby_init_worker_code "
    # ίʔυ
    ";
    mruby_set $variable /path/to/variable.rb;
    mruby_access_handler /path/to/access.rb;
    mruby_access_handler /path/to/access.rb cache;
    nginx.conf
    # Workerϓϩηεىಈ࣌
    # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ
    # _code ͷσΟϨΫςΟϒ͸ΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ
    # mrubyͷ࣮ߦ݁ՌΛnginxͷม਺ʹ֨ೲ͢Δ
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ

    View Slide

  112. OHY@NSVCZʹ͸NSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ
    https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives
    mruby_init_worker /path/to/init.rb;
    mruby_init_worker_code "
    # ίʔυ
    ";
    mruby_set $variable /path/to/variable.rb;
    mruby_access_handler /path/to/access.rb;
    mruby_access_handler /path/to/access.rb cache;
    nginx.conf
    # Workerϓϩηεىಈ࣌
    # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ
    # _code ͷσΟϨΫςΟϒ͸ΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ
    # mrubyͷ࣮ߦ݁ՌΛnginxͷม਺ʹ֨ೲ͢Δ
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ

    View Slide

  113. ίωΫγϣϯΛ࢖͍ճ͢
    https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives
    mruby_init_worker /path/to/init.rb;
    mruby_init_worker_code "
    # ίʔυ
    ";
    mruby_set $variable /path/to/variable.rb;
    mruby_access_handler /path/to/access.rb;
    mruby_access_handler /path/to/access.rb cache;
    nginx.conf
    # Workerϓϩηεىಈ࣌
    # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ
    # _code ͷσΟϨΫςΟϒ͸ΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ
    # mrubyͷ࣮ߦ݁ՌΛnginxͷม਺ʹ֨ೲ͢Δ
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
    mruby_init_worker /path/to/init.rb;
    # Workerϓϩηεىಈ࣌
    # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
    mruby_access_handler /path/to/access.rb;

    View Slide

  114. OHJOY
    3FEJT
    8PSLFSىಈ࣌ʹ3FEJTͱ઀ଓ͠ίωΫγϣϯΛอଘ͢Δ

    View Slide

  115. OHJOY
    XPSLFS
    3FEJT
    ίωΫγϣϯ
    8PSLFSىಈ࣌ʹ3FEJTͱ઀ଓ͠ίωΫγϣϯΛอଘ͢Δ
    8PSLFSϓϩηεͷ
    ىಈ

    View Slide

  116. OHJOY
    XPSLFS
    3FEJT
    mruby_init_worker_code "
    Userdata.new.redis = Redis.new('127.0.0.1', 6379)
    ";
    ίωΫγϣϯ
    8PSLFSىಈ࣌ʹ3FEJTͱ઀ଓ͠ίωΫγϣϯΛอଘ͢Δ
    8PSLFSϓϩηεͷ
    ىಈ
    NSVCZVTFSEBUBͱ͍͏NSCHFNΛ࢖ͬͯɺNSVCZεΫϦϓτ͔Β௚઀ࢀর
    Ͱ͖ͳ͍NSVCZͷάϩʔόϧม਺ʹ3FEJTͷίωΫγϣϯΛ֨ೲ
    ൺֱత҆શʹάϩʔόϧม਺ʹΦϒδΣΫτΛ֨ೲͰ͖Δ

    View Slide

  117. OHJOY
    XPSLFS
    3FEJT
    8PSLFSىಈ࣌ʹ઀ଓͨ͠3FEJTͷίωΫγϣϯΛ࢖͏

    View Slide

  118. OHJOY
    XPSLFS
    3FEJT
    8PSLFSىಈ࣌ʹ઀ଓͨ͠3FEJTͷίωΫγϣϯΛ࢖͏
    ϦΫΤετ
    ΞΫηε
    mruby_access_handler_code "
    Userdata.new.redis.get('hoge')
    ";

    View Slide

  119. OHJOY
    XPSLFS
    3FEJT
    8PSLFSىಈ࣌ʹ઀ଓͨ͠3FEJTͷίωΫγϣϯΛ࢖͏
    ϦΫΤετ
    ΞΫηε
    mruby_access_handler_code "
    Userdata.new.redis.get('hoge')
    ";
    8PSLFSىಈ࣌ʹ઀ଓͨ͠ίωΫγϣϯΛऔΓग़ͯ͠ɺར༻͢Δɻ
    NSVCZͷΠϯλϓϦλ͕8PSLFS಺Ͱ࢖͍ճ͞Ε͍ͯΔͨΊΞΫηε͕Մೳ
    ͦͷͨΊɺผͷ8PSLFS͔Β͸ผͷΠϯλϓϦλͳͷͰࢀরͰ͖ͳ͍

    View Slide

  120. OHJOY
    XPSLFS
    3FEJT
    8PSLFSىಈ࣌ʹ઀ଓͨ͠3FEJTͷίωΫγϣϯΛ࢖͏
    ϦΫΤετ
    ΞΫηε
    mruby_access_handler_code "
    Userdata.new.redis.get('hoge')
    ";
    ίωΫγϣϯΛுͬͨޙʹ3FEJT͕࠶ىಈ͞ΕΔͳͲɺ
    ίωΫγϣϯ͕੾அ͞ΕΔ͜ͱΛ૝ఆͯ͠࠶઀ଓॲཧͷ࣮૷͸ඞཁɻ
    NSVCZNTE͸࣮૷ࡁΈ

    View Slide

  121. εέʔϥϏϦςΟ
    ߴՄ༻ੑ

    View Slide

  122. εέʔϥϏϦςΟ
    ߴՄ༻ੑ
    ໘౗ͳखॱͳ͘؆୯ɺࣗಈʹ

    View Slide

  123. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    ϓϩΩγ͕ਖ਼ৗͳαʔόΛೝࣝͯ͠
    ಈతʹϓϩΩγઌΛܾΊΔ

    View Slide

  124. $POTVM
    OHY@NSVCZ
    CZ)BTIJ$PSQ

    View Slide

  125. )BTIJ$PSQ͕։ൃ͍ͯ͠Διϑτ΢ΣΞ
    ػೳɿ
    αʔϏεσ
    ΟεΧόϦ
    ϔϧενΣοΫ
    ͳͲͳͲ
    DPOTVM

    View Slide

  126. DPOTVMͷΠϕϯτʹൃՐͯ͠ɺ༧Ί༻ҙ͠
    ͨςϯϓϨʔτΛ࢖ͬͯϑΝΠϧΛੜ੒Ͱ
    ͖Δɻ
    αʔόͷ૿ݮ
    ϔϧενΣοΫͷ݁Ռ
    DPOTVMUFNQMBUF

    View Slide

  127. $POTVMΛ࢖͏ͱͲ͏ͳΔʁ

    View Slide

  128. 3FWFSTF1SPYZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    $POTVMΛ࢖͏ͱͲ͏ͳΔʁ

    View Slide

  129. 3FWFSTF1SPYZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    $POTVMͰTFSJWDFΛఆٛ
    ϔϧενΣοΫ
    TFSWJDFΛఆٛͯ͠ϔϧενΣοΫ͕Ͱ͖Δ
    {
    "service": {
    "name": "cache-server",
    "checks": [
    {
    "script": "ϔϧενΣοΫίϚϯυ",
    }
    ]
    }
    }

    View Slide

  130. 3FWFSTF1SPYZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    # curl -s http://localhost:8500/v1/health/service/ \
    cache-server | jq '.[].Node.Node'
    "cache-server-1"
    "cache-server-2"
    TFSWJDFDBDIFTFSWFS
    ϔϧενΣοΫ
    DPOTVM"1*ʹΞΫηε͢ΔͱαʔϏεʹଐ͢Δ
    ϊʔυΛಘΔ͜ͱ͕Ͱ͖Δɻ
    ϔϧενΣοΫ݁Ռ΋ಘΔ͜ͱ͕Ͱ͖Δɻ
    αʔϏεʹଐ͢ΔϊʔυͷҰཡ΍ϔϧενΣοΫ݁ՌΛಘΒΕΔ

    View Slide

  131. DPOTVMUFNQMBUFΛ࢖ͬͯɺ
    ಈతʹϑΝΠϧΛੜ੒͢Δ

    View Slide

  132. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUFΛ࢖ͬͯɺಈతʹϑΝΠϧΛੜ੒͢Δ
    DPOTVMUFNQMBUF

    View Slide

  133. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    {{ range service "cache-server|passing" }}
    - {{ .Address }}
    {{ end }}
    servers.yml.ctmpl
    DPOTVMUFNQMBUFΛ࢖ͬͯɺಈతʹϑΝΠϧΛੜ੒͢Δ
    ϩʔυ
    ςϯϓϨʔτϑΝΠϧ

    View Slide

  134. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    {{ range service "cache-server|passing" }}
    - {{ .Address }}
    {{ end }}
    servers.yml.ctmpl
    TFSWJDF ϔϧενΣοΫঢ়ଶ
    OPEFͷ*1ΞυϨε
    DPOTVMUFNQMBUFΛ࢖ͬͯɺಈతʹϑΝΠϧΛੜ੒͢Δ
    ϩʔυ
    ςϯϓϨʔτϑΝΠϧ

    View Slide

  135. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    {{ range service "cache-server|passing" }}
    - {{ .Address }}
    {{ end }}
    - cache-server-1ͷIPΞυϨε
    - cache-server-2ͷIPΞυϨε
    servers.yml.ctmpl
    servers.yml
    DPOTVMUFNQMBUFΛ࢖ͬͯɺಈతʹϑΝΠϧΛੜ੒͢Δ
    ϩʔυ
    औಘ
    ੜ੒
    ςϯϓϨʔτϑΝΠϧ

    View Slide

  136. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    {{ range service "cache-server|passing" }}
    - {{ .Address }}
    {{ end }}
    - cache-server-1ͷIPΞυϨε
    - cache-server-2ͷIPΞυϨε
    - cache-server-3ͷIPΞυϨε
    servers.yml.ctmpl
    servers.yml
    αʔόΛ૿ઃͨ͠ͱ͖
    DPOTVM
    DBDIFTFSWFS
    ςϯϓϨʔτϑΝΠϧ

    View Slide

  137. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    {{ range service "cache-server|passing" }}
    - {{ .Address }}
    {{ end }}
    - cache-server-1ͷIPΞυϨε
    - cache-server-2ͷIPΞυϨε
    servers.yml.ctmpl
    servers.yml
    αʔό͕μ΢ϯͨ͠ͱ͖
    ϔϧενΣοΫ
    ςϯϓϨʔτϑΝΠϧ

    View Slide

  138. αʔόͷ૿ݮ࣌ʹ
    ਖ਼ৗͳαʔόҰཡΛ
    ಈతੜ੒͢Δ͜ͱ͕Ͱ͖ͨʂ

    View Slide

  139. NSVCZΛ૊Έ߹ͤͯ
    ಈతʹઃఆΛಡΈࠐΉ

    View Slide

  140. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    DPOTVMUFNQMBUF
    mruby_init_worker_code "
    servers = YAML.load(
    File.open('servers.yml').read
    )
    Userdata.new.servers = servers
    ";
    nginx.conf
    DPOTVM
    DBDIFTFSWFS

    View Slide

  141. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    mruby_init_worker_code "
    servers = YAML.load(
    File.open('servers.yml').read
    )
    Userdata.new.servers = servers
    ";
    nginx.conf
    DPOTVM
    DBDIFTFSWFS
    XPSLFSϓϩηεىಈ࣌ʹ
    ੜ੒͞Εͨ:".-Λϩʔυ
    *1ΞυϨεͷ഑ྻΛอଘ
    NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ

    View Slide

  142. 3FWFSTF1SPYZ
    OHJOY
    XJUIOHY@NSVCZ
    DPOTVM
    DPOTVM
    DBDIFTFSWFS
    DPOTVM
    DBDIFTFSWFS
    TFSWJDFDBDIFTFSWFS
    DPOTVMUFNQMBUF
    mruby_init_worker_code "
    servers = YAML.load(
    File.open('servers.yml').read
    )
    Userdata.new.servers = servers
    ";
    nginx.conf
    DPOTVM
    DBDIFTFSWFS
    XPSLFSϓϩηεىಈ࣌ʹ
    ੜ੒͞Εͨ:".-Λϩʔυ
    *1ΞυϨεͷ഑ྻΛอଘ
    DPOTVMUFNQMBUFͰϑΝΠϧੜ੒ޙʹOHJOYSFMPBEΛ࣮ࢪͯ͠ϩʔυ͢Δʂ
    OHJOY
    SFMPBE
    NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ

    View Slide

  143. NSVCZͷੈքʹϓϩΩγઌͷ
    αʔόҰཡΛ౉͢͜ͱ͕Ͱ͖ͨʂ

    View Slide

  144. NSVCZͰಈతʹ6QTUSFBNΛ
    ܾఆ͢Δ

    View Slide

  145. NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ
    3FWFSTF1SPYZ
    DBDIFTFSWFS
    DBDIFTFSWFS DBDIFTFSWFS 8FC4FSWFS
    ίϯςϯπΩϟογϡػೳແޮ࣌

    View Slide

  146. NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ
    3FWFSTF1SPYZ
    DBDIFTFSWFS
    DBDIFTFSWFS DBDIFTFSWFS 8FC4FSWFS
    ίϯςϯπΩϟογϡػೳ༗ޮ࣌
    ͲΕ͔̍୆

    View Slide

  147. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    nginx.conf

    View Slide

  148. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    μϛʔͷ6QTUSFBN
    OHY@NSVCZͰॻ͖׵͑Δ
    nginx.conf

    View Slide

  149. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    OHJOYͷม਺ʹNSVCZͷ࣮ߦ݁ՌΛ֨ೲ͢Δ
    nginx.conf

    View Slide

  150. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    mruby_init_worker_code "
    servers = YAML.load(
    File.open('servers.yml').read
    )
    Userdata.new.servers = servers
    ";
    ىಈ࣌ʹऔಘͨ͠$BDIF4FSWFSҰཡ
    nginx.conf

    View Slide

  151. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    ઀ଓઌͷϙʔτ൪߸
    nginx.conf

    View Slide

  152. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    μϛʔͰఆٛͨ͠6QTUSFBN
    nginx.conf

    View Slide

  153. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    6QTUSFBNͷαʔόΛॻ͖׵͑Δ
    nginx.conf

    View Slide

  154. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    6QTUSFBNͷαʔόΛॻ͖׵͑Δ
    ϥϯμϜʹΩϟογϡαʔόΛ1୆ฦ͢
    nginx.conf

    View Slide

  155. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    ࠷ޙʹࢀরͨ͠΋ͷ͕ม਺ʹ֨ೲ͞ΕΔ
    nginx.conf

    View Slide

  156. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    ࠷ޙʹࢀরͨ͠΋ͷ͕ม਺ʹ֨ೲ͞ΕΔ
    ϓϩΩγ͢Δ
    nginx.conf

    View Slide

  157. NSVCZΛ૊Έ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
    upstream dynamic_cache_server {
    server 127.0.0.1:80;
    mruby_upstream_keepalive 64;
    }
    mruby_set_code $upstream "
    :
    if result.enable_contents_cache?
    servers = Userdata.new.servers
    port = Nginx::Connection.new.local_port
    index = SecureRandom.random_number(servers.size)
    upstream = Nginx::Upstream.new("dynamic_cache_server")
    upstream.server = "#{servers[index]}:#{port}"
    "dynamic_cache_server"
    else
    result.upstream
    end
    ";
    proxy_pass $upstream;
    # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ
    # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server
    ίϯςϯπΩϟογϡػೳ͕ແޮͷ৔߹͸
    %#͔Βऔಘͨ͠8FC4FSWFSΛฦ͢
    nginx.conf

    View Slide

  158. DPOTVMͱOHY@NSVCZͷ૊Έ߹ͤͰ
    αʔόͷ૿ݮʹ߹Θͤͯࣗಈతʹ
    ϓϩΩγઌΛܾఆ͢Δ࢓૊Έ͕Ͱ͖ͨ

    View Slide

  159. ޮ཰తͳΩϟογϡ

    View Slide

  160. ޮ཰తͳΩϟογϡ
    ୯७ʹ$BDIF4FSWFSΛฒ΂ͯ෼ࢄ͢Δͱ
    3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS

    84FSWFS
    Ωϟογϡώοτ཰௿Լ
    σΟεΫྖҬͷফඅ
    FYBNQMFDPN
    FYBNQMFDPN

    View Slide

  161. ޮ཰తͳΩϟογϡ
    υϝΠϯຖʹॲཧ͢Δ$BDIF4FSWFSΛݶఆ͍ͨ͠
    3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS

    84FSWFS
    Ωϟογϡώοτ཰޲্
    σΟεΫྖҬͷઅ໿
    FYBNQMFDPN
    FYBNQMFDPN

    View Slide

  162. υϝΠϯຖʹΩϟογϡαʔόΛ
    ݶఆ͍͚ͨͩ͠Ͱͳ͘
    ʴ
    αʔόͷεέʔϧʹࣗಈରԠ͍ͨ͠
    ʴ
    Մ༻ੑΛҡ͍࣋ͨ͠

    View Slide

  163. NSVCZͰ؆୯ͳΞϧΰϦζϜΛ࣮૷

    View Slide

  164. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN

    View Slide

  165. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N
    υϝΠϯͷઌ಄͔Β̑จࣈநग़

    View Slide

  166. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N

    ਐ਺ͷ"4$**ίʔυΛऔಘ
    υϝΠϯͷઌ಄͔Β̑จࣈநग़

    View Slide

  167. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N


    ਐ਺ͷ"4$**ίʔυΛ଍͢
    υϝΠϯͷઌ಄͔Β̑จࣈநग़

    View Slide

  168. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N


    <> <> <> <> <> <>
    "SSBZ
    DPOTVMUFNQMBUFʹΑΔ:".-ੜ੒ˠ:".-MPBE
    ˠ"SSBZ

    View Slide

  169. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N



    <> <> <> <> <> <>
    "SSBZ
    MFOHUI

    View Slide

  170. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N



    <> <> <> <> <> <>
    "SSBZ

    View Slide

  171. αʔόͷ૿ݮ͕ൃੜͨ͠৔߹

    View Slide

  172. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N



    <> <> <> <> <> <>
    "SSBZ

    View Slide

  173. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N



    <> <> <> <> <> <>
    "SSBZ
    MFOHUI
    DPOTVMUFNQMBUFͰઃఆϑΝΠϧ͕࠶ੜ੒
    OHJOYSFMPBE

    View Slide

  174. 3FWFSTF1SPYZ
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    $BDIF
    4FSWFS
    FYBNQMFDPN
    F Y B N Q M F D P N



    <> <> <> <> <> <>
    "SSBZ

    View Slide

  175. NSVCZΛ࢖ͬͨ؆୯ͳΞϧΰϦζϜͷ
    ࣮૷ʹΑͬͯ
    ޮ཰తͳΩϟογϡΛ࣮ݱͨ͠ʂ

    View Slide

  176. ·ͱΊ

    View Slide

  177. ·ͱΊ
    ίϯςϯπΩϟογϡػೳΛϦϦʔεͨ͠
    ໢಺ંฦ͠Ͱߴ଎ɾઃఆ؆୯
    NSVCZΛ׆༻ͯ͠େن໛Ϩϯαό؀ڥʹඞཁͳཁ݅
    Λຬͨͨ͠
    NSVCZNTE NSVCZVTFSEBUBΛ༻͍ͨύϑΥʔϚ
    ϯε޲্5JQTΛ঺հͨ͠
    DPOTVMͱNSVCZΛ૊Έ߹ͤͯɺαʔόͷঢ়ଶʹ߹
    ΘͤͯಈతʹมԽ͢ΔΠϯϑϥΞʔΩςΫνϟΛ
    ࣮ݱͨ͠

    View Slide

  178. ܅΋ϖύϘͰಇ͔ͳ͍͔ʁ
    ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU

    View Slide

  179. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide