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

prevs.io開発の裏側とコンテナ仮想化時代のAPI運用

 prevs.io開発の裏側とコンテナ仮想化時代のAPI運用

API Meetup Tokyo #7での発表資料です

Naoki Ainoya

March 27, 2015
Tweet

More Decks by Naoki Ainoya

Other Decks in Programming

Transcript

  1. QSFWTJP։ൃͷཪଆͱ
    ίϯςφԾ૝Խ࣌୅ͷ"1*ӡ༻
    BQJNFFUVQ
    naokiainoya

    View Slide

  2. "CPVUNF
    ૬໺୩௚थ
    "*/0:"/BPLJ
    αʔόαΠυΤϯδχΞ
    ainoya
    naokiainoya

    View Slide

  3. ͜͜Ͱಇ͍ͯ·͢ɻ

    View Slide

  4. A tiny deployment pipeline tool
    walter-cd/walter
    Open source project

    View Slide

  5. Personal project
    by
    @mookjp, and me

    View Slide

  6. View Slide

  7. prevs.io
    2"؀ڥߏஙαʔϏε
    ଟ෼
    1BB4
    %PDLFSPO"84

    View Slide

  8. º

    View Slide

  9. prevs.ioͱ͸

    View Slide

  10. View Slide

  11. ᶃର৅ͱͳΔΞϓϦέʔγϣϯͷ
    HJUϦϙδτϦΛઃఆ

    View Slide

  12. ᶄHJUίϛοτ*%΍ϒϥϯν໊Λ
    ؚΉQSFWTJPͷ63-ʹΞΫηε
    ᶃର৅ͱͳΔΞϓϦέʔγϣϯͷ
    HJUϦϙδτϦΛઃఆ

    View Slide

  13. ᶄHJUίϛοτ*%΍ϒϥϯν໊Λ
    ؚΉQSFWTJPͷ63-ʹΞΫηε
    ᶅίϛοτ*%࣌఺ͰͷιʔεͰ
    8FCΞϓϦέʔγϣϯΛىಈ
    ᶃର৅ͱͳΔΞϓϦέʔγϣϯͷ
    HJUϦϙδτϦΛઃఆ
    Ϗϧυதը໘

    View Slide

  14. ᶄHJUίϛοτ*%΍ϒϥϯν໊Λ
    ؚΉQSFWTJPͷ63-ʹΞΫηε
    ᶅίϛοτ*%࣌఺ͰͷιʔεͰ
    8FCΞϓϦέʔγϣϯΛىಈ
    ᶃର৅ͱͳΔΞϓϦέʔγϣϯͷ
    HJUϦϙδτϦΛઃఆ
    ᶆ8FCΞϓϦέʔγϣϯىಈޙɼ
    Ϩεϙϯεฦ٫
    XFCϒϥ΢βը໘

    View Slide

  15. http://5c80e7d.yourapp.prevs.io
    http://893c39d.yourapp.prevs.io
    http://de2c1d1.yourapp.prevs.io
    http://a7e7b86.yourapp.prevs.io
    http://a53dd8d.yourapp.prevs.io
    http://010c1a0.yourapp.prevs.io
    http://47517fc.yourapp.prevs.io
    ιʔεόʔδϣϯͱΞϓϦέʔγϣϯͷ̍ର̍ରԠ

    View Slide

  16. Marketer
    Engineer
    ͜ͷલ΍ͬͯ͘ΕͨվળҊ"ͷ
    ը໘ɼͪΐͬͱݟͤͯ͘Εͳ͍ʁ
    ෼͔Γ·ͨ͠ʙɽվળҊ"Λ
    εςʔδϯάʹσϓϩΠ͠·ͨ͠ ྃղʔ
    ͋ͱͰݟͱ͘Ͷɽ
    ೔ޙ

    ͋Εʁ͜ͷը໘"Ҋͷ͡Όͳ͘ͳ
    ͍ʁͲ͏ͳͬͯΜͷʁ
    εςʔδϯάผͷҊ݅Ͱ࢖͍·
    ͢ʔɽ
    ͋ɼ͍͢·ͤΜଞͷ֬ೝͰ
    εςʔδϯά࢖ͬͯ·ͨ͠ʜɽ
    ૣ͘νΣοΫ͍ͨ͠Μ͚ͩͲʂ
    ͋ɼࠓσϓϩΠ͠ͳ͓͠·ͨ͠ʂ
    ʢࣗ෼Ͱ΍Ε͹͍͍ͷʹ

    ֬ೝͰ͖·ͨ͠ʔɽ
    ͋ͱվળҊ#΋΍ͬͺΓؾʹͳΔ
    ͔ΒεςʔδϯάͰݟͤͯ͞
    ͋ɼࠓଞͷ2"Ͱεςʔδϯά
    ࢖ͬͯͯͰ͖ͳ͍Ͱ͢ʜɽ
    ͏Δ͍͞ૣ͘΍Εʂ
    ୀ৬ͩ
    8FC։ൃ͋Δ͋Δ

    View Slide

  17. de2c1d1.yourapp.prevs.io
    deaafe1d1.yourapp.prevs.io
    2131ap23bg.yourapp.prevs.io
    12th9axp.yourapp.prevs.io
    12thx8axp.yourapp.prevs.io
    a0pbzx01.yourapp.prevs.io
    loi823xf.yourapp.prevs.io
    loi81x3xf.yourapp.prevs.io
    lo30x0p1q.yourapp.prevs.io
    lo30233z.yourapp.prevs.io
    Preview ALL
    versions of
    your application

    View Slide

  18. But,
    How It
    Works?
    de2c1d1.yourapp.prevs.io
    deaafe1d1.yourapp.prevs.io
    2131ap23bg.yourapp.prevs.io
    12th9axp.yourapp.prevs.io
    12thx8axp.yourapp.prevs.io
    a0pbzx01.yourapp.prevs.io
    loi823xf.yourapp.prevs.io
    loi81x3xf.yourapp.prevs.io
    lo30x0p1q.yourapp.prevs.io
    lo30233z.yourapp.prevs.io

    View Slide

  19. ΞϓϦέʔγϣϯͷόʔδϣϯຖʹ
    ͭͷίϯςφΛىಈ
    QSFWTJPͷΞʔΩςΫνϟ֓؍
    ͜͜Ͱ࢖ͬͯΔ

    View Slide

  20. %PDLFS͓͞Β͍
    %PDLFS͕ग़͖ͯͨͱ͜ΖͰʜ

    View Slide

  21. %PDLFS͓͞Β͍
    %PDLFSΛ࢖͏ར఺
    IUUQXXXTMJEFTIBSFOFUUJNPUIZTDBQBDIFDPOFV

    View Slide

  22. “The open-source application container engine”

    ίϯςφԾ૝Խٕज़͕ϕʔεͷ

    ΞϓϦέʔγϣϯ؅ཧιϦϡʔγϣϯ
    ࠓճ஫໨͍ͨͭ͠ͷϝϦοτ
    w ΞϓϦέʔγϣϯͷϙʔλϏϦςΟ޲্
    w ϋʔυ΢ΣΞϦιʔεͷந৅Խ

    View Slide

  23. ΞϓϦέʔγϣϯͷϙʔλϏϦςΟ޲্
    ‣ ্ཱ͕ͪΓ͕ૣ͍

    ϋΠύʔόΠβܕԾ૝Խʹൺ΂ɼىಈ͕ߴ଎

    http://image.slidesharecdn.com/why-docker-website-130719212914-phpapp01-131208123039-phpapp01/95/hypervisor-versus-linux-
    containers-with-docker-25-638.jpg?cb=1386527777

    View Slide

  24. ΞϓϦέʔγϣϯͷϙʔλϏϦςΟ޲্
    ‣ ΞϓϦέʔγϣϯͷ؅ཧͷ͠΍͢͞

    %PDLFSpMFʹઃఆΛهड़͢Δ͚ͩ


    View Slide

  25. IUUQXXXTMJEFTIBSFOFUGBTHPODBMWFTIZQFSWJTPSWFSTVTMJOVYDPOUBJOFST

    View Slide

  26. ϋʔυ΢ΣΞϦιʔεͷந৅Խ
    ‣ -JOVYDHSPVQT

    ίϯςφ୯ҐͰϋʔυ΢ΣΞϦιʔεͷ

    ׂΓ౰ͯΛ੍ޚ

    $  docker  run  -­‐c  256  -­‐m  512m  your-­‐rails-­‐app

    View Slide

  27. ϋʔυ΢ΣΞϦιʔεͷந৅Խ
    ‣ Φʔόʔϔουͷগͳ͞

    ϋΠύʔόΠβܕʹൺ΂͓ͯಘ
    http://www.slideshare.net/wavemakersoftware/webinar-docker-apaas-enterprise-innovation-and-trends-for-2015

    View Slide

  28. http://www.slideshare.net/mesosphere/apache-mesos-and-mesosphere-live-webcast-by-ceo-and-cofounder-florian-li

    View Slide

  29. ͭͷར఺͕΋ͨΒ͢΋ͷ
    ‣ ΞϓϦέʔγϣϯͷϙʔλϏϦςΟ޲্
    ‣ $*؀ڥߏஙͷ༰қԽ
    ‣ ϋʔυ΢ΣΞϦιʔεͷந৅Խ
    ‣ Ϧιʔεͷޮ཰తͳར༻

    View Slide

  30. $*؀ڥߏஙͷ༰қԽ
    ‣ ςετͷͨͼʹαʔό؀ڥΛ࢖͍ࣺͯɼ͕
    ؆୯ʹͰ͖ΔΑ͏ʹͳͬͨ

    View Slide

  31. $*؀ڥߏஙͷ༰қԽ
    ΞϓϦέʔγϣϯͷόʔδϣϯຖʹ
    ͭͷίϯςφΛىಈ

    View Slide

  32. $*؀ڥߏஙͷ༰қԽ
    ϦΫΤετ͕͋ͬͨ࣌఺Ͱର৅ͷEPDLFSJNBHFΛϏϧυ͢Δ

    View Slide

  33. $*؀ڥߏஙͷ༰қԽ
    ಉ࣌࠷େίϯςφ਺ͷઃఆʹԠ͡
    ݹ͍΋ͷ͔Βॱʹίϯςφ͸࡟আ͞ΕΔ

    View Slide

  34. $*؀ڥߏஙͷ༰қԽ
    ඞཁͳͱ͖ɼඞཁͳ෼͚ͩͷ
    2"؀ڥ͕࢖͑Δ

    View Slide

  35. ϋʔυ΢ΣΞϦιʔεͷޮ཰తͳར༻
    ‣ ىಈͷૣ͞ɼίϯςφ୯ҐͰͷ

    Ϧιʔε੍ݶ
    ‣ αʔϏεͷधཁʹԠ͡ɼϋʔυ΢ΣΞϦιʔ
    εΛޮ཰Α͘഑෼Ͱ͖ΔΑ͏ʹͳͬͨ

    View Slide

  36. Data Center Operating
    System
    Apache mesosphere
    σʔληϯλͷαʔό܈Λͻͱ·ͱΊͷ
    ϦιʔεͷΑ͏ʹѻ͑ΔγεςϜ
    ෆ׆αʔόΛۃݶ·ͰݮΒͨ͢ΊͷΞΠσΞ

    View Slide

  37. View Slide

  38. ࣌ؒ͝ͱʹϦιʔεधཁ͕
    ͹Β͹Βͳαʔό
    ෆ׆ঢ়ଶ͕ଟ͘ɼແବ
    धཁʹԠͯ͡
    ϦιʔεΛద੾ʹ഑෼
    http://www.slideshare.net/tomasbart/introduction-to-apache-mesos?related=3

    View Slide

  39. http://www.slideshare.net/mesosphere/apache-mesos-and-mesosphere-live-webcast-by-ceo-and-cofounder-florian-li

    View Slide

  40. %PDLFSͷपลٕज़͕

    "1*ʹ΋ͨΒ͢͜ͱ
    Ԡ༻ࣄྫͱ͜Ε͔Β

    View Slide

  41. w ΞϓϦέʔγϣϯͷϙʔλϏϦςΟ޲্
    w ϋʔυ΢ΣΞϦιʔεͷந৅Խ

    View Slide

  42. w ඇಉظ"1*
    w "1*ϧʔςΟϯά
    w "1*ΦʔέετϨʔγϣϯ
    º

    View Slide

  43. ඇಉظAPI
    º

    View Slide

  44. ඇಉظ"1*
    w ॲཧͷ։࢝ཁٻͱ݁Ռͷऔಘ͕ผͷ"1*
    w σʔλॲཧ
    w ूܭॲཧ
    w +PC2VFVFγεςϜ΁ͷΠϯλʔϑΣΠε
    http://www.slideshare.net/apijp/webapthegoodparts-p

    View Slide

  45. ඇಉظ"1*ͷΠϯϑϥ՝୊
    w +PC2VFVFγεςϜ΁ͷΠϯλʔϑΣΠε
    w ॲཧཁٻͷ࣌ؒଳʹϜϥ͕͋ͬͨΓ
    w +PCͷॲཧ಺༰ʹԠͯ͡ҟͳΔύοέʔδ͕
    ඞཁͩͬͨΓ

    View Slide

  46. ඇಉظ"1*αʔϏε*SPOJPͰͷEPDLFS׆༻ࣄྫ

    View Slide

  47. High-Scale Async Task Processing
      #  Worker  code  can  be  anything  you  want.  
      puts  "Payload:  #{params}"  
      puts  "Simulating  hard  work  for  5  seconds..."  
      5.times  do  |i|  
      puts  "Sleep  #{i}..."  
      sleep  1  
      end  
      puts  "Completed  at  #{Time.now}"  
      #  Create  hello.worker  file  
      #  define  the  runtime  language  
      runtime  'ruby'  
      #  exec  is  the  file  that  will  be  executed:  
      exec  'hello_worker.rb'  
      #  Upload  Worker  
      $  iron_worker  upload  hello  
      #  Queue  Workers  
      require  "iron_worker_ng"  
      client  =  IronWorkerNG::Client.new  
      #  launch  100  tasks  in  parallel  
      100.times  do  
      client.tasks.create("hello",  foo:  "bar")  
      end  
      #  Run  task  once  per  hour  at  high  priority  
      $  iron_worker  schedule  hello  \    
                       —start-­‐at  "2013-­‐01-­‐01T00:00:00-­‐04:00"  \  
               -­‐-­‐run-­‐every  3600  -­‐-­‐priority  2  

    View Slide

  48. http://blog.iron.io/2014/10/docker-in-production-what-weve-learned.html

    View Slide

  49. http://blog.iron.io/2014/10/docker-in-production-what-weve-learned.html

    View Slide

  50. http://blog.iron.io/2014/10/docker-in-production-what-weve-learned.html

    View Slide

  51. http://blog.iron.io/2014/10/docker-in-production-what-weve-learned.html

    View Slide

  52. http://blog.iron.io/2014/10/docker-in-production-what-weve-learned.html

    View Slide

  53. *SPOJP͕EPDLFS࠾༻Ͱಘͨ͜ͱ
    w XPSLFSͷෳ਺ϓϥοτϑΥʔϜରԠ

    ҟͳΔݴޠຖʹJNBHFΛ༻ҙ͢Δ͚ͩͰΑ͍
    w XPSLFSผͷϦιʔε഑෼

    λεΫ༏ઌ౓ͳͲʹԠͯ͡ʜ

    View Slide

  54. APIϧʔςΟϯά
    º

    View Slide

  55. "1*ϧʔςΟϯά
    w "1*όʔδϣϯW W WʜͳͲ

    ϧʔςΟϯάʹ·ͭΘΔ໰୊
    HJUIVC"1*"DDFQUϔομʹόʔδϣϯΛهड़

    View Slide

  56. "1*όʔδϣχϯάͷྫ
    w "1*όʔδϣϯW W Wʜ

    ϧʔςΟϯάʹ·ͭΘΔ໰୊
    1BSTFDPN"1*BQJͷύεͰόʔδϣϯࢦఆ

    View Slide

  57. "1*ϧʔςΟϯάͷΠϯϑϥ՝୊
    w ύε΍ϔομΛݩʹͨ͠ϧʔςΟϯά
    w ෳࡶͳϧʔϧ
    w "1*όʔδϣϯ͝ͱʹҟͳΔόοΫΤϯυαʔό
    w ผϒϥϯνɼผݴޠ
    w NJDSPTFSWJDFT

    View Slide

  58. "1*ϧʔςΟϯάͷΠϯϑϥ՝୊
    w όοΫΤϯυͷಈత੾Γସ͑
    w ΞϓϦέʔγϣϯΛEPDLFSίϯςφͰߏ੒
    ͢Δ৔߹͸ಛʹʜ

    View Slide

  59. mailgun/vulcand
    w "1*ͷϧʔςΟϯάΛϓϩάϥϚϒϧʹ

    ੍ޚͰ͖ΔϓϩΩγ

    View Slide

  60. mailgun/vulcand
    w ઃఆΛFUDE ෼ࢄ,74ʣʹอଘ

    όοΫΤϯυαʔό౳ͷಈతมߋ͕Մೳ


    FUDE ෼ࢄ,74

    ઃఆ؅ཧ
    όοΫΤϯυαʔό܈

    View Slide

  61. όοΫΤϯυͷಈతมߋ
    w FUDEͷ3&45"1*ܦ༝ͰͷઃఆมߋʹΑͬͯ

    ແఀࢭσϓϩΠ͕Մೳ

    FUDE ෼ࢄ,74

    ઃఆ؅ཧ
    όοΫΤϯυαʔό܈
    όοΫΤϯυαʔόͷ௥Ճ

    View Slide

  62. "1*ϧʔςΟϯάपΓͷΠϯϑϥ՝୊ղܾ
    w ෳࡶͳϧʔςΟϯάɼNJDSPTFSWJDF
    w ϓϩάϥϚϒϧͳϓϩΩγͱ͍͏ղܾࡦ
    w NBJMHVOWVMDBOE
    w ෼ࢄ,74ͰઃఆΛ؅ཧ͢ΔΞϓϩʔν

    View Slide

  63. "1*ϧʔςΟϯάपΓͷΠϯϑϥ՝୊ղܾ
    w ॊೈͳϧʔςΟϯά
    w αʔϏεͷૄ݁߹Խ
    w όοΫΤϯυͷಈతͳมߋ
    w ແఀࢭσϓϩΠ
    w ΦʔτεέʔϧʹΑΔϦιʔεར༻ޮ཰Խ
    w ΞϓϦέʔγϣϯͷίϯςφԽͱͷ૬৐ޮՌ

    View Slide

  64. ΞϓϦέʔγϣϯଆʹ"1*ϧʔςΟϯάͷϩδοΫ͕͋Δ৔߹
    αʔϏεͷංେԽΛট͖΍͍͢
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  65. WVMDBOEͷΑ͏ͳ"1*Ϛωδϝϯτ૚ʹϧʔςΟϯάΛ೚ͤΔ
    αʔϏεͷػೳ֦ு͕͠΍͘͢ͳΔ
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  66. APIΦʔέετϨʔγϣϯ
    º

    View Slide

  67. NJDSPTFSWJDFΞʔΩςΫνϟͷྲྀߦ
    খ͞ͳαʔϏε܈ͷू߹
    http://blog.giantswarm.io/docker-and-related-services-enable-a-future-of-microservices-for-everyone

    View Slide

  68. NJDSPTFSWJDFΞʔΩςΫνϟͷྲྀߦ

    ػೳ୯ҐͰνʔϜ͕͋Γɼ
    νʔϜ͝ͱʹҟͳΔݴޠɾΞϓϦέʔγϣϯ
    http://blog.giantswarm.io/docker-and-related-services-enable-a-future-of-microservices-for-everyone

    View Slide

  69. NJDSPTFSWJDFΞʔΩςΫνϟͷྲྀߦ
    ௒ۃ୺ͳྫ
    ̍Ϧιʔε̍ΞϓϦέʔγϣϯ
    http://blog.giantswarm.io/docker-and-related-services-enable-a-future-of-microservices-for-everyone

    View Slide

  70. NJDSPTFSWJDFTͱΫϥΠΞϯτ"1*ؒͷ
    ΠϯϐʔμϯεϛεϚον
    ΫϥΠΞϯτ͕ཉ͍͠"1*ͱγεςϜͷཻ౓͕ҟͳΔ
    http://blog.giantswarm.io/docker-and-related-services-enable-a-future-of-microservices-for-everyone

    View Slide

  71. ΦʔέετϨʔγϣϯ૚Ͱ

    ΫϥΠΞϯτʹ΍͍͞͠"1*Λ࡞Δ
    http://www.slideshare.net/apijp/webapthegoodparts-p

    View Slide

  72. NJDSPTFSWJDFΞʔΩςΫνϟʹ͓͚Δ։ൃ࣌ͷ՝୊
    ͓ޓ͍ͷ؀ڥΛߏஙͰ͖ͳ͍
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  73. NJDSPTFSWJDFΞʔΩςΫνϟʹ͓͚Δӡ༻࣌ͷ՝୊
    Πϯϑϥӡ༻νʔϜ΁ͷෛՙ
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  74. %PDLFSίϯςφʹΑΔαʔϏεͷந৅Խ
    ػೳ։ൃνʔϜ͕EPDLFSίϯςφΛ֤ࣗʹ࡞੒
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  75. %PDLFSίϯςφʹΑΔαʔϏεͷந৅Խ
    νʔϜؒͷ։ൃίϛϡχέʔγϣϯ͕
    %PDLFSpMFͱ͍͏γϯϓϧͳڞ௨ݴޠͰ؆୯ʹ
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  76. %PDLFSίϯςφʹΑΔαʔϏεͷந৅Խ
    ӡ༻νʔϜ͸ڞ௨Խ͞ΕͨEPDLFSΠϯϑϥ؀ڥͷ
    ໘౗ΛݟΔ͚ͩ
    http://tech.gc.com/scaling-engineering-with-docker/

    View Slide

  77. w ඇಉظ"1*
    w "1*ϧʔςΟϯά
    w "1*ΦʔέετϨʔγϣϯ
    º

    View Slide

  78. ͜Ε͔Βͷ"1*ӡ༻
    w EPDLFSؔ࿈Ͱ཈͓͖͍͑ͯͨར఺
    w ΞϓϦέʔγϣϯͷϙʔλϏϦςΟ޲্
    w Ϧιʔεͷར༻ޮ཰Խ

    View Slide

  79. ʠશ͕ͯ"1*ʹͳΔʡཪଆͰ
    ʠશ͕ͯίϯςφʡʹͳΖ͏ͱ͍ͯ͠Δ

    View Slide

  80. ϦϦʔε͸΋͏͠͹Β͓͘଴͍ͪͩ͘͞ʜ
    ໨Լ։ൃதͰ͢ɽ

    View Slide

  81. OSS͋Γ·͢
    https://github.com/mookjp/pool

    View Slide

  82. ଴ͯͳ͍͔ͨ͸ͪ͜Β
    https://github.com/mookjp/pool

    View Slide