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

200万ドメインのHTTPS化を見据えたmrubyによる大規模証明書管理アーキテクチャ / 2-millions-cert-by-mruby

200万ドメインのHTTPS化を見据えたmrubyによる大規模証明書管理アーキテクチャ / 2-millions-cert-by-mruby

研究開発によってサーバ台数を100分の1にする技術を生み出す

ペパボ研究所 主席研究員 兼 シニアプリンシパルエンジニア 松本 亮介 / Pepabo R&D Institute, GMO Pepabo, Inc.
2017.11.25 Fukuoka RubyKaigi 02

MATSUMOTO Ryosuke
PRO

November 25, 2017
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

  1. ݚڀ։ൃʹΑͬͯαʔό୆਺Λ100෼ͷ1ʹ͢Δٕज़ΛੜΈग़͢
    ϖύϘݚڀॴ ओ੮ݚڀһ ݉ γχΞϓϦϯγύϧΤϯδχΞ দຊ ྄հ / Pepabo R&D Institute, GMO Pepabo, Inc.
    2017.11.25 Fukuoka RubyKaigi 02
    200ສυϝΠϯͷHTTPSԽΛݟਾ͑ͨ
    mrubyʹΑΔେن໛ূ໌ॻ؅ཧΞʔΩςΫνϟ

    View Slide

  2. • ژ౎େֶത࢜ʢ৘ใֶʣ
    • ϖύϘݚڀॴ ओ੮ݚڀһ
    • GMOϖύϘ γχΞɾϓϦϯγύϧΤϯδχΞ
    • ݩΠϯϑϥΤϯδχΞ
    • ೔ຊOSS঑ྭ৆ɾ৘ใॲཧֶձ ࢁԼه೦ݚڀ৆ͳͲଟ਺
    2
    দຊ྄հ / ·ͭ΋ͱΓʔ / @matsumotory

    View Slide

  3. 1.ৗ࣌HTTPSԽͷഎܠͱຊݚڀͷ໨త
    2.ैདྷͷWebαʔόͷূ໌ॻઃఆͷ՝୊
    3.ߴूੵϚϧνςφϯτWebαʔόͷେن໛ূ໌ॻ؅ཧ
    4.࣮ݧͱ࣮ӡ༻্ͷධՁ
    5.·ͱΊ
    3
    ໨࣍

    View Slide

  4. 1.
    ৗ࣌HTTPSԽͷഎܠͱຊݚڀͷ໨త

    View Slide

  5. • HTTP/2ͷRFC࠾୒ͱ࣮༻ԽͷऔΓ૊Έ
    • GoogleʹΑΔৗ࣌HTTPSԽͷਪਐ
    • Let’s EncryptʹΑΔແྉͷDVূ໌ॻͷఏڙ
    • اۀ͚ͩͰͳ͘ݸਓͷWebαΠτͷHTTPSԽ΋ඞਢ
    5
    ݚڀͷഎܠ

    View Slide

  6. • ݸਓ޲͚ͷ௿Ձ֨ϗεςΟϯάͰ࠾༻͞ΕΔ͜ͱͷଟ͍ํࣜ※1
    • ୯ҰͷWebαʔόʹߴूੵ(਺ສυϝΠϯ)ʹϗετΛऩ༰
    • Ծ૝ϗετํࣜʹΑΓେྔͷϗετΛಉҰϓϩηεͰॲཧ
    • ϦόʔεϓϩΩγͷ৔߹͸ߋʹߴूੵ(਺ेɺ਺ඦສυϝΠϯ)
    • ߴूੵϚϧνςφϯτํࣜͷHTTPSରԠ΋ٸ຿
    6
    ߴूੵϚϧνςφϯτํࣜͷWebαʔό
    ˞দຊ྄հ തֶ࢜Ґ࿦จ8FCαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ
    IUUQTSFQPTJUPSZLVMJCLZPUPVBDKQETQBDFIBOEMF ژ౎େֶ ೥݄

    View Slide

  7. • Webαʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻΛಡΈࠐΉํࣜ
    • ߴूੵϚϧνςφϯτํࣜͰ͸ূ໌ॻ਺͕๲େ
    • ϝϞϦ࢖༻ྔ͕ূ໌ॻ਺ʹґଘͯ͠ϋʔυ΢ΣΞίετ૿Ճ
    • ϓϩηεىಈʹ௕͕͔͔࣌ؒΓઃఆมߋ࣌ͷӡ༻໘ʹ՝୊
    • ࠓޙΛݟਾ͑ͯݚڀऀͱͯ͠ૣΊʹखΛ͏ͭඞཁ͕͋Δ
    7
    ैདྷͷߴूੵϚϧνςφϯτํࣜͷূ໌ॻઃఆͷ՝୊

    View Slide

  8. 2015೥Լظ͔ΒऔΓ૊Έ։࢝ޙ2016೥1݄ϦϦʔε
    8
    SFGIUUQICNBUTVNPUPSKQFOUSZ

    View Slide

  9. ࣮૷·Ͱ͸2೥લʹ΄΅Ͱ͖͍͕ͯͨ
    ࣮ӡ༻্Ͱͷ༗ޮੑͷධՁ͕େࣄ

    View Slide

  10. جຊతʹHTTPSԽ͸༗ྉͩͬͨͷͰ
    ୔ࢁͷٞ࿦Λܦͯࠓ೥ͷ্ظʹແྉԽ

    View Slide

  11. ߴूੵϚϧνςφϯτWebαʔόͷେن໛ূ໌ॻ؅ཧ
    • ূ໌ॻ਺ͷ૿Ճʹ൐͏Ϧιʔε࢖༻ྔͷ૿ՃΛ௿ݮ
    • αʔϏεఀࢭ͢Δ͜ͱͳ͘৽نઃఆΛ൓өՄೳ
    • ϗεςΟϯάαʔϏεͷϓϩμΫγϣϯ؀ڥʹಋೖͯ͠ධՁ
    200ສυϝΠϯͷHTTPSԽʹඞཁͳαʔό୆਺Λ100෼ͷ1΁
    11
    ຊݚڀͷ໨త

    View Slide

  12. 2.
    ैདྷͷWebαʔόͷূ໌ॻઃఆͷ՝୊

    View Slide

  13. ߴूੵϚϧνςφϯτํࣜΛલఏͱͨ͠
    HTTPSԽͷ՝୊

    View Slide

  14. େྔͷυϝΠϯΛHTTPSԽ͢Δࡍͷ
    ՝୊Λ໌֬ʹ͢Δ

    View Slide

  15. 1. HTTPSԽʹ൐͏ϋʔυ΢ΣΞίετͷ૿Ճ
    2. ূ໌ॻ௥Ճ౳ͷઃఆมߋద༻࣌ؒͷ૿Ճ
    15
    ߴूੵϚϧνςφϯτํࣜͷऩ༰཰ͱӡ༻໘ͷ՝୊

    View Slide

  16. • ϗετͷ਺ʹൺྫͯ͠ϗετઃఆɾূ໌ॻ΍ൿີ伴ͷσʔλɾ
    HTTP/HTTPSॲཧʹඞཁͳϝϞϦ࢖༻ྔ͕૿େ
    • ΄ͱΜͲΞΫηεͷແ͍ϗετʹରͯ͠΋ઃఆ৘ใΛอ࣋
    • Մ༻ੑͱอकੑΛߴΊΔͨΊʹHTTPS༻ͷϓϩΩγΛલஈʹ
    ஔ͍ͨ৔߹͸όοΫΤϯυͷυϝΠϯΛશͯू໿͢Δඞཁ͋Γ
    • ฐࣾϗεςΟϯάαʔϏεͰ͸200ສυϝΠϯҎ্
    16
    1. HTTPSԽʹ൐͏ϋʔυ΢ΣΞίετͷ૿Ճ

    View Slide

  17. • αʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻ΍ઃఆΛಡΈࠐΈ
    • ϗετ୯ҐͰରԠ͢Δূ໌ॻͷϑΝΠϧ΍ઃఆΛهड़
    • ߴूੵԽʹ൐͍ઃఆߦ਺ͷ૿େ΍؅ཧίετͷ૿େ
    • ઃఆ਺૿Ճʹ൐͍αʔόϓϩηεͷ࠶ىಈ͕࣌ؒ૿Ճ
    • ઃఆͷ࠶ಡΈࠐΈॲཧ͢ΒαʔϏεఀࢭʹܨ͕ΔڪΕ༗Γ
    17
    2. ূ໌ॻ௥Ճ౳ͷઃఆมߋద༻࣌ؒͷ૿Ճ

    View Slide

  18. 3.
    ߴूੵϚϧνςφϯτWebαʔό
    ͷେن໛ূ໌ॻ؅ཧΞʔΩςΫνϟ

    View Slide

  19. ·ͱΊͨ՝୊Λղܾ͢ΔํࣜΛ
    ·ͣ͸ఏҊ͢Δ

    View Slide

  20. • αʔόϓϩηεىಈ࣌ʹূ໌ॻ͸Ұ੾ಡΈࠐ·ͳ͍
    • αʔόϓϩηεͷ࠶ىಈ/࠶ಡΈࠐΈ࣌ؒͷ௿଎ԽΛճආ
    • TLSϋϯυγΣΠΫ࣌ʹඞཁͳূ໌ॻͱઃఆΛಈతʹಡΈࠐΈ
    • ߴ଎ͳϓϩηε࠶ಡΈࠐΈʹΑΔϝϞϦղ์΋Մೳ
    • ূ໌ॻ΍ϗετͷ৽ن௥Ճઃఆʹϓϩηε࠶ىಈ͕ෆཁ
    20
    ఏҊख๏

    View Slide

  21. ΞʔΩςΫνϟʢํࣜʣͷఏҊ
    21
    'JMF,74
    IUUQE

    QSPDFTT
    $MJFOU
    4/*ʹΑͬͯTFSWFSOBNF͕FYBNQMFKQͷ
    υϝΠϯʹର͢Δ5-4ϋϯυγΣΠΫ͕։࢝
    5-4ϋϯυγΣΠΫ࣌ʹυϝΠϯFYBNQMFKQʹඥͮ͘ূ
    ໌ॻͱൿີ伴ΛϑΝΠϧ΍,FZ7BMVF4UPSF ,74
    ͳͲ
    ͔ΒಈతʹಡΈࠐΈ͍ͨ

    View Slide

  22. ΞʔΩςΫνϟʢํࣜʣͷఏҊ
    22
    'JMF,74
    IUUQE

    QSPDFTT
    $MJFOU
    5-4ϋϯυγΣΠΫ࣌ʹ೚ҙͷؔ਺Λ࣮ߦͰ͖Ε͹ྑ͍
    ؔ਺ͷதͰυϝΠϯͱඥͮ͘αʔόূ໌ॻͱൿີ伴Λ
    ಡΈࠐΉؔ਺Λ࣮ߦͰ͖Ε͹ྑ͍

    View Slide

  23. ํࣜΛ࣮ݱ͢ΔͨΊͷ࣮૷Λݕ౼͢Δ

    View Slide

  24. ΤϯδχΞͱͯ͠ͷ࿹ͷݟͤͲ͜Ζ

    View Slide

  25. • 3೥ͿΓͷϝδϟʔϦϦʔε
    • https://www.openssl.org/news/openssl-1.0.2-notes.html
    • OpenSSLͷίʔυΛٱʑʹோΊ͍ͯͨ
    • TLSϋϯυγΣΠΫ࣌ʹؔ਺ΛίʔϧόοΫ͢Δؔ਺͕௥Ճ
    • SSL_CTX_set_client_cert_cb() ͳͲ
    25
    OpenSSL 1.0.2͕2015೥1݄22೔ʹϦϦʔε

    View Slide

  26. ࣌୅ͷྲྀΕͱࣗ෼ͷߟ͕͑ಉظ͞Εͨ

    View Slide

  27. • RubyͰΠϯϑϥઃܭʹԠͨ͡ಈతઃఆΛՄೳʹ͢ΔͨΊ
    • όοΫΤϯυͷܾఆ΋RubyͰॻ͍ͯnginxͷઃఆΛ؆ૉԽ
    • ূ໌ॻσʔλͷऔΓग़͠Λࣗ༝ʹબ୒Ͱ͖ΔΑ͏ʹ͢ΔͨΊ
    • RedisɺMySQLɺlocalmemcacheɺAPIͳͲmrbgemͷ׆༻
    • ੑೳʹ໰୊͕ແ͚Ε͹RubyͰॻ͖͍ͨ
    27
    ͞Βʹngx_mruby΋׆༻͍ͨ͠

    View Slide

  28. ngx_mruby × OpenSSL 1.0.2

    View Slide

  29. • ngx_mruby※1
    ʹTLSϋϯυγΣΠΫͷRubyϑοΫઃఆΛ࣮૷
    • TLSϋϯυγΣΠΫ࣌ʹϑοΫ͞ΕͨRubyͷίʔυΛ࣮ߦ
    • RubyϝιουͰOpenSSLͱσʔλͷड͚౉͠Λ࣮ߦ
    • KVS/File͔Βূ໌ॻ΍ൿີ伴ΛRubyܦ༝ͰಡΈࠐΈՄ
    29
    ngx_mruby v1.16.0ʢ2016೥2݄ʣͰ௥Ճ࣮૷
    ˞দຊ྄հ Ԭ෦णஉ NPE@NSVCZεΫϦϓτݴޠͰߴ଎͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷ
    ػೳ֦ுࢧԉػߏ ৘ใॲཧֶձ࿦จࢽɼ7PM /P QQ /PW

    View Slide

  30. ngx_mrubyͷূ໌ॻಈతಡΈࠐΈ࣮૷ϑϩʔ
    30
    44-@$59@TFU@DFSU@DC
    ʹ3VCZͷόΠ
    τίʔυΛ࣮ߦ͢ΔIBOEMFSͷؔ਺ϙΠϯ
    λͱίϯςΩετߏ଄ମϙΠϯλΛηοτ
    OHJOYDPOGͷઃఆ͔ΒಡΈࠐΜͩ3VCZε
    ΫϦϓτΛόΠτίʔυԽͯ͠
    ίϯςΩετߏ଄ମʹอଘ
    5-4ϋϯυγΣΠΫ࣌ʹIBOEMFS͕ίʔϧ
    όοΫ͞ΕόΠτίʔυΛ࣮ߦ
    όΠτίʔυͰ࣮ߦ͞ΕΔ3VCZͷϝιο
    υܦ༝Ͱূ໌ॻ΍ൿີ伴σʔλ͕
    ίϯςΩετߏ଄ମʹηοτ͢Δ
    ূ໌ॻͱൿີ伴σʔλʹج͍ͯ#*0ܦ༝Ͱ
    σʔλΛಡΈࠐΜͰϋϯυγΣΠΫΛଓߦ
    OHJOYىಈ࣌ͷॲཧ OHJOY͕ϦΫΤετड৴ͨ࣌͠ͷॲཧ
    NSVCZͷ5-4ϋϯυγΣΠΫϑοΫσΟ
    ϨΫςΟϒ͕ଘࡏͨ͠Β
    44-@$59@TFU@DFSU@DC
    Λݺͼग़͢

    View Slide

  31. lua-nginx-module΋΄΅ಉ࣌ظʹ։ൃ
    31
    ೥݄ʹͲͪΒ΋Ϛʔδ
    ࣗ෼͕ཉ͍͠ͱࢥͬͨ࣌ʹͳ͔ͬͨ͜ͱͱ3VCZͰॻ͖͔ͨͬͨͷͰOHY@NSVCZʹ࣮૷

    View Slide

  32. • ϦΫΤετͷ͋ͬͨOpenSSLͷservernameͰ൑ఆ
    • ඥͮ͘ূ໌ॻͱϓϩΩγઌΛRubyͷίʔυͰܾఆ
    • RubyͰಈతʹઃఆ(mruby_set $hostͱproxy_pass $host)
    • ୯ҰͷઃఆͰສͷΦʔμʔͷυϝΠϯΛಈతʹॲཧ
    • ઃఆͱূ໌ॻʹؔ͢ΔϝϞϦ࢖༻ྔΛઅ໿
    32
    ngx_mrubyͷಈతͳઃఆͱূ໌ॻಡΈࠐΈ

    View Slide

  33. 33
    ϦΫΤετ͞ΕͨυϝΠϯ͔Βಈతʹূ໌ॻΛಡΈସ͑Δ͜ͱʹΑ
    ΓόοΫΤϯυ΁ͷϓϩΩγઃఆ΋ؚΊ୯Ұͷઃఆʹू໿Մೳ
    ϑΝΠϧϕʔεͷಈతূ໌ॻಡΈࠐΈྫ
    3VCZͰϓϩάϥϚϒϧʹهड़Մೳ

    View Slide

  34. 34
    ϦΫΤετ͞ΕͨυϝΠϯ͔Βಈతʹূ໌ॻΛ
    ಡΈସ͑Δ͜ͱʹΑΓ୯Ұͷઃఆʹू໿Մೳ
    ,74ϕʔεͷಈతূ໌ॻಡΈࠐΈྫ

    View Slide

  35. 1. αʔόϓϩηεىಈ࣌ʹ͸ূ໌ॻ͸ಡΈࠐ·ͳ͍
    2. υϝΠϯͱূ໌ॻɺϓϩΩγͷઃఆ͸୯Ұͷઃఆʹѹॖ
    3. ΞΫηεͷ͋ͬͨυϝΠϯͷΈͷূ໌ॻΛಡΈࠐΉ
    • 200ສυϝΠϯͰΞΫηεͷແ͍υϝΠϯ͸ଟ਺ଘࡏ
    4. ఆظతͳϓϩηεϦϩʔυʹΑΓূ໌ॻσʔλΛղ์
    35
    HTTPSԽʹؔ͢ΔϝϞϦ࢖༻ྔޮ཰Խ·ͱΊ

    View Slide

  36. ํࣜͱ࣮૷͸Ͱ͖ͨͷͰޙ͸༗ޮੑΛࣔ͢

    View Slide

  37. 4.
    ࣮ݧͱ࣮ӡ༻্ͷධՁ

    View Slide

  38. ఆྔతͳ࣮ݧͱߟ࡯ʹΑͬͯ
    ఏҊख๏ͷ༗ޮੑΛ໌֬ʹࣔ͢

    View Slide

  39. ༗ޮੑΛࣔ͢ओு͔Β৴པੑΛಘΔ

    View Slide

  40. 1. ࣮ݧ؀ڥͰैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ
    2. ࣮ݧ؀ڥͰैདྷख๏ͱఏҊख๏ͷੑೳൺֱ࣮ݧ
    ɾಈతূ໌ॻಡΈࠐΈͷΦʔόʔϔου͸Ͳͷఔ౓͔ʁ
    3. ຊ൪؀ڥͰ࣮ӡ༻্ͷධՁ
    ɾແྉHTTPSΦϓγϣϯαʔϏεͷ։࢝ͱͦͷޙ
    40
    ࣮ݧͱ࣮ӡ༻্ͷධՁ

    View Slide

  41. 1. ैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ

    View Slide

  42. ࣮ݧ؀ڥ
    42
    ࢓༷
    $16 *OUFM9FPO&W()[DPSF
    .FNPSZ (CZUFT
    4FSWFS /&$&YQSFTT3G&
    04 $FOU04-JOVY,FSOFM

    View Slide

  43. • 10ສϗετ෼ͷ4096bitsͷ伴௕ͷൿີ伴ͱαʔόূ໌ॻΛ
    nginxόʔδϣϯ1.11.13ͰಡΈࠐΈ
    • ैདྷख๏͸࠶ಡΈࠐΈॲཧͰ΋αʔϏεఀࢭʹܨ͕Δ
    43
    ैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ
    ߲໨ ैདྷख๏ ఏҊख๏
    ϓϩηεىಈͷ࣮࣌ؒ ඵ
    ϓϩηεىಈͷϢʔβ$16࢖༻࣌ؒ ඵ
    ϓϩηεىಈͷγεςϜ$16࢖༻࣌ؒ ඵ

    View Slide

  44. 2. ैདྷख๏ͱఏҊख๏ͷੑೳൺֱ࣮ݧ

    View Slide

  45. •ैདྷͷࣄલূ໌ॻಡΈࠐΈख๏ͱఏҊख๏ͷTLSϋϯυ
    γΣΠΫ࣌ʹಈతʹಡΈࠐΉख๏(KVSϕʔε)ͱൺֱ
    •ಉ࣌઀ଓ਺ΛมԽͤ͞ͳ͕ΒੑೳΛධՁ
    •nginxʹॳظಉ෧͞Ε͍ͯΔ612Bytesͷindex.html
    •cipher suites͸ECDHE-RSA-AES128-GCM-SHA256
    45
    ఏҊख๏ͷੑೳධՁ

    View Slide

  46. ఏҊํࣜͱैདྷํࣜͷੑೳൺֱ
    46
    ಉ࣌઀ଓ਺
    ैདྷํࣜ
    QSFMPBE
    SFRTFD

    ఏҊํࣜ
    EZOBNJDMPBE
    SFRTFD





    $(*ͷΑ͏ͳϓϩηεෳ੡͕ੜ͡ͳ͍ܰྔͳ੩తϑΝΠϧ΁ͷϦΫΤετͰ΋ɺ
    ূ໌ॻͷಈతಡΈࠐΈ͸ैདྷख๏ͷ੩తಡΈࠐΈͱൺֱͯ͠΋΄΅͕ࠩͳ͍

    View Slide

  47. 10ສϗετऩ༰࣌ͷ੩తϑΝΠϧͷੑೳൺֱ
    47
    ਺ेCZUFTͷܰྔͳ)5.-ϑΝΠϧ΁ͷϦΫΤετ
    3FRVFTUTFD





    ಉ࣌઀ଓ਺

    ैདྷख๏ ఏҊख๏

    View Slide

  48. • TLS΍Ϩεϙϯεੜ੒ॲཧͱൺֱͯ͠ಈతূ໌ॻಡΈࠐΈॲཧ
    ͸࣮༻্໰୊ʹͳΒͳ͍ఔ౓ͷॲཧίετ
    • TLSϋϯυγΣΠΫ࣌ͷ҉߸ɾ෮߸ॲཧͷίετ͕େ͖͍
    48
    ߟ࡯

    View Slide

  49. 3. ຊ൪؀ڥͰ࣮ӡ༻্ͷධՁ

    View Slide

  50. ࣮ӡ༻ޙʹ͓͍ͯ΋
    ఏҊख๏ͷ༗ޮੑΛ͖ͪΜͱࣔ͢

    View Slide

  51. ͦͷͨΊʹ͸ैདྷख๏ͷ৔߹Ͳ͏ͳΔ͔Λ
    ͖ͪΜͱܭଌ͠ߟ࡯͢Δ

    View Slide

  52. ͦΕ͕ݚڀ։ൃͷࠜڌʹܨ͕Δ

    View Slide

  53. ͞ΒͳΔվળʹ΋ܨ͕͍ͬͯ͘

    View Slide

  54. • ैདྷख๏ͱఏҊख๏ͷ1ϲ݄ؒͷϦιʔε࢖༻ྔΛൺֱ
    • ैདྷख๏͸2017೥3݄͔Β4݄ɺఏҊख๏͸7݄͔Β8݄
    • ෳ਺୆ͷಉҰϋʔυ΢ΣΞ্ʹ4݄຤ΛػʹϦϓϨʔε
    • ैདྷख๏͸Apache2.4ɺఏҊख๏͸nginx1.11Ͱ࣮૷
    • ূ໌ॻ਺ͷ૿Ճ΍ϦΫΤετॲཧ਺ͷมԽͱൺֱ͠ͳ͕Βߟ࡯
    54
    ແྉূ໌ॻαʔϏεΛػʹ࣮ӡ༻্ͷධՁ

    View Slide

  55. ຊ൪؀ڥͷఏҊख๏ʹΑΔγεςϜߏ੒֓ཁ
    55
    ఏҊख๏ͷద༻Օॴ

    View Slide

  56. ຊ൪؀ڥͷϦόʔεϓϩΩγαʔόͷ࢓༷
    56
    ࢓༷
    $16 *OUFM9FPO&W()[UISFBE
    .FNPSZ (CZUFT
    4FSWFS /&$&YQSFTT&F.
    04 $FOU04

    View Slide

  57. 1ϲ݄ؒͷূ໌ॻ਺ͷભҠ
    57
    0
    5000
    10000
    15000
    20000
    25000
    1 6 11 16 21 26 31
    The number of cer-ficates
    day
    The number of cer-ficate in a month
    dynamic load preload
    Θ͔Γʹ͍͕͘Ұϲ݄Ͱ͔Β΁ͱ
    ূ໌ॻఔ౓૿͍͑ͯΔ
    ূ໌ॻ਺͸ϦϓϨʔεલͷഒ͔Βഒ

    View Slide

  58. 1ϲ݄ؒͷ1αʔό΁ͷඵؒHTTPϦΫΤετ਺
    58
    0
    200
    400
    600
    800
    1000
    1200
    1400
    1600
    1 6 11 16 21 26 31
    Requests/sec
    day
    Request/sec in a mouth
    dynamic load preload
    ϦϓϨʔεޙʹ-#ͷׂΓ౰ͯൺ཰͕มΘͬͨͨΊ
    )551ʴ)5514ϦΫΤετॲཧ਺͸ഒ͔Βഒ

    View Slide

  59. 1ϲ݄ؒͷCPU࢖༻཰ͷભҠ
    59
    0.00
    1.00
    2.00
    3.00
    4.00
    5.00
    6.00
    7.00
    8.00
    9.00
    1 6 11 16 21 26 31
    CPU usage(%)
    day
    CPU usage in a mouth
    dynamic load preload
    ূ໌ॻ਺͕͔Βഒʹ΋ؔΘΒͣ$16࢖༻཰͸ඍ͕ࠩͩ௿ݮ܏޲
    ສূ໌ॻ૿ՃͰ$16͸ఔ౓ඍ૿

    View Slide

  60. 1ϲ݄ؒͷϝϞϦ࢖༻཰ͷભҠ
    60
    0
    1000
    2000
    3000
    4000
    5000
    6000
    7000
    8000
    1 6 11 16 21 26 31
    Memory usage(MBytes)
    day
    Memory usage in a mouth
    dycamic load preload
    ূ໌ॻ਺͸͔Βഒʹ΋ؔΘΒͣϝϞϦ࢖༻཰͸௿ݮ
    ఏҊख๏͸ສҎ্૿Ճ͍ͯ͠Δূ໌ॻ਺ʹ΋΄΅ґଘ͍ͯ͠ͳ͍
    ূ໌ॻ਺૿Ճʹ൐͍ϝϞϦ࢖༻ྔ͸αʔόશମͰ(#ZUFTఔ౓૿Ճ

    View Slide

  61. • ैདྷख๏(preload)͸1ϗετ௥Ճ͋ͨΓϝϞϦ2.5MBytes૿Ճ
    • 2ສূ໌ॻͷ৔߹͸50GBytesҎ্ͷϝϞϦ͕ඞཁ
    • ϝϞϦ32GbytesͷαʔόͳͷͰैདྷख๏Ͱ͸طʹ௒ա
    • ఏҊख๏͸2ສূ໌ॻΛ௒͑ͯ΋໿3GbytesͰ΄΅Ұఆ
    • ຖ೔ͷreload͕ՄೳʹͳΓͦͷ૊Έ߹ΘͤʹΑ࣮ͬͯݱ
    61
    1ϲ݄ͷ࣮ӡ༻্ͷධՁ͔ΒϝϞϦͷ࢖༻ྔΛߟ࡯

    View Slide

  62. • ैདྷख๏͸20ສূ໌ॻΛॲཧ͢Δͷʹ500Gbytesඞཁ
    • 32GBytesͷαʔό͕15୆Ҏ্ඞཁ
    • ఏҊख๏͸20ສূ໌ॻͰ΋1୆ͰॲཧՄೳͷݟࠐΈ
    • 1ɺ2ສূ໌ॻ૿Ճͯ͠΋ϝϞϦ࢖༻ྔ͸3GBytesͰ΄΅Ұ
    ఆɺCPU࢖༻཰͸0.2ʙ0.5%૿Ճఔ౓
    62
    ϝϞϦ࢖༻ྔ͔Βඞཁͳϋʔυ΢ΣΞΛݟੵ΋Γ

    View Slide

  63. ఏҊख๏ʹΑΓαʔό୆਺Λ15෼ͷ1΁ͱ
    େ෯ʹ௿ݮՄೳͳݟੵ΋Γ

    View Slide

  64. 15෼ͷ1ʁ

    View Slide

  65. ͞Βʹઌ΁

    View Slide

  66. 100෼ͷ1Λ໨ࢦ͢

    View Slide

  67. ݕূ͍ͯ͘͠ͱ
    վળ͢ΔՕॴ͕ݟ͖͑ͯͨ

    View Slide

  68. • ϝϞϦ࢖༻ྔΛ͞Βʹ௿ݮͤ͞ΔઓུΛͱΔ
    • reloadͷ૊Έ߹ΘͤͰ΋૿ՃྔΛߋʹݮΒͤͨΒޮ཰ԽՄೳ
    • reloadΛ΍Ίͯ·ͣ͸૿ՃྔΛ֬ೝ
    • ͔ͦ͜Βո͍͠ίʔυͱઃఆΛϦϑΝΫλϦϯά͍ͯ͘͠
    • 4ϲ݄ؒͷϝϞϦભҠΛάϥϑԽ…..༧૝֎ʹϦʔΫ͍ͯͨ͠
    68
    ϝϞϦό΢ϯυͷ՝୊Λߋʹվળ͍ͨ͠

    View Slide

  69. 69
    0
    5000
    10000
    15000
    20000
    25000
    30000
    2017/07/02-09:00
    2017/07/04-09:00
    2017/07/06-09:00
    2017/07/08-09:00
    2017/07/10-09:00
    2017/07/12-09:00
    2017/07/14-09:00
    2017/07/16-09:00
    2017/07/18-09:00
    2017/07/20-09:00
    2017/07/22-09:00
    2017/07/24-09:00
    2017/07/26-09:00
    2017/07/28-09:00
    2017/07/30-09:00
    2017/08/01-09:00
    2017/08/03-09:00
    2017/08/05-09:00
    2017/08/07-09:00
    2017/08/09-09:00
    2017/08/11-09:00
    2017/08/13-09:00
    2017/08/15-09:00
    2017/08/17-09:00
    2017/08/19-09:00
    2017/08/21-09:00
    2017/08/23-09:00
    2017/08/25-09:00
    2017/08/27-09:00
    2017/08/29-09:00
    2017/08/31-09:00
    2017/09/02-09:00
    2017/09/04-09:00
    2017/09/06-09:00
    2017/09/08-09:00
    2017/09/10-09:00
    2017/09/12-09:00
    2017/09/14-09:00
    2017/09/16-09:00
    2017/09/18-09:00
    2017/09/20-09:00
    2017/09/22-09:00
    2017/09/24-09:00
    2017/09/26-09:00
    2017/09/28-09:00
    2017/09/30-09:00
    2017/10/02-09:00
    2017/10/04-09:00
    2017/10/06-09:00
    2017/10/08-09:00
    2017/10/10-09:00
    2017/10/12-09:00
    2017/10/14-09:00
    2017/10/16-09:00
    2017/10/18-09:00
    2017/10/20-09:00
    2017/10/22-09:00
    2017/10/24-09:00
    2017/10/26-09:00
    2017/10/28-09:00
    2017/10/30-09:00
    2017/11/01-09:00
    Memory Usage [MBytes]
    Day
    Memory Usage for Four Months
    Memory Usage
    ಈతॲཧຖ೔SFMPBE SFMPBEఀࢭத SFMPBEఀࢭத
    ϦϑΝΫλϦϯά
    ສυϝΠϯ)5514Խ
    ສυϝΠϯ)5514Խ
    SFMPBEఀࢭ

    View Slide

  70. • ngx_mrubyͷcacheΦϓγϣϯͰϦʔΫ͢Δύλʔϯ͋Δʁ
    • ݱࡏௐࠪதʢҟৗॲཧ࣌ʹϦʔΫ͍ͯ͠Δ͔΋ʣ
    • mruby_setͰ͸ͳ͘mruby_set_codeͳͲʹॻ͖׵͑
    • Ϋϥε΍ϞδϡʔϧΛmrbgemԽͯ͠Ϗϧυ࣌ʹ૊ΈࠐΈ
    • ྫ֎ॲཧ΍ҟৗͳΞΫηε΁ͷΤϥʔॲཧͷݟ௚͠
    70
    ϦϑΝΫλϦϯάͰ΍ͬͨ͜ͱ

    View Slide

  71. 71
    0
    5000
    10000
    15000
    20000
    25000
    30000
    2017/07/02-09:00
    2017/07/04-09:00
    2017/07/06-09:00
    2017/07/08-09:00
    2017/07/10-09:00
    2017/07/12-09:00
    2017/07/14-09:00
    2017/07/16-09:00
    2017/07/18-09:00
    2017/07/20-09:00
    2017/07/22-09:00
    2017/07/24-09:00
    2017/07/26-09:00
    2017/07/28-09:00
    2017/07/30-09:00
    2017/08/01-09:00
    2017/08/03-09:00
    2017/08/05-09:00
    2017/08/07-09:00
    2017/08/09-09:00
    2017/08/11-09:00
    2017/08/13-09:00
    2017/08/15-09:00
    2017/08/17-09:00
    2017/08/19-09:00
    2017/08/21-09:00
    2017/08/23-09:00
    2017/08/25-09:00
    2017/08/27-09:00
    2017/08/29-09:00
    2017/08/31-09:00
    2017/09/02-09:00
    2017/09/04-09:00
    2017/09/06-09:00
    2017/09/08-09:00
    2017/09/10-09:00
    2017/09/12-09:00
    2017/09/14-09:00
    2017/09/16-09:00
    2017/09/18-09:00
    2017/09/20-09:00
    2017/09/22-09:00
    2017/09/24-09:00
    2017/09/26-09:00
    2017/09/28-09:00
    2017/09/30-09:00
    2017/10/02-09:00
    2017/10/04-09:00
    2017/10/06-09:00
    2017/10/08-09:00
    2017/10/10-09:00
    2017/10/12-09:00
    2017/10/14-09:00
    2017/10/16-09:00
    2017/10/18-09:00
    2017/10/20-09:00
    2017/10/22-09:00
    2017/10/24-09:00
    2017/10/26-09:00
    2017/10/28-09:00
    2017/10/30-09:00
    2017/11/01-09:00
    Memory Usage [MBytes]
    Day
    Memory Usage for Four Months
    Memory Usage
    ಈతॲཧຖ೔SFMPBE SFMPBEఀࢭத SFMPBEఀࢭத
    ϦϑΝΫλϦϯά
    ສυϝΠϯ)5514Խ
    ສυϝΠϯ)5514Խ
    SFMPBEఀࢭ

    View Slide

  72. • ϦϑΝΫλϦϯάલ͸5೔Ͱ10GBఔ౓ϦʔΫ(1೔2GB)
    • ىಈ࣌͸αʔόશମͰϝϞϦ2GB઎༗͠1೔Ͱ2GBϦʔΫ͢
    Δঢ়گΛຖ೔reloadͯ͠ฏۉ3GBͰ҆ఆ͍ͤͯͨ͞
    • ϦʔΫରԠޙ͸5೔Ͱ250MBఔ౓ͷϦʔΫ(1೔50MB)
    • reloadͱ૊Έ߹ΘͤΔͱฏۉ2GBͰ҆ఆͰ͖ΔՄೳੑ͋Γ
    72
    ϦʔΫ໰୊ͷߟ࡯

    View Slide

  73. • ैདྷख๏͸200ສυϝΠϯͰ32GBytesαʔό͕150୆ඞཁ
    • ఏҊख๏͸ϝϞϦό΢ϯυͷ؍఺Ͱ1୆ʹऩ·ΔՄೳੑ͋Γ
    • 6ສυϝΠϯ૿ՃͰ1೔50MBͷϝϞϦ૿Ճʹऩ·Δܭࢉ
    • 200ສυϝΠϯͰ1೔2GBͷϝϞϦ૿Ճʹऩ·ΔՄೳੑ͋Γ
    • ϝϞϦҎ֎ͷΦʔόʔϔου͕Ͳ͜ʹग़ͯ͘Δ͔Λਵ࣌ධՁ
    73
    ཧ࿦తʹ΋αʔό୆਺ͷ100෼ͷ1͕ࢹ໺ʹ

    View Slide

  74. 7݄͔Β8݄ͷ2ϲ݄ؒͷτϥϑΟοΫมԽ
    74
    ূ໌ॻ਺͸ສ૿Ճ͕ͨ͠ɺ΋ͱ΋ͱ)551ͱ)5514྆ํॲཧ͍ͯ͠ΔͨΊ
    )551ͷυϝΠϯ͕)5514Խ͞Εͯ΋ͦΕ΄Ͳۃ୺ͳӨڹ͸ແ͍ɻ

    View Slide

  75. ܧଓతͳվળʹΑΓ
    αʔό୆਺100෼ͷ1Λݱ࣮΁

    View Slide

  76. ·ͱΊ

    View Slide

  77. • ߴूੵϚϧνςφϯτํࣜͷେྔূ໌ॻ؅ཧͷఏҊͱධՁ
    • ඞཁͳυϝΠϯͷΈͷಈతূ໌ॻಡΈࠐΈͱαʔόϓϩηε࠶
    ಡΈࠐΈͷ௿଎Խ๷ࢭʹΑΔϝϞϦղ์ͷ૊Έ߹ΘͤͰ࣮ݱ
    • ϋʔυ΢ΣΞίετΛ࡟ݮՄೳ(কདྷతʹ͸200ສυϝΠϯ)
    • ॲཧੑೳʹ΋࣮༻্໰୊ͳ͘ઃఆ൓ө΋ਝ଎ʹՄೳ
    77
    ·ͱΊ

    View Slide

  78. • 2017೥11݄Ͱ200ສυϝΠϯத໿7ສυϝΠϯ͕HTTPSԽ
    • ϝϞϦ࢖༻ྔʹج͍ͯreloadΛ࣮ࢪ͢ΔػೳΛ௥Ճ༧ఆ
    • ngx_mrubyࣗମ͕ࣗಈͰ࣮ࢪͰ͖ΔΑ͏ʹ͢Δ
    • reload͠ͳͯ͘΋ఆظతʹূ໌ॻσʔλΛύʔδͤ͞Δػೳ
    • τϥϑΟοΫό΢ϯυʹͳΓͦ͏ͳͷͰͦͷ؍఺Ͱݚڀ։ൃ
    78
    ࠓޙͷ՝୊

    View Slide

  79. • ϓϩμΫτͷ਺೥ޙΛݟਾ͑ͯઌߦͯ͠ݚڀ։ൃ
    • ࣍͸ࠃࡍձٞΛ௨ͯ͠ੈք΁ڞ༗͍ͯ͘͠
    • ৗʹઌΛߦ͖ϓϩμΫτ͕ग़ձ͏Ͱ͋Ζ͏นΛ৐Γӽ͑ଓ͚Δ
    • ࠓճ΋ී௨ʹ΍͍ͬͯͨΒେมίετ͕͔͔͍ͬͯͨ
    • ී௨ͩͱࢥ͑ͯ͠·͏ʮ౰ͨΓલͷݶքʯ͕͋Δ
    • ࠓ͋Δٕज़΍ৗࣝΛৗʹ͍ٙվળΛ৴ͯ͡औΓ૊Έଓ͚Δ
    79
    ਓͷൃ૝ʹج൫ٕज़͕଱͑͏Δঢ়ଶΛ໨ࢦ͢

    View Slide

  80. ʮ౰ͨΓલͷݶքʯΛ௒͍͑ͯ͘

    View Slide