GKEとGaurunで作るPush通知サーバ

32110e49878cbda9c310dcc5c53e750c?s=47 k-kurikuri
October 19, 2018

 GKEとGaurunで作るPush通知サーバ

32110e49878cbda9c310dcc5c53e750c?s=128

k-kurikuri

October 19, 2018
Tweet

Transcript

  1. GKEͱGaurunͰ࡞Δ Push௨஌αʔό k-kurikuri @ Go(Un)Conference LTେձ 4kg

  2. ΞδΣϯμ • ൃදʹ͍ͨΔྲྀΕ • Push௨஌ͱ͸ • Gaurunͱ͸ • GKEͱ͸ •

    ࣮૷͢Δ্ͰͷΞϨίϨ • GoͰ࣮૷ͨ͠Օॴ • ·ͱΊ
  3. ࣗݾ঺հ • ϑϦʔϥϯεͷόοΫΤϯυΤϯδχΞ • k-kurikuriͱͯ͠ΠϯλʔωοτΛ㓢኶ • Gopherྺ൒೥͘Β͍

  4. ͜ͷൃදʹ͍ͨΔྲྀΕ • GoΛ࢖ͬͨॳΊͯͷλεΫ͕Push௨஌αʔό ͷ࣮૷ͩͬͨ • ผҊ݅Ͱ࣮੷͕͋ͬͨͨΊGaurunɺDockerɺ GKEͷ࢖༻͸େ࿮ܾ·͍ͬͯͨ • ॳΊͯͷ࣮૷ͩͬͨࣄ΋͋ΓৼΓฦΓͳ͕ΒΞ ΢τϓοτ

  5. Push௨஌ͱ͸ • iOS, Android, webϒϥ΢βͳͲͰώϣίͬͱग़ͯ͘Δ௨஌ • ༷ʑͳΠϕϯτΛϢʔβʔʹ௨஌Ͱ͖Δ • iOS(APNs), Android(FCM)ͱAPI͕༻ҙ͞Ε͍ͯΔ

    • ௚ྻʹૹΔͱશϢʔβʔ΁ͷ௨஌…͸ॲཧ͕ॏ͘ͳΓ͕ͪ • Firebase NotificationͳͲSaas͸͋Δ͕ॊೈੑ΍εέʔϦϯ άʹ໰୊͕…
  6. ॊೈੑ΍εέʔϦϯάͷ ໰୊͸GaurunͰղܾͰ͖ͦ͏

  7. Gaurun (Ψ΢ϧϯ)ͱ͸ • ϝϧΧϦࣾ੡ͷGoͰ࣮૷͞ΕͨPush௨஌αʔό • ಺෦Ͱ͸goroutineΛ࢖༻͠pushϦΫΤετ͸ ΩϡʔʹཷΊΒΕඇಉظʹ࣮ߦ͞ΕΔ • ϞχλϦϯάAPIͷఏڙ΍APNS, FCM΁ͷΞΫ

    ηεϩάɺΤϥʔϩά΋ཷΊࠐ·ΕΔ
  8. TODO: ਤ

  9. GaurunΛGKE্ʹߏங͢Δ

  10. GKEͱ͸ • Google Kubernetes Engineͷུ • GCP͕ఏڙ͢ΔDockerίϯςφΛσϓϩΠɺӡ༻ ؅ཧ͢ΔkubernetesΛ࢖༻ͨ͠ϚωʔδυαʔϏε • kubernetes͕࣋ͭεέʔϦϯάɾࢮ׆؂ࢹɾࣗಈ࠶

    ىಈɺωοτϫʔΫ؅ཧͳͲίϯςφΛ؅ཧ͢Δͨ Ίͷ๛෋ͳػೳΛఏڙ
  11. ࠾༻ͨ͠GKEߏஙͷϑϩʔ • Gaurun༻ͷDockerfileΛ࡞Δ • DockerΠϝʔδΛContainer RegistryʹΞοϓ ͢Δ • Terraform͔ΒContainer RegistryͷΠϝʔδ

    ΛݩʹGKEίϯςφΛ࡞੒͢Δ
  12. ։ൃ/ຊ൪ͰͷઃఆϑΝΠϧ੾Γ ସ͑ • kubernetesͷػೳʹ͋ΔʮConfigMap, Secretʯ Λ࢖༻ • CofigMap͸ੜσʔλ͕key, valueͰอଘ͞Ε ΔɻύεϫʔυͳͲػີσʔλΛѻ͏༻్ʹ͸

    ޲͍͍ͯͳ͍ • SecretΛ࢖༻͢Δͱ҉߸Խ͞Εͯอଘ
  13. GKEͷϩά • GKEͰαʔόߏங͢Δ৔߹ɺstdout΁ग़ྗ͢Δࣄ ͰStackDriver Loggingʹϩά͕ࣗಈͰྲྀΕΔ • GKEͰ͸σϑΥϧτͰfluentdͷઃఆ͕͞Ε͍ͯͯ StackDriverLoggingʹૹ৴͞ΕΔ • StackDriverLoggingʹཷ·ͬͨϩά͸GCSʹอଘ

    ͢Δࣄ͕ग़དྷΔ
  14. GCP্ͷਤ

  15. None
  16. Push௨஌αʔόΛ ࣮૷͢Δ্ͰͷΞϨίϨ

  17. σόΠετʔΫϯ • Ͳͷ୺຤Ͱ͋Δ͔ʁΛࣝผ͢Δ৘ใ • Apple, GoogleͷSDKΛ௨ͯ͠ϓϥοτϑΥʔ Ϝ͔ΒτʔΫϯΛड͚औΓαʔόଆͰอଘ͢ Δ • σόΠετʔΫϯ͸༗ޮظݶ͕͋Γɺظݶ੾

    ΕτʔΫϯ͸࠶ൃߦ͢Δඞཁ͕͋Δ
  18. ແޮʹͳͬͨ σόΠετʔΫϯͷճऩ

  19. ແޮʹͳͬͨσόΠετʔΫϯ • ແޮͳσόΠετʔΫϯͱ͸ʮ༗ޮظݶ੾ΕʯͱʮΞϯΠϯε τʔϧ͞Εͯૹ৴Ͱ͖ͳ͍ʯϞϊ͕2ͭ͋Δ • ༗ޮظݶ੾ΕͷτʔΫϯΛૹΔͱΤϥʔʹͳΔͨΊΞϓϦଆͰ ߋ৽͢Δඞཁ͕͋Δ • Ϣʔβʔ͕ΞϯΠϯετʔϧ͍ͯ͠Δ৔߹͸τʔΫϯ͕༗ޮͰ ΋ಧ͔ͳ͍ͨΊΤϥʔʹͳΔ

    • APNsͷFeedbackServiceAPIΛ࢖༻͢ΔͱʮΞϯΠϯετʔ ϧʯ͞Εͯૹ৴ෆೳͳτʔΫϯ͕औಘͰ͖Δ
  20. FeedbackServiceAPI • APNs͕ఏڙ͢ΔແޮͳσόΠετʔΫϯΛऔಘ ͢ΔͨΊͷAPI • ϦΫΤετ͢ΔͨͼཷΊΒΕͨແޮͳσόΠε τʔΫϯ͸࡟আ͞ΕΔ • Appleͷن໿Ͱ͸ରԠ͸Ϛετɻఆظతʹσό ΠετʔΫϯΛճऩ͍ͯ͠Δ͔؂ࢹ͞Ε͍ͯΔ

  21. ΞϓϦέʔγϣϯʢGoʣͰ ࣮૷ͨ͠ػೳ

  22. None
  23. GoͰ࣮૷ͨ͠ػೳ • gaurun΁ͷΫϥΠΞϯτॲཧ • ΠϕϯτʹԠͨ͡Push௨஌CLI • ΠϕϯτʹԠͨ͡Push௨஌APIϦΫΤετ • ΤϥʔτʔΫϯͷݕग़CLI •

    ༗ޮظݶ੾ΕτʔΫϯݕग़CLI
  24. ࠷ޙʹ • ख୳ΓͰͷ࣮૷ͳͷͰ͜Ε͕ϕετϓϥΫςΟε͔͸Θ ͔Βͳ͍ • ௨஌ΛૹΔ͚ͩͰ͸ͳ͘ɺແޮͳσόΠετʔΫϯͷ؅ ཧͳͲࢥͬͨΑΓ΍Δ͜ͱ͕ଟ͔ͬͨ • ཁ݅ʹΑͬͯ͸SaasͰγϟοͱ΍Δͷ΋ྑ͍ͷͰ͸ •

    Push௨஌ʹؔ͢Δࣄ͸Կ͔ͱ೚͞ΕΔͨΊɺPush௨஌Φ δαϯʹͳΔ
  25. ͋Γ͕ͱ͏͍͟͝·ͨ͠