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

LINEの予約プラットフォームにおけるSpring WebFluxとKotlin Coroutineの活用事例 / Examples of using Spring WebFlux and Kotlin Coroutine in LINE Reservation Platform

LINEの予約プラットフォームにおけるSpring WebFluxとKotlin Coroutineの活用事例 / Examples of using Spring WebFlux and Kotlin Coroutine in LINE Reservation Platform

LINEの予約プラットフォームにおけるSpring WebFluxとKotlin Coroutineの活用事例
LINEでは、予約台帳サービスを提供しているパートナー企業様と提携しLINE内での予約体験を実現するためのプラットフォームを運営しています。
本セッションでは、このプラットフォームの中核であるサーバーサイドアプリケーションにおけるSpring WebFluxやKotlin Coroutineの活用事例をご紹介いたします。

小山 淳平
LINE株式会社

A3966f193f4bef226a0d3e3c1f728d7f?s=128

LINE Developers
PRO

December 03, 2021
Tweet

Transcript

  1. LINEͷ༧໿ϓϥοτϑΥʔϜʹ͓͚ΔSpring WebFluxͱKotlin Coroutineͷ׆༻ࣄྫ LINE株式会社 小山 淳平 2021.12

  2. • ։ൃηϯλʔ 0GGJDJBM"DDPVOU։ൃࣨ • ༧໿ϓϥοτϑΥʔϜͷαʔόʔαΠυ։ൃ • Ҏલ-*/&޿ࠂɺ4NBSU$IBOOFMɺ-*/&ެࣜΞΧ΢ϯτ Speaker খࢁ ३ฏ

  3. • ʮ-*/&Ͱ༧໿ʯͷαʔϏεʹ͍ͭͯ • ༧໿ϓϥοτϑΥʔϜͷΞʔΩςΫνϟ • 4QSJOH8FC'MVYͱ,PUMJO$PSPVUJOFͷ׆༻ࣄྫ • ͜ΕΒΛར༻ͨ͠ίϯϙʔωϯτͷಛ௃ͱ࠾༻ཧ༝ • 8FC'MVYɺ$PSPVUJOFΛར༻͢Δʹ͋ͨͬͯͷ5JQT

    Agenda
  4. Agenda • ʮ-*/&Ͱ༧໿ʯͷαʔϏεʹ͍ͭͯ • ༧໿ϓϥοτϑΥʔϜͷΞʔΩςΫνϟ • 4QSJOH8FC'MVYͱ,PUMJO$PSPVUJOFͷ׆༻ࣄྫ • ͜ΕΒΛར༻ͨ͠ίϯϙʔωϯτͷಛ௃ͱ࠾༻ཧ༝ •

    8FC'MVYɺ$PSPVUJOFΛར༻͢Δʹ͋ͨͬͯͷ5JQT
  5. ʮLINEͰ༧໿ʯͱ͸ -*/&্Ͱ؆୯ʹళฮͷ༧໿͕Ͱ͖ΔαʔϏε ग़యIUUQTXXXMJOFCJ[DPNKQTFSWJDFMJODDFPGGJDJBMBDDPVOUSFTFSWBUJPO

  6. • -*/&ެࣜΞΧ΢ϯτͱ࿈ܞ͢Δͱϝοηʔ δ഑৴΍ϦονϝχϡʔͳͲͰ༧໿ૌٻػ ೳ͕ར༻Մೳʹ ʮLINEͰ༧໿ʯͱ͸ -*/&্Ͱ؆୯ʹళฮͷ༧໿͕Ͱ͖ΔαʔϏε ग़యIUUQTXXXMJOFCJ[DPNKQTFSWJDFMJODDFPGGJDJBMBDDPVOUSFTFSWBUJPO

  7. • ݱࡏ͸ҿ৯ళ༧໿ͷػೳΛఏڙ • ༧໿ഔମͱͯ͋͠Δ΂͖ػೳ։ൃΛߦ͍ͬͯΔஈ֊ • ࡢ೥ϩʔϯν͠ঃʑʹτϥϑΟοΫ͕૿Ճத ʮLINEͰ༧໿ʯͱ͸ ϓϩμΫτͷঢ়گ

  8. Agenda • ʮ-*/&Ͱ༧໿ʯͷαʔϏεʹ͍ͭͯ • ༧໿ϓϥοτϑΥʔϜͷΞʔΩςΫνϟ • 4QSJOH8FC'MVYͱ,PUMJO$PSPVUJOFͷ׆༻ࣄྫ • ͜ΕΒΛར༻ͨ͠ίϯϙʔωϯτͷಛ௃ͱ࠾༻ཧ༝ •

    8FC'MVYɺ$PSPVUJOFΛར༻͢Δʹ͋ͨͬͯͷ5JQT
  9. ؆୯ʹ͍͏ͱʜ ύʔτφʔاۀ༷͔Β༧໿Մೳͳ͓ళͱ༧໿࿮ͷ৘ใΛडྖ͠ɺ -*/&্Ͱ༧໿ՄೳͳαʔϏεʢ-*/&Ͱ༧໿ʣΛఏڙ͢Δ͜ͱͰɺ ͓ళͱਓͱͷڑ཭ΛॖΊΔͨΊͷϓϥοτϑΥʔϜ LINEʹ͓͚Δ༧໿ϓϥοτϑΥʔϜͱ͸

  10. γεςϜΞʔΩςΫνϟʢ֓ཁʣ

  11. γεςϜΞʔΩςΫνϟʢ֓ཁʣ

  12. γεςϜΞʔΩςΫνϟʢ֓ཁʣ

  13. γεςϜΞʔΩςΫνϟʢ֓ཁʣ

  14. γεςϜΞʔΩςΫνϟʢ֓ཁʣ

  15. • -BOHVBHF,PUMJO • 'SBNFXPSL4QSJOH#PPU Y "SNFSJB • "1*3&45 +40/ H31$

    • .JEEMFXBSF.Z42- 3FEJT ,BGLB &MBTUJDTFBSDI ར༻͍ͯ͠Δٕज़
  16. Agenda • ʮ-*/&Ͱ༧໿ʯͷαʔϏεʹ͍ͭͯ • ༧໿ϓϥοτϑΥʔϜͷΞʔΩςΫνϟ • 4QSJOH8FC'MVYͱ,PUMJO$PSPVUJOFͷ׆༻ࣄྫ • ͜ΕΒΛར༻ͨ͠ίϯϙʔωϯτͷಛ௃ͱ࠾༻ཧ༝ •

    8FC'MVYɺ$PSPVUJOFΛར༻͢Δʹ͋ͨͬͯͷ5JQT
  17. • 3FBDUJWF4USFBNTͰߏங͞ΕͨϊϯϒϩοΩϯάͳ8FCϑϨʔϜϫʔΫ • 4QSJOH8FC.7$ͱ͸Ұ؏ͨ͠ػೳΛఏڙ͢ΔΑ͏ʹઃܭ͞Ε͍ͯΔ Spring WebFluxͱ͸ ग़యIUUQTEPDTTQSJOHJPTQSJOHGSBNFXPSLEPDTDVSSFOUSFGFSFODFIUNMXFCSFBDUJWFIUNMXFCGMVYGSBNFXPSLDIPJDF

  18. • ඇಉظॲཧΛ࣮ݱ͢ΔͨΊͷखஈͷͭ • தஅʹΑͬͯͭͷεϨουͰෳ਺ͷ$PSPVUJOF͕DPODVSSFOUʹॲཧ͞ΕΔ • ඇಉظॲཧͷͨΊʹଟ਺ͷεϨουΛඞཁͱ͠ͳ͍ • $PSPVUJOFதஅՄೳͳॲཧ୯Ґ Kotlin Coroutineͱ͸

  19. WebFlux, CoroutineΛ࠾༻͍ͯ͠Δίϯϙʔωϯτ αʔϏεͷ੒௕ʹ߹ΘͤͯτϥϑΟοΫͷ૿Ճ͕ݟࠐ·ΕΔ෦෼

  20. • ͍ͣΕ΋ඇಉظΞʔΩςΫνϟΛ࠾༻ʢ4QSJOH8FC'MVY ,PUMJO$PSPVUJOF • ίΞͱͳΔ"1*ʹH31$Λ࠾༻ • ϏδωεϩδοΫ͸͜ͷίϯϙʔωϯτʹ·ͱΊ͍ͯΔɻH31$ 4FSWJDFͱͯ͠͸υϝΠϯຖʹ෼཭ ͍ͯ͠ΔͷͰ͍ͭͰ΋෼ׂՄೳ •

    ઀ଓίϯϙʔωϯτ͕ଟ͍ • ΤϯυϢʔβʔ͕৮ΕΔ8FCΞϓϦέʔγϣϯʢ3&45"1*ʣʹ8FC'MVYΛ࠾༻ • ௚઀H31$ FHϒϥ΢β ΛݺͿ͜ͱ͕೉͍͠෦෼͸3&45"1*Λఏڙ͍ͨ͠ • جຊతʹίΞͷH31$ʹͭͳ͙ͨΊͷ+40/QSPUPCVG΁ͷม׵ͷΈͳͷͰ8FC'MVYͱ૬ੑ͕Α͍ • FOWPZͳͲ΋ݕ౼͕ͨ͠جຊతʹUSBOTDPEFͷΈ͕໨తͩͬͨͷͰಠࣗͰ࣮૷ WebFlux, CoroutineΛ࠾༻͍ͯ͠Δίϯϙʔωϯτ
  21. • Ϧιʔεޮ཰͕ྑ͍ • ͍ΘΏΔ$,໰୊ • কདྷతͳෛՙͷ૿Ճʹରͯ҆͠৺ײ • 8FC'MVYʹ͍ͭͯνʔϜ಺ͷଞϓϩμΫτͰͷར༻࣮੷͕͋ͬͨ • ͱ͸͍͑ɺඇಉظॲཧͷ࣮૷͸೉͍͠

    • ඇಉظɾϦΞΫςΟϒϓϩάϥϛϯά΁ͷ׳Ε͕ඞཁ ͳͥඇಉظΞʔΩςΫνϟ (WebFlux, Kotlin Coroutine)Λ࠾༻ ͨ͠ͷ͔
  22. $PSPVUJOFΛ࢖͏ͱಉظతͳελΠϧͰ࣮૷Ͱ͖Δ • ,PUMJOͰ$PSPVUJOF͕4UBCMFʹ • ֤छඇಉظϥΠϒϥϦ΁ͷޓ׵ػೳ΋͋ͬͨ • 4QSJOH'SBNFXPSLͰ4QSJOH8FC.7$8FC'MVYͰTVTQFOEGVODUJPO͕ར༻Մೳʹ ͳͥඇಉظΞʔΩςΫνϟ (WebFlux, Kotlin

    Coroutine)Λ࠾༻ ͨ͠ͷ͔
  23. CoroutineΛ࢖͏ͱಉظతͳελΠϧͰ࣮૷Ͱ͖Δ ˞-JTUFOBCMF'VUVSFΛฦ͢H31$ 4UVCΛݺͿྫ

  24. • H31$ 4UVC $MJFOU ͕ੜ੒͞ΕΔͷͰݸʑͷ$MJFOU࣮૷͕ෆཁ • ࣾ಺ͷؔ࿈γεςϜʹ͸ੜ੒͞Εͨ4UVCDMBTTΛKBSͰ഑෍ʢࣾ಺NBWFOSFQPʣ • ϓϥοτϑΥʔϜ಺ͷΞϓϦέʔγϣϯ͸NPOPSFQPͳͷͰHSBEMF NPEVMFͱͯ͠CVJME࣌ʹࢀর

    • ϓϥάΠϯʹΑΔΧελϚΠζ • *%-͔ΒͷυΩϡϝϯτੜ੒ʢQTFVEPNVUPQSPUPDHFOEPDʣ • ίʔυੜ੒ػೳ΋ϓϥάΠϯͷͭ QSPUPDHFOHSQDKBWB QSPUPDHFOHSQDLPUMJO FUD • $VTUPN0QUJPOTΛར༻ͨ͠NFTTBHF GJFME΁ͷ੍໿ఆٛػೳΛಠ࣮ࣗ૷ • IJCFSOBUFWBMJEBUPSͷQSPHSBNNBUJD"1*Λར༻ gRPCͷ࠾༻ 1SPUPDPM#VGGFSTͷ*%- ΠϯλʔϑΣΠεهड़ݴޠ Λ࢖ָͬͯΛ͢Δͷ͕ϝΠϯ
  25. • "SNFSJBͷH31$ٴͼ4QSJOHTVQQPSUΛར༻ • H31$ 4FSWFSIUUQTBSNFSJBEFWEPDTTFSWFSHSQD • H31$ $MJFOUIUUQTBSNFSJBEFWEPDTDMJFOUHSQD • H31$

    4FSWFSΛ4QSJOH#PPUͰ্ཱͪ͛ΔͨΊʹ BSNFSJBTQSJOHCPPUBVUPDPOGJHVSFΛར༻͢ ΔIUUQTBSNFSJBEFWEPDTBEWBODFETQSJOHXFCGMVYJOUFHSBUJPO gRPCͷ࠾༻ H31$ͱ4QSJOHͷ*OUFHSBUJPO
  26. Agenda • ʮ-*/&Ͱ༧໿ʯͷαʔϏεʹ͍ͭͯ • ༧໿ϓϥοτϑΥʔϜͷΞʔΩςΫνϟ • 4QSJOH8FC'MVYͱ,PUMJO$PSPVUJOFͷ׆༻ࣄྫ • ͜ΕΒΛར༻ͨ͠ίϯϙʔωϯτͷಛ௃ͱ࠾༻ཧ༝ •

    8FC'MVYɺ$PSPVUJOFΛར༻͢Δʹ͋ͨͬͯͷ5JQT
  27. • ͜͜Ͱ͸ίϯςΩετ "1*ϦΫΤετͷ৘ใ౳ͷॲཧͷίϯςΩετΛࢦ͢ • ίϯςΩετ఻ൖ͸ॲཧʢϦΫΤετͳͲʣͷ0CTFSWBCJMJUZΛ͋͛ΔͨΊʹඞཁ • ॲཧ։࢝ʙ׬ྃ·ͰεϨουΛઐ༗͠ͳ͍ͨΊ5ISFBE-PDBM΁ͷίϯςΩετอ࣋͸ Ͱ͖ͳ͍ • SFBDUPSɺ$PSPVUJOFʹ͓͚Δ$POUFYUͷ

    ػೳΛ࢖ͬͯ఻ൖ͢Δ • .%$͸5ISFBECPVOEͳͷͰεϨου্Ͱॲཧ͕ ಈ͍͍ͯΔ͚ؒͩؒआΓ͢ΔΑ͏ͳ޻෉͕ඞཁ Tips 1 : WebFlux -> Coroutine΁ͷϦΫΤετίϯςΩετ఻ൖ ٴͼMDC΁ͷ൓ө
  28. • ଟগෳࡶͳͷͰ%FNPө૾Ͱ͓఻͑͠·͢ Tips 1 : WebFlux -> Coroutine΁ͷϦΫΤετίϯςΩετ఻ൖ ٴͼMDC΁ͷ൓ө

  29. • ෼ࢄγεςϜʹ͓͚Δ0CTFSWBCJMJUZ޲্ͷͨΊ • ;JQLJOΛར༻ʢJP[JQLJOCSBWFCSBWF • 5SBDF$POUFYUͷ఻ൖ͸ϦΫΤετίϯςΩετͱಉ༷ʹඞཁ • CSBWFDPOUFYUTMGKͷ.%$4DPQF%FDPSBUPSͰ5SBDF*EͳͲΛ.%$ʹQVU ϩάΛࣾ಺ͷϩάج൫ʹྲྀ͢ 5SBDF*EΛ࢖ͬͯίϯϙʔωϯτԣஅͰϦΫΤετΛτϨʔγϯά

    Tips 2 : ෼ࢄτϨʔγϯά
  30. Tips 2 : ෼ࢄτϨʔγϯά

  31. • 3%#$͸ະ࠾༻ • ϓϩδΣΫτ։࢝౰ॳ͸NZTRMͷESJWFS΋ແ࣌͘ظঘૣͩͬͨ • .ZCBUJTʢ3%#$ະରԠʣͷ஌ݟ͕ଟ͔ͬͨ • ͳͷͰɺ+%#$઀ଓ͍ͯ͠Δ • %#ʹΫΤϦ͢ΔॲཧΛݺͿ෦෼͸࣮ߦεϨου

    Λม͍͑ͯΔ %JTQBUDIFST*0 ݁ہ%JTQBUDIFST*0ͷεϨου਺ͷ੍ݶ LPUMJOYDPSPVUJOFTJPQBSBMMFMJTN ͸͋Δ ͷͰૣΊʹϊϯϒϩοΩϯάͳํ๏ʹม͍͖͍͑ͯͨ Tips 3 : Blockingͳίʔυ͸ॻ͔ͳ͍ +%#$͸ϒϩοΩϯάʜͲ͏͢Δ
  32. • #MPDL)PVOEΛར༻ • ϊϯϒϩοΩϯάͳॲཧʹ͓͚ΔϒϩοΩϯάͳॲཧͷϥϯλΠϜͰͷݕ஌ͱϑοΫΛఏڙͯ͘͠Ε ΔϥΠϒϥϦ • ։ൃ؀ڥͷΈՔಇ͢ΔΑ͏ʹBDUJWFQSPGJMFͰ੍ݶ • $PSPVUJOF΋ରԠ͞Ε͍ͯΔ Tips

    3 : Blockingͳίʔυ͸ॻ͔ͳ͍ ϒϩοΩϯάͳίʔυͷݕ஌
  33. • τϥϯβΫγϣϯڥքΛ໌ࣔతʹݶఆ͍ͨ͠ͷͰ5SBOTBDUJPO5FNQMBUFΛ࢖͍ͬͯ Δ • 5SBOTBDUJPO5FNQMBUF͸1MBUGPSN5SBOTBDUJPO.BOBHFSʹґଘ • 1MBUGPSN5SBOTBDUJPO.BOBHFSͷ࣮૷Ϋϥε͸UISFBECPVOEͳτϥϯβΫγϣϯΛ࣋ͭͷͰτϥϯ βΫγϣϯͷதͰεϨου͕มΘΔͱ໰୊ʹͳΔ 5SBOTBDUJPO5FNQMBUFFYFDVUFͷҾ਺Ͱ͋Δ5SBOTBDUJPO$BMMCBDL಺Ͱ͸TVTQFOEGVODUJPO͸ݺ ΂ͳ͍ͷͰ໰୊ͳ͘࢖͑Δ

    • ͳ͓ɺ!5SBOTBDUJPOBM͸TVTQFOEGVODUJPO͕ରԠ͞Ε͍ͯΔ 4QSJOHd Tips 4 : spring-tx : TransactionManager ͱ Coroutine
  34. • σϑΥϧτͰ͸%JTQBUDIFST6ODPOGJOFE͕ࢦఆ͞Ε͍ͯΔ • /FUUZΛར༻͍ͯ͠Ε͹/FUUZͷ&WFOU-PPQ5ISFBE͕࢖ΘΕΔ • ෮ؼͨ͋͠ͱͷ࣮ߦεϨου͕มΘ͍ͬͯΔՄೳੑ͕͋Δ • ྫ͑͹-FUUVDFͷDPNNBOEΛୟ͍ͯ෮ؼͨ͋͠ͱ͸-FUUVDFͷ&WFOU-PPQ 5ISFBE͕࢖ΘΕΔ •

    %JTQBUDIFST%FGBVMUΛ࢖͏Α͏ʹ$POUFYUΛม͍͑ͯΔ • ҙਤͤͣಛఆͷϥΠϒϥϦͰఏڙ͞ΕΔΠϕϯτ ϧʔϓεϨουͳͲΛফඅ͠ͳ͍Α͏ʹ͢Δ Tips 5 : WebFluxͰͷCoroutineͷ࣮ߦεϨου
  35. Tips 6 : ͦͷଞCoroutineͷར༻ྫ BTZODXJUIDBMMCBDLͳNFUIPEΛTVTQFOEGVODUJPOʹॻ͖׵͑Δ TVTQFOE$PS PVUJOF

  36. Tips 6 : ͦͷଞCoroutineͷར༻ྫ 'MPXͰ৚݅෇͖3FUSZΛαΫοͱ΍Δ

  37. • -*/&ͷ༧໿ͷϓϥοτϑΥʔϜʹ͓͚Δ8FC'MVY $PSPVUJOFͷ࠾༻ཧ༝ • $PSPVUJOFͷಋೖʹΑͬͯඇಉظॲཧͷݟ௨͕͠ྑ͘ͳΔ • 8FC'MVYͷར༻ʹ஌ݟ͕͋Γෆ͕҆ͳ͔ͬͨ • কདྷతͳεέʔϧ͠΍͢͞ͷͨΊϓϩδΣΫτ։࢝࣌ʹ࠾༻ΛܾΊͨ •

    4QSJOH8FC'MVY ,PUMJO$PSPVUJOFͷར༻ʹ͍ͭͯ • ਖ਼͘͠ಈ࡞ͤ͞ΔͨΊɺ0CTFSWBCJMJUZ޲্ͷͨΊʹؾΛ͚ͭΔ΂͖ϙΠϯτ͸͋Δ • $PSPVUJOFͷͦͷଞඇಉظϥΠϒϥϦͱͷޓ׵ػೳʹΑͬͯॻ͖΍͘͢ͳΔ͜ͱ͕͋Δ ·ͱΊ
  38. THANK YOU