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

Scala and Akka apps on Kubernetes in ChatWork

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for hayasshi hayasshi
September 09, 2017

Scala and Akka apps on Kubernetes in ChatWork

2017-09-09 Scala関西Summit 2017

Avatar for hayasshi

hayasshi

September 09, 2017
Tweet

More Decks by hayasshi

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ 2017/09/09 © ChatWork All rights reserved. 2 • ྛɹେհ


    Twitter: @hayasshi_
 GitHub: hayasshi • ChatWorkגࣜձࣾ
 αʔόʔαΠυΤϯδχΞ
 ScalaϓϩμΫτ୲౰ • Scalaྺ4೥͘Β͍
 2013೥Ґ͔Β৮Γ࢝ΊΔ
 ۀ຿ͰΨοπϦ͸2015೥͔Β
  2. νϟοτϫʔΫʹ͍ͭͯ © ChatWork All rights reserved. 3 2017/09/09 • ϏδωενϟοταʔϏε


    άϧʔϓνϟοτɾλεΫ؅ཧɾϑΝΠϧڞ༗ɾϏσΦ௨࿩ • ಋೖࣾ਺ 147,000ࣾҎ্ • ྦྷܭϝοηʔδ਺ 20ԯ Ҏ্
 
 (2017೥8݄຤࣌఺)
  3. 'BMDPOʹ͍ͭͯ © ChatWork All rights reserved. 4 2017/09/09 • ScalaMatsuri

    2017
 ChatWorkͷScala࠾༻ϓϩμΫτ “Falcon” ϦϦʔε·Ͱͷࣦഊͱ੒ޭͷྺ࢙
 https://speakerdeck.com/j5ik2o/history-of-falcon-the-way-to-production-release • AWS Dev Day Tokyo 2017
 ChatWorkͷ৽ϝοηʔδϯάγεςϜΛࢧ͑Δٕज़
 https://speakerdeck.com/j5ik2o/chatworkfalsexin-metusezingusisutemuwozhi-eruji-shu • DataWorks Summit
 https://dataworkssummit.com/san-jose-2017/sessions/worldwide-scalable-and- resilient-messaging-services-by-cqrs-and-event-sourcing-using-akka-kafka-streams- and-hbase/ • Kafka Summit
 https://kafka-summit.org/sessions/worldwide-scalable-resilient-messaging-services- kafka-kafka-streams/
  4. ࠓ೔͓͸ͳ͢͠Δ͜ͱ © ChatWork All rights reserved. 5 2017/09/09 • ChatWorkͰͷKubernetesͷར༻ʹ͍ͭͯ


    ͳͥKubernetesΛಋೖͨ͠ͷ͔
 ͲͷΑ͏ʹScalaΞϓϦΛϏϧυͯ͠σϓϩΠ͍ͯ͠Δ͔
 ͲͷΑ͏ͳϝϦοτ͕͔͋ͬͨ • ChatWorkͰͷΞϓϦέʔγϣϯϝτϦΫε
 ͳͥϝτϦΫεΛͱ͍ͬͯΔͷ͔
 ͲͷΑ͏ʹScalaΞϓϦͷϝτϦΫεΛͱ͍ͬͯΔͷ͔
 ͲͷΑ͏ͳϝτϦΫεΛͱ͍ͬͯΔͷ͔
  5. ,VCFSOFUFTͱ͸ © ChatWork All rights reserved. 7 2017/09/09 • ίϯςφΦʔέετϨʔγϣϯπʔϧ


    ࣮ߦ؀ڥͰ͋Δϗετ܈Λ·ͱΊ(ΫϥελԽ)
 ίϯςφͷӡ༻؅ཧΛߦͬͯ͘ΕΔ
  6. ,VCFSOFUFTͱ͸ © ChatWork All rights reserved. 8 2017/09/09 • ΞϓϦέʔγϣϯ͸”Pod”ͱ͍ΘΕΔ୯ҐͰ؅ཧ͞ΕΔ


    ͍͔ͭ͘ͷΞϓϦͱϘϦϡʔϜΛ·ͱΊΔ • “Deployment”ͱ͍͏࢓૊ΈͰɺಉҰछྨͷ”Pod”ͷ഑උల ։ͷίϯτϩʔϧ΍৑௕ԽΛ؅ཧͰ͖Δ
 →ϫϯίϚϯυͰεέʔϧͰ͖ͯศར
  7. ͳͥ,VCFSOFUFTΛಋೖͨ͠ͷ͔ © ChatWork All rights reserved. 9 2017/09/09 • Πϯϑϥ໘ͷ՝୊


    ؀ڥߏங΍σϓϩΠʹ͓͚ΔΠϯϑϥνʔϜͷίετ͕ߴ͍
 ੹຿͕ଟ͘ɺεϐʔσΟʔʹରԠ͕Ͱ͖ͳ͍ঢ়ଶͩͬͨ • ͜ΕΒΛղܾ͢ΔͨΊΞϓϦέʔγϣϯ։ൃऀ͕ΞϓϦͷӡ༻΋ߦ͍΍͘͢͢Δ
 DevOpsͷਪਐ ಋೖલ ಋೖޙ ؀ڥߏங ΠϯϑϥνʔϜ ΠϯϑϥʴΞϓϦ ϦϦʔεɾσϓϩΠ ΠϯϑϥνʔϜ ΞϓϦνʔϜ Πϯϑϥӡ༻ ΠϯϑϥνʔϜ ΠϯϑϥνʔϜ ΞϥʔτରԠ ΠϯϑϥνʔϜ ΠϯϑϥʴΞϓϦ
  8. σϓϩΠΠϝʔδ © ChatWork All rights reserved. 10 2017/09/09 • ίϯςφΠϝʔδͷ࡞੒͸

    sbt-native-packager • ConcourseCIͰҰ࿈ͷλεΫΛύΠϓϥΠϯԽ • ΞϓϦέʔγϣϯ։ൃऀ͸σϓϩΠͷఆٛΛ࡞੒͠ύΠϓϥΠϯʹઃఆ͢Δ͚ͩ
  9. ,VCFSOFUFTಋೖʹΑΔϝϦοτ © ChatWork All rights reserved. 11 2017/09/09 • ΞϓϦέʔγϣϯ։ൃऀ͕ࣗ෼ͨͪͰ


    ΞϓϦέʔγϣϯͷӡ༻؅ཧΛߦ͑ΔΑ͏ʹͳͬͨ • DevOpsͷਪਐʹΑΓগͣͭ͠จԽ͕Ͱ͖͖ͯͨ • ΞϓϦέʔγϣϯͷΦϖϨʔγϣϯ
 ಛʹσϓϩΠ΍εέʔϧΠϯɾΞ΢τ͕ඇৗʹָʹͳͬͨ • KubernetesͷπʔϧͰίϚϯυΛྲྀ͚ͩ͢
  10. ͳͥϝτϦΫεΛऔΔඞཁ͕͋Δͷ͔ © ChatWork All rights reserved. 14 2017/09/09 • ChatWorkͰ͸େ͖͘3ͭͷ໨తͰऔಘ

    • ҟৗݕ஌ • ো֐࣌ͷݪҼௐࠪ • ΞϓϦέʔγϣϯͷνϡʔχϯά ֎͔Βݟͯ
 ҙຯͷ͋ΔϝτϦΫε ಺෦ͷϝτϦΫε
  11. ͲͷΑ͏ʹϝτϦΫεΛऔ͍ͬͯΔ͔ © ChatWork All rights reserved. 15 2017/09/09 • Kamon


    ΞϓϦ಺෦ͷϝτϦΫεऩू • Datadog
 ϞχλϦϯάαʔϏε • PagerDuty
 Ξϥʔτ௨஌
  12. ΞϓϦέʔγϣϯͷ֎͔Βݟͯҙຯͷ͋ΔϝτϦΫε © ChatWork All rights reserved. 16 2017/09/09 • ॲཧ࣌ؒ

    • ୯Ґ࣌ؒ͋ͨΓͷॲཧྔ(εϧʔϓοτ) • ΤϥʔϨʔτ • ͖͍͠஋Λઃ͚ɺͦΕΛ௒͑ͨ࣌ʹΞϥʔτ͢Δ͜ͱͰɺ
 ҟৗΛૉૣ͘ݕ஌͢Δ͜ͱ͕Ͱ͖Δ • جຊతʹΧελϜϝτϦΫεͱͯ͠ɺܭଌ༻ͷϩδοΫΛ ಺෦ʹ࢓ࠐΉඞཁ͕͋Δ
  13. • ҟৗ࣌ͷεϧʔϓοτ • ҟৗ࣌ͷॲཧ࣌ؒ © ChatWork All rights reserved. 17

    2017/09/09 ΞϓϦέʔγϣϯͷ֎͔Βݟͯҙຯͷ͋ΔϝτϦΫε
  14. • ҰൠతͳઃఆΛ͍ͯ͠Δ • N෼ؒͷฏۉॲཧ͕࣌ؒ˓˓msΛ௒͍͑ͯͨ৔߹ • N෼ؒͣͬͱ࠷େॲཧ͕࣌ؒ˓˓msΛ௒͍͑ͯͨ৔߹ • N෼ؒͷΤϥʔϨʔτ(Τϥʔ਺ / ॲཧ਺)͕̋%Λ௒͑

    ͨ৔߹ • ͜ΕҎ֎ʹ΋ϝοηʔδΩϡʔʹ͋Δॲཧ͞Ε͍ͯͳ͍ϝο ηʔδ਺ͳͲʹ΋͖͍͠஋Λ͚ͭͨΓ͍ͯ͠Δ ϝτϦΫεΛ༻͍ͨݕ஌ͷ͖͍͠஋ © ChatWork All rights reserved. 18 2017/09/09
  15. ΞϓϦέʔγϣϯ಺෦ͷϝτϦΫε 4DBMB © ChatWork All rights reserved. 19 2017/09/09 •

    جຊతͳ΋ͷ͕த৺ • CPU࢖༻཰ • ώʔϓ࢖༻ྔ • GCλΠϜɾGCΧ΢ϯτɹͳͲ • ಛʹScala͸୹໋ΦϒδΣΫτ͕ଟ͘ͳΓ΍͍͢ͷͰɺ͔ͬ͠ΓGC Ͱճऩ͞Ε͍ͯΔ͔֬ೝ͢Δ • ্هʹϓϥεͯ͠ɺΞϓϦέʔγϣϯͷಛੑʹΑͬͯɺ
 ݟΔ΂͖ϝτϦΫεΛݕ౼͢Δ
  16. ΞϓϦέʔγϣϯ಺෦ͷϝτϦΫε © ChatWork All rights reserved. 20 2017/09/09 • ͳΜ͔࠷ॳྑͦ͞͏͚ͩͲ

    • ؾ͕͍ͭͨΒ༨༟͕ͳ͘ͳ͍ͬͯͨ • খ͞ͳϝϞϦϦʔΫ͕͋Γ௕ظؒՔಇͰṧഭ
 →JVMͷΫϥεɾώετάϥϜΛग़ྗͯ͠ൃ֮
 →ϞχλϦϯά΋େ੾͕ͩैདྷͷJVM؅ཧπʔϧͰͷ֬ೝ΋ॏཁ
  17. ΞϓϦέʔγϣϯ಺෦ͷϝτϦΫε "LLB © ChatWork All rights reserved. 21 2017/09/09 •

    Akka͸جຊతʹฒߦॲཧ • AkkaͷฒߦॲཧΛ͑͞͞Δ࢓૊ΈͰ͋ΔDispatcher·ΘΓͷ ϝτϦΫεΛ͓͑͞Δ • εϨουϓʔϧ
 →ϓʔϧ಺ͷશͯͷεϨου͕ৗʹΞΫςΟϒʹͳͬͯ ͍ͳ͍͔ • ϝʔϧϘοΫε
 →ಛఆͷDispatcherͷϝʔϧϘοΫεʹϝʔϧ͕଺ཹ͠ ͍ͯͳ͍͔
  18. ΞϓϦέʔγϣϯ಺෦ͷϝτϦΫε "LLB © ChatWork All rights reserved. 22 2017/09/09 •

    Kamon͕ऩूͯ͘͠ΕΔ • εϨουΛ࢖͍੾Δঢ়ଶ͕ଓ͍ͨΓɺActorͷϝʔϧϘοΫεʹϝοηʔδ͕଺ཹ ͢Δ͜ͱ͕ଟ͘ͳΔͱɺνϡʔχϯάͷαΠϯ • blocking-ioΛߦ͏ॲཧ΍ܭࢉͷଟ͍ॲཧͷDispatcherΛผʹ͢ΔͳͲ
  19. ·ͱΊ © ChatWork All rights reserved. 23 2017/09/09 • KubernetesΛಋೖͨ͜͠ͱͰ

    • DevOpsͷจԽ͕গͣͭ͠Ͱ͖͖ͯͨ • ΞϓϦέʔγϣϯͷӡ༻؅ཧָ͕ʹͳͬͨ • ϝτϦΫε͸ • ໨తʹΑͬͯऔಘ͢ΔϝτϦΫεΛݟۃΊΔ • ऩूπʔϧͱΫϥ΢υϞχλϦϯάαʔϏεͰ
 ӡ༻؅ཧ΍ΞϓϦνϡʔχϯάָ͕ʹͳͬͨ