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株式会社

LINE Developers
PRO

December 03, 2021
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. ʮLINEͰ༧໿ʯͱ͸
    -*/&্Ͱ؆୯ʹళฮͷ༧໿͕Ͱ͖ΔαʔϏε
    ग़యIUUQTXXXMJOFCJ[DPNKQTFSWJDFMJODDFPGGJDJBMBDDPVOUSFTFSWBUJPO

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. • -BOHVBHF,PUMJO
    • 'SBNFXPSL4QSJOH#PPU Y
    "SNFSJB
    • "1*3&45 +40/
    H31$
    • .JEEMFXBSF.Z42- 3FEJT ,BGLB &MBTUJDTFBSDI
    ར༻͍ͯ͠Δٕज़

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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Λ࠾༻͍ͯ͠Δίϯϙʔωϯτ

    View Slide

  21. • Ϧιʔεޮ཰͕ྑ͍
    • ͍ΘΏΔ$,໰୊
    • কདྷతͳෛՙͷ૿Ճʹରͯ҆͠৺ײ
    • 8FC'MVYʹ͍ͭͯνʔϜ಺ͷଞϓϩμΫτͰͷར༻࣮੷͕͋ͬͨ
    • ͱ͸͍͑ɺඇಉظॲཧͷ࣮૷͸೉͍͠
    • ඇಉظɾϦΞΫςΟϒϓϩάϥϛϯά΁ͷ׳Ε͕ඞཁ
    ͳͥඇಉظΞʔΩςΫνϟ (WebFlux, Kotlin Coroutine)Λ࠾༻
    ͨ͠ͷ͔

    View Slide

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

    View Slide

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

    View Slide

  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ͷ*%- ΠϯλʔϑΣΠεهड़ݴޠ
    Λ࢖ָͬͯΛ͢Δͷ͕ϝΠϯ

    View Slide

  25. • "SNFSJBͷH31$ٴͼ4QSJOHTVQQPSUΛར༻
    • H31$ 4FSWFSIUUQTBSNFSJBEFWEPDTTFSWFSHSQD
    • H31$ $MJFOUIUUQTBSNFSJBEFWEPDTDMJFOUHSQD
    • H31$ 4FSWFSΛ4QSJOH#PPUͰ্ཱͪ͛ΔͨΊʹ BSNFSJBTQSJOHCPPUBVUPDPOGJHVSFΛར༻͢
    ΔIUUQTBSNFSJBEFWEPDTBEWBODFETQSJOHXFCGMVYJOUFHSBUJPO
    gRPCͷ࠾༻
    H31$ͱ4QSJOHͷ*OUFHSBUJPO

    View Slide

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

    View Slide

  27. • ͜͜Ͱ͸ίϯςΩετ "1*ϦΫΤετͷ৘ใ౳ͷॲཧͷίϯςΩετΛࢦ͢
    • ίϯςΩετ఻ൖ͸ॲཧʢϦΫΤετͳͲʣͷ0CTFSWBCJMJUZΛ͋͛ΔͨΊʹඞཁ
    • ॲཧ։࢝ʙ׬ྃ·ͰεϨουΛઐ༗͠ͳ͍ͨΊ5ISFBE-PDBM΁ͷίϯςΩετอ࣋͸
    Ͱ͖ͳ͍
    • SFBDUPSɺ$PSPVUJOFʹ͓͚Δ$POUFYUͷ
    ػೳΛ࢖ͬͯ఻ൖ͢Δ
    • .%$͸5ISFBECPVOEͳͷͰεϨου্Ͱॲཧ͕
    ಈ͍͍ͯΔ͚ؒͩؒआΓ͢ΔΑ͏ͳ޻෉͕ඞཁ
    Tips 1 : WebFlux -> Coroutine΁ͷϦΫΤετίϯςΩετ఻ൖ
    ٴͼMDC΁ͷ൓ө

    View Slide

  28. • ଟগෳࡶͳͷͰ%FNPө૾Ͱ͓఻͑͠·͢
    Tips 1 : WebFlux -> Coroutine΁ͷϦΫΤετίϯςΩετ఻ൖ
    ٴͼMDC΁ͷ൓ө

    View Slide

  29. • ෼ࢄγεςϜʹ͓͚Δ0CTFSWBCJMJUZ޲্ͷͨΊ
    • ;JQLJOΛར༻ʢJP[JQLJOCSBWFCSBWF

    • 5SBDF$POUFYUͷ఻ൖ͸ϦΫΤετίϯςΩετͱಉ༷ʹඞཁ
    • CSBWFDPOUFYUTMGKͷ.%$4DPQF%FDPSBUPSͰ5SBDF*EͳͲΛ.%$ʹQVU
    ϩάΛࣾ಺ͷϩάج൫ʹྲྀ͢
    5SBDF*EΛ࢖ͬͯίϯϙʔωϯτԣஅͰϦΫΤετΛτϨʔγϯά
    Tips 2 : ෼ࢄτϨʔγϯά

    View Slide

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

    View Slide

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

    ݁ہ%JTQBUDIFST*0ͷεϨου਺ͷ੍ݶ LPUMJOYDPSPVUJOFTJPQBSBMMFMJTN
    ͸͋Δ
    ͷͰૣΊʹϊϯϒϩοΩϯάͳํ๏ʹม͍͖͍͑ͯͨ
    Tips 3 : Blockingͳίʔυ͸ॻ͔ͳ͍
    +%#$͸ϒϩοΩϯάʜͲ͏͢Δ

    View Slide

  32. • #MPDL)PVOEΛར༻
    • ϊϯϒϩοΩϯάͳॲཧʹ͓͚ΔϒϩοΩϯάͳॲཧͷϥϯλΠϜͰͷݕ஌ͱϑοΫΛఏڙͯ͘͠Ε
    ΔϥΠϒϥϦ
    • ։ൃ؀ڥͷΈՔಇ͢ΔΑ͏ʹBDUJWFQSPGJMFͰ੍ݶ
    • $PSPVUJOF΋ରԠ͞Ε͍ͯΔ
    Tips 3 : Blockingͳίʔυ͸ॻ͔ͳ͍
    ϒϩοΩϯάͳίʔυͷݕ஌

    View Slide

  33. • τϥϯβΫγϣϯڥքΛ໌ࣔతʹݶఆ͍ͨ͠ͷͰ5SBOTBDUJPO5FNQMBUFΛ࢖͍ͬͯ
    Δ
    • 5SBOTBDUJPO5FNQMBUF͸1MBUGPSN5SBOTBDUJPO.BOBHFSʹґଘ
    • 1MBUGPSN5SBOTBDUJPO.BOBHFSͷ࣮૷Ϋϥε͸UISFBECPVOEͳτϥϯβΫγϣϯΛ࣋ͭͷͰτϥϯ
    βΫγϣϯͷதͰεϨου͕มΘΔͱ໰୊ʹͳΔ
    5SBOTBDUJPO5FNQMBUFFYFDVUFͷҾ਺Ͱ͋Δ5SBOTBDUJPO$BMMCBDL಺Ͱ͸TVTQFOEGVODUJPO͸ݺ
    ΂ͳ͍ͷͰ໰୊ͳ͘࢖͑Δ
    • ͳ͓ɺ!5SBOTBDUJPOBM͸TVTQFOEGVODUJPO͕ରԠ͞Ε͍ͯΔ 4QSJOHd

    Tips 4 : spring-tx : TransactionManager ͱ Coroutine

    View Slide

  34. • σϑΥϧτͰ͸%JTQBUDIFST6ODPOGJOFE͕ࢦఆ͞Ε͍ͯΔ
    • /FUUZΛར༻͍ͯ͠Ε͹/FUUZͷ&WFOU-PPQ5ISFBE͕࢖ΘΕΔ
    • ෮ؼͨ͋͠ͱͷ࣮ߦεϨου͕มΘ͍ͬͯΔՄೳੑ͕͋Δ
    • ྫ͑͹-FUUVDFͷDPNNBOEΛୟ͍ͯ෮ؼͨ͋͠ͱ͸-FUUVDFͷ&WFOU-PPQ 5ISFBE͕࢖ΘΕΔ
    • %JTQBUDIFST%FGBVMUΛ࢖͏Α͏ʹ$POUFYUΛม͍͑ͯΔ
    • ҙਤͤͣಛఆͷϥΠϒϥϦͰఏڙ͞ΕΔΠϕϯτ
    ϧʔϓεϨουͳͲΛফඅ͠ͳ͍Α͏ʹ͢Δ
    Tips 5 : WebFluxͰͷCoroutineͷ࣮ߦεϨου

    View Slide

  35. Tips 6 : ͦͷଞCoroutineͷར༻ྫ
    BTZODXJUIDBMMCBDLͳNFUIPEΛTVTQFOEGVODUJPOʹॻ͖׵͑Δ TVTQFOE$PS
    PVUJOF

    View Slide

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

    View Slide

  37. • -*/&ͷ༧໿ͷϓϥοτϑΥʔϜʹ͓͚Δ8FC'MVY $PSPVUJOFͷ࠾༻ཧ༝
    • $PSPVUJOFͷಋೖʹΑͬͯඇಉظॲཧͷݟ௨͕͠ྑ͘ͳΔ
    • 8FC'MVYͷར༻ʹ஌ݟ͕͋Γෆ͕҆ͳ͔ͬͨ
    • কདྷతͳεέʔϧ͠΍͢͞ͷͨΊϓϩδΣΫτ։࢝࣌ʹ࠾༻ΛܾΊͨ
    • 4QSJOH8FC'MVY ,PUMJO$PSPVUJOFͷར༻ʹ͍ͭͯ
    • ਖ਼͘͠ಈ࡞ͤ͞ΔͨΊɺ0CTFSWBCJMJUZ޲্ͷͨΊʹؾΛ͚ͭΔ΂͖ϙΠϯτ͸͋Δ
    • $PSPVUJOFͷͦͷଞඇಉظϥΠϒϥϦͱͷޓ׵ػೳʹΑͬͯॻ͖΍͘͢ͳΔ͜ͱ͕͋Δ
    ·ͱΊ

    View Slide

  38. THANK YOU

    View Slide