Ruby App on Netflix Microservices Stack

Ruby App on Netflix Microservices Stack

At Tokyu RubyKaigi 09 #tqrk09

Cf7b553387b247d737c60cfceabb2cea?s=128

Naoto Takai

August 29, 2015
Tweet

Transcript

  1. /FUqJYͷNJDSPTFSWJDFTελοΫͰ 3VCZΞϓϦέʔγϣϯΛಈ͔ͯ͠ΈΔ

  2. None
  3. σϞ

  4. docker-machine ls NAME ACTIVE DRIVER STATE URL default * virtualbox

    Running tcp://192.168.99.100:23 docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports} {{(index $conf 0).HostPort}} {{end}}' zuul_messenger 8080/tcp -> 8000 curl http://192.168.99.100:8000 {"message":"Minnano Wedding is hiring."}
  5. Έͳ͞Μɺ͜Μͳ͜ͱʹ͓ࠔΓͰ͔͢ʁ

  6. w ରԠσόΠε͕ଟ͍ʢҎ্ʣ w τϥϑΟοΫ͕ଟ͍ʢશถͷʣ

  7. ͨͿΜ͍ͳ͍ʜʜ

  8. /FUqJYελοΫ͸NJDSPTFSWJDFT
 ΞʔΩςΫνϟͷ୅දྫ

  9. EPO`UFWFODPOTJEFSNJDSPTFSWJDFT VOMFTTZPVIBWFBTZTUFNUIBUTUPP DPNQMFYUPNBOBHFBTBNPOPMJUI IUUQNBSUJOGPXMFSDPNCMJLJ.JDSPTFSWJDF1SFNJVNIUNM

  10. IUUQNBSUJOGPXMFSDPNCMJLJ.JDSPTFSWJDF1SFNJVNIUNM

  11. ૊৫ʹΑͬͯʮෳࡶʯͷఆٛ͸ҟͳΔ

  12. None
  13. ڞ௨ϥϯλΠϜαʔϏεͱϥΠϒϥϦʔ ŠŠϚΠΫϩαʔϏεΛՃ଎͢ΔϥϯλΠϜίϯςφʔͱϥΠϒϥϦʔɺαʔϏεɻ Ϋϥ΢υϓϥοτϑΥʔϜ͸ɺ/FUqJYͷେ෦෼Λ઎ΊΔαʔϏε܈ͷجૅͰ͋ΓɺςΫϊϩδʔελοΫͰ͢ɻ Ϋϥ΢υϓϥοτϑΥʔϜ͸ɺΫϥ΢υαʔϏε΍ΞϓϦέʔγϣϯϥΠϒϥϦɺΞϓϦέʔγϣϯίϯς φ͔Βߏ੒͞Ε·͢ɻಛʹϓϥοτϑΥʔϜʹΑͬͯɺ&VSFLBʹΑΔαʔϏεσΟεΧόϦɺ"SDIBJVTʹΑΔ ෼ࢄઃఆ؅ཧɺ3JCCPOʹΑΔϨδϦΤϯεͰΠϯςϦδΣϯτͳϓϩηεʗαʔϏεؒ௨৴ͳͲ͕ɺఏڙ͞ Ε·͢ɻ୯ҰͷαʔϏεݺͼग़͠ʹͱͲ·Βͳ͍৴པੑΛఏڙ͢ΔͨΊʹɺ)ZTUSJYʹΑͬͯϥϯλΠϜͰಠ ཱͨ͠଱ϨΠςϯγͱ଱ো֐ੑ͕ఏڙ͞Ε·͢ɻ͜ΕΒͷϥΠϒϥϦʔ΍αʔϏε͸ɺ+7.ϕʔείϯςφͰ ͋Ε͹ͲͷΑ͏ͳ؀ڥͰ΋ಈ࡞͠·͢ɻ ·ͨɺϓϥοτϑΥʔϜ͸+7.ίϯςφαʔϏεΛɺ,BSZPOͱ(PWFSOBUPSɺඇ+BWBϥϯλΠϜ؀ڥ޲͚ʹ͸

    1SBOBαΠυΧʔʹΑΓɺఏڙ͠·͢ɻ1SBOB͕Πϯελϯε಺ͰϓϩΩγػೳΛఏڙ͢Δͷʹର͠ɺ;VVM ʢ)ZTUSJYͱ&VSFLBɺ3JCCPOͷϓϩηεؒ௨৴ػೳΛ౷߹͢Δ΋ͷʣ͸ɺΫϥ΢υ؀ڥͷڥքʹ͓͚Δಈతʹ εΫϦϓτʹΑ੍ͬͯޚՄೳͳϓϩΩγΛఏڙ͠·͢ɻ
  14. ύϧεͷϑΝϧγͷϧγ͕ ύʔδͰίΫʔϯʘ ?P? ʗ

  15. ڞ௨ϥϯλΠϜαʔϏεͱϥΠϒϥϦʔ ŠŠϚΠΫϩαʔϏεΛՃ଎͢ΔϥϯλΠϜίϯςφʔͱϥΠϒϥϦʔɺαʔϏεɻ Ϋϥ΢υϓϥοτϑΥʔϜ͸ɺ/FUqJYͷେ෦෼Λ઎ΊΔαʔϏε܈ͷجૅͰ͋ΓɺςΫϊϩδʔελοΫͰ͢ɻ Ϋϥ΢υϓϥοτϑΥʔϜ͸ɺΫϥ΢υαʔϏε΍ΞϓϦέʔγϣϯϥΠϒϥϦɺΞϓϦέʔγϣϯίϯς φ͔Βߏ੒͞Ε·͢ɻಛʹϓϥοτϑΥʔϜʹΑͬͯɺ&VSFLBʹΑΔαʔϏεσΟεΧόϦɺ"SDIBJVTʹΑΔ ෼ࢄઃఆ؅ཧɺ3JCCPOʹΑΔϨδϦΤϯεͰΠϯςϦδΣϯτͳϓϩηεʗαʔϏεؒ௨৴ͳͲ͕ɺఏڙ͞ Ε·͢ɻ୯ҰͷαʔϏεݺͼग़͠ʹͱͲ·Βͳ͍৴པੑΛఏڙ͢ΔͨΊʹɺ)ZTUSJYʹΑͬͯϥϯλΠϜͰಠ ཱͨ͠଱ϨΠςϯγͱ଱ো֐ੑ͕ఏڙ͞Ε·͢ɻ͜ΕΒͷϥΠϒϥϦʔ΍αʔϏε͸ɺ+7.ϕʔείϯςφͰ ͋Ε͹ͲͷΑ͏ͳ؀ڥͰ΋ಈ࡞͠·͢ɻ ·ͨɺϓϥοτϑΥʔϜ͸+7.ίϯςφαʔϏεΛɺ,BSZPOͱ(PWFSOBUPSɺඇ+BWBϥϯλΠϜ؀ڥ޲͚ʹ͸

    1SBOBαΠυΧʔʹΑΓɺఏڙ͠·͢ɻ1SBOB͕Πϯελϯε಺ͰϓϩΩγػೳΛఏڙ͢Δͷʹର͠ɺ;VVM ʢ)ZTUSJYͱ&VSFLBɺ3JCCPOͷϓϩηεؒ௨৴ػೳΛ౷߹͢Δ΋ͷʣ͸ɺΫϥ΢υ؀ڥͷڥքʹ͓͚Δಈతʹ εΫϦϓτʹΑ੍ͬͯޚՄೳͳϓϩΩγΛఏڙ͠·͢ɻ
  16. w ରԠσόΠε͕ଟ͍ʢҎ্ʣ w τϥϑΟοΫ͕ଟ͍ʢશถͷʣ

  17. ରԠσόΠε͕ଟ͍͔ΒɺσόΠε͝ͱͷࠩҟΛ ड͚ೖΕɺσόΠεຖʹ࠷దԽ͞ΕͨϨεϙϯε Λฦ٫͢Δඞཁ͕͋Δɻ

  18. ΫϥΠΞϯτ 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε 3FTPVSDFCBTFE"1*

  19. ΫϥΠΞϯτ 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε "1*(BUFXBZ &YQFSJFODFCBTFE"1* Ϋϥ΢υ؀ڥͷڥքʹ͓͚Δ

    ಈతʹεΫϦϓτʹΑ੍ͬͯ ޚՄೳͳϓϩΩγ
  20. ରԠσόΠε͕ଟ͍͔ΒɺҰ෦ͷσόΠε͕ར༻ ͢Δ෦෼ͷͨΊ͚ͩʹɺΞϓϦέʔγϣϯશମ͕ Τϥʔʹͳͬͯ΄͘͠ͳ͍ɻ

  21. ΫϥΠΞϯτ 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε "1*(BUFXBZ

  22. ΫϥΠΞϯτ 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε 3&45GVM"1* Ϧιʔε "1*(BUFXBZ ଱ϨΠςϯγͱ଱ো֐ੑ

  23. ରԠσόΠε͕ଟ͍͔ΒɺҰ෦ͷσόΠε͕ར༻ ͢Δ෦෼ͷͨΊ͚ͩʹɺΞϓϦέʔγϣϯશମΛ εέʔϧͤͨ͘͞ͳ͍ɻ

  24. ϩʔυόϥϯα "1*(BUFXBZ αʔϏε ϊʔυ αʔϏε ϊʔυ αʔϏε ϊʔυ αʔϏεͷ਺͕૿Ճ͢ΔʹͭΕ ϩʔυόϥϯαͷ؅ཧ͕ࠔ೉ʹ

    ͳΔ
  25. "1*(BUFXBZ αʔϏε ϊʔυ αʔϏε ϊʔυ αʔϏε ϊʔυ ΫϥΠΞϯταΠυϩʔυόϥϯγϯά ʹΑΔϨδϦΤϯεͰΠϯςϦδΣϯτ ͳϓϩηεʗαʔϏεؒ௨৴

  26. αʔϏεσΟεΧόϦʹΑΔ
 ಈతͳϊʔυͷొ࿥ͱཁٻ "1*(BUFXBZ αʔϏε ϊʔυ αʔϏε ϨδετϦ ొ࿥ Ұཡ

  27. αʔϏεϨδετϦ΁ͷొ࿥ͳͲΛ
 ఏڙ͢Δ+7.ίϯςφαʔϏε αʔϏε ϨδετϦ ొ࿥ ϔϧενΣοΫ ίϯςφαʔϏε ΞϓϦέʔγϣϯ

  28. ϦΫΤετ ΫϥΠΞϯτ ΞϓϦέʔγϣϯ "1*(BUFXBZ αʔϏε ϨδετϦ Ϩεϙϯε ొ࿥ ϦΫΤετ Ұཡ

    Ϩεϙϯε ΞϓϦέʔγϣϯ ίϯςφαʔϏε ΞϓϦέʔγϣϯ ίϯςφαʔϏε ϩʔυόϥϯγϯάʴ ଱ϨΠςϯγɾ଱ো֐ϨΠϠʔ
  29. ;VVM 3JCCPO )ZTUSJY &VSFLB ,BSZPO 1SBOB ϦΫΤετ ΫϥΠΞϯτ ΞϓϦέʔγϣϯ "1*(BUFXBZ

    αʔϏε ϨδετϦ Ϩεϙϯε ొ࿥ ϦΫΤετ Ұཡ Ϩεϙϯε ΞϓϦέʔγϣϯ ίϯςφαʔϏε ΞϓϦέʔγϣϯ ίϯςφαʔϏε ϩʔυόϥϯγϯάʴ ଱ϨΠςϯγɾ଱ো֐ϨΠϠʔ
  30. require 'sinatra' require 'sinatra/json' get '/' do json(message: 'Minnano Wedding

    is hiring.') end get '/status' do json(status: 'OK') end
  31. w αʔϏεϨδετϦ΁ͷࣗ෼ࣗ਎ͷొ࿥ w αʔϏεϨδετϦ͔ΒͷϔϧενΣοΫ w ଞαʔϏεͷσΟεΧόϦͱΫϥΠΞϯταΠυ ϩʔυόϥϯγϯά w ઃఆ৘ใͷऔಘɺߋ৽ʢࠓճ͸ݴٴ͍ͯ͠ͳ͍ʣ

  32. αΠυΧʔύλʔϯʹΑΓ ଞαʔϏεϊʔυʹରͯ͠ Πϯελϯε಺ͰϓϩΩγ ػೳΛఏڙ αʔϏε ϨδετϦ 1SBOB BQQSC αʔϏε ϊʔυ

    αʔϏε ϊʔυ ϦΫΤετ ϦΫΤετ ొ࿥ ϔϧενΣοΫ ϦΫΤετ ϔϧε νΣοΫ
  33. cat Procfile app: rackup -E production --host 0.0.0.0 plana: prana/bin/Prana

    -c config.properties cat config.properties prana.host.healthcheck.url=http://localhost:9292/status prana.host.healthcheck.timeout=1500 prana.proxy.req.acceptencoding=gzip eureka.name=MESSENGER eureka.vipAddress=MESSENGER eureka.port=9292 eureka.serviceUrl.default=http://eureka:8080/eureka/v2/ eureka.validateInstanceId=false
  34. docker run -d --name exhibitor netflixoss/exhibitor:1.5.2 docker run -d --name

    eureka -d netflixoss/eureka:1.1.142 docker run -d --name messenger --link eureka:eureka \
 takai/messenger bundle exec foreman start docker run -e "origin.zuul.client.DeploymentContextBasedVipAddr -d --name zuul_messenger \
 --link eureka:eureka netflixoss/zuul:1.0.28
  35. ڞ௨ϥϯλΠϜαʔϏεͱϥΠϒϥϦʔ ŠŠϚΠΫϩαʔϏεΛՃ଎͢ΔϥϯλΠϜίϯςφʔͱϥΠϒϥϦʔɺαʔϏεɻ Ϋϥ΢υϓϥοτϑΥʔϜ͸ɺ/FUqJYͷେ෦෼Λ઎ΊΔαʔϏε܈ͷجૅͰ͋ΓɺςΫϊϩδʔελοΫͰ͢ɻ Ϋϥ΢υϓϥοτϑΥʔϜ͸ɺΫϥ΢υαʔϏε΍ΞϓϦέʔγϣϯϥΠϒϥϦɺΞϓϦέʔγϣϯίϯς φ͔Βߏ੒͞Ε·͢ɻಛʹϓϥοτϑΥʔϜʹΑͬͯɺ&VSFLBʹΑΔαʔϏεσΟεΧόϦɺ"SDIBJVTʹΑΔ ෼ࢄઃఆ؅ཧɺ3JCCPOʹΑΔϨδϦΤϯεͰΠϯςϦδΣϯτͳϓϩηεʗαʔϏεؒ௨৴ͳͲ͕ɺఏڙ͞ Ε·͢ɻ୯ҰͷαʔϏεݺͼग़͠ʹͱͲ·Βͳ͍৴པੑΛఏڙ͢ΔͨΊʹɺ)ZTUSJYʹΑͬͯϥϯλΠϜͰಠ ཱͨ͠଱ϨΠςϯγͱ଱ো֐ੑ͕ఏڙ͞Ε·͢ɻ͜ΕΒͷϥΠϒϥϦʔ΍αʔϏε͸ɺ+7.ϕʔείϯςφͰ ͋Ε͹ͲͷΑ͏ͳ؀ڥͰ΋ಈ࡞͠·͢ɻ ·ͨɺϓϥοτϑΥʔϜ͸+7.ίϯςφαʔϏεΛɺ,BSZPOͱ(PWFSOBUPSɺඇ+BWBϥϯλΠϜ؀ڥ޲͚ʹ͸

    1SBOBαΠυΧʔʹΑΓɺఏڙ͠·͢ɻ1SBOB͕Πϯελϯε಺ͰϓϩΩγػೳΛఏڙ͢Δͷʹର͠ɺ;VVM ʢ)ZTUSJYͱ&VSFLBɺ3JCCPOͷϓϩηεؒ௨৴ػೳΛ౷߹͢Δ΋ͷʣ͸ɺΫϥ΢υ؀ڥͷڥքʹ͓͚Δಈతʹ εΫϦϓτʹΑ੍ͬͯޚՄೳͳϓϩΩγΛఏڙ͠·͢ɻ