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

Pushsphere: LINE's Secret Recipe for Reliable, ...

Pushsphere: LINE's Secret Recipe for Reliable, Prompt and High-Volume Push Notifications

ユーザーは、LINEのメッセージング・プラットフォームがメッセージや音声通話を確実で迅速に通知してくれることを期待しています。プッシュ通知が間に合わず、重要なメッセージや通話を見逃してしまうことは、LINEとしては絶対に避けたい事態です。しかし、APNsやFCMのようなプッシュ通知サービス自体が、特にトラフィックが多い場合、必ずしも信頼できるとは限らない中で、どうすれば信頼性の高い迅速な配信を実現できるのでしょうか?

本講演では、インスタント・メッセージに最適化されたLINEのプッシュ通知配信メカニズム、Pushsphereをオープンソースで公開します。1月1日に世界中の新年の挨拶を一度も滞りなく配信することを可能にした、洗練されたテクニックをご覧ください!

Keywords: Client-side load-balancing, Unreliable third-party services, Circuit breakers and automatic retries, High-volume service on Kubernetes, Armeria

More Decks by LINEヤフーTech (LY Corporation Tech)

Other Decks in Technology

Transcript

  1. • .PTUMZTUBCMF • ʜXJUITPNBOZ#65T  • .JTCFIBWJOHJOTUBODFT • 4MPXSFTQPOTFTUJNFPVUT •

    4VEEFOEJTDPOOFDUJPOT "1/TWT'JSFCBTF #FMJFWFNF5IFZBSFOPUCVJMUGPSUIJT
  2. • 3FUSZJOHBQVTIOPUJpDBUJPO • )PXNBOZUJNFT • )PXNVDIEFMBZ • (JWJOHVQBTFSWFS • 8IFOUPBCBOEPOBCBETFSWFS

     • 8IJDITFSWFSTIPVMEXFTXJUDIUP  0VUPGT • 8JMMJUHFUIFBMUIZBHBJO %FDJTJPOT %FDJTJPOT %FDJTJPOT 3FBDIJOHBUUIFTDBMFXIFSFOBÏWFSFUSJFTXPO`UXPSLBOZNPSF
  3. 6OJpFE*OUFSGBDF // Send a push notification to iOS val appleProfile

    = Profile.forApple( URI("https://api.push.apple.com"), certChain, privateKey, "bundleId") val client = PushClient.of(appleProfile) val push = Push.forApple( title = "Push title", body = "Push notification body") val req = PushRequest( provider = PushProvider.APPLE, deviceToken = "your_device_token_here", push = push) val result: PushResult = client.send(req) // Send a push notification to Android val firebaseProfile = Profile.forFirebase( URI("https://fcm.googleapis.com"), googleCredentials) val client = PushClient.of(firebaseProfile) val push = Push.forFirebase( title = "Push title", body = "Push notification body") val req = PushRequest( provider = PushProvider.FIREBASE, deviceToken = "your_device_token_here", push = push) val result: PushResult = client.send(req) 4JOHMFFOUSZQPJOUGPSBMMQVTIQMBUGPSNT
  4. • %JTUSJCVUFTUSBGpDFWFOMZBDSPTTBWBJMBCMFFOEQPJOUT • 4JNQMF GBJS BOEFGGFDUJWFVOEFSOPSNBMDPOEJUJPOT 3FUSZBXBSF-PBE#BMBODFS 3PVOESPCJOBTUIFCBTFTUSBUFHZ &OTVSJOH)JHI%FMJWFSZ4VDDFTT5ISPVHI4NBSUFS5SBGGJD%JTUSJCVUJPO •

    0OSFUSZ QSFWJPVTMZBUUFNQUFEFOEQPJOUTBSFTLJQQFE • 1SFWFOUTSFQFBUFEGBJMVSFTDBVTFECZGBVMUZOPEFT 3FUSZBXBSFMPHJD & & & & & & & & 33 & & & & & & & & 33 4FMFDUFOEQPJOU 4LJQ& TJODFJUXBTBMSFBEZ VTFEJOUIFQSFWJPVTBUUFNQU 4FMFDUFOEQPJOU
  5. #FGPSF2VPUBBXBSFOFTT • #MJOESFUSJFTDBOFYIBVTURVPUB CMPDLJOHEFMJWFSZPGPUIFSNFTTBHFT • 3FUSZTUPSNTSFEVDFTZTUFNTUBCJMJUZBOE PWFSBMMEFMJWFSZFGpDJFODZ "GUFS2VPUBBXBSFOFTT • 2VPUBBXBSFMPHJDBWPJETSFUSZJOH

    FOEQPJOUTOFBSRVPUBMJNJUT • #BMBODFTIJHITVDDFTTSBUFBOERVPUB QSFTFSWBUJPO 2VPUBBXBSF"VUPNBUJD3FUSJFT 3FMJBCMFEFMJWFSZXJUIPVUPWFSMPBEJOH "1/T 4FOEBQVTIOPUJpDBUJPO 'BJM 3FUSZMPHJD 4VDDFTT 8BT TVDDFTTGVM )BTRVPUB SFNBJOJOH :FT 5PPNBOZ BUUFNQUT /P :FT :FT /P /P 3FTFOE )BOEMF BSFTQPOTF
  6. • $JSDVJU#SFBLFSQFS&OEQPJOU • &BDIQVTISFTVMUJTSFQPSUFEUPJUTDJSDVJU • 'BVMUZ&OEQPJOU • 0OGBJMVSF CSFBLFSPQFOTˠFOEQPJOUJT SFNPWFE

    • "VUP3FQMBDFNFOU • 4FMFDUTBGSFTIFOEQPJOUGSPN%/4SFGSFTIFE DBOEJEBUFT • -PBE#BMBODF4UBCJMJUZ • .BJOUBJOTFWFOUSBGpDXJUIBDPOTJTUFOUQPPM 3FTJMJFOU&OEQPJOU.BOBHFNFOUXJUI$JSDVJU#SFBLFST $BOEJEBUF1PPM &OEQPJOU $JSDVJU #SFBLFS ⚡ *TUIFDJSDVJU PQFO &OEQPJOU .BOBHFS &OEQPJOU1PPM :FT %POF /P 3FNPWFUIFVOIFBMUIZ FOEQPJOUGSPNUIFQPPM 1SPNPUFBDBOEJEBUF UPBOFOEQPJOU 💥 $ & ⚡ 3FQPSU TVDDFTTGBJMVSF $MJFOU & ⚡ & ⚡ & ⚡ $ $ $ $
  7. -*/& .FTTBHJOH 4FSWFST "1/T $FOUSBM%PHNB $POUSPM1MBOF 'FUDIFOEQPJOUJOGPSNBUJPO WJBY%4QSPUPDPM %$ /PEF

    /PEF1PSU LVCFQSPYZ /PEF /PEF1PSU LVCFQSPYZ %$ /PEF /PEF1PSU LVCFQSPYZ /PEF /PEF1PSU LVCFQSPYZ &WFOMZTFOEUSBGpDUP,VCFSOFUFTOPEFTVTJOH$4-#
  8. • "EWBODFEMPBECBMBODJOHBMHPSJUIN • ;POFBXBSF • "QQMJDBUJPOMFWFMIJOUT SFUSJFT DJSDVJUCSFBLFSTUBUVT RVPUB ʜ

    • 5ZQJDBM,VCFSOFUFTTFUVQ/05SFBEZGPSIJHIUSBGpD • $MJFOUTJEFMPBECBMBODJOHJTUIFXBZ • $POTJEFSHPJOHlTJEFDBSMFTTz 3FDBQ 3FMJBCMFQVTIOPUJpDBUJPOEFMJWFSZJT$0.1-&9
  9. • +BWBGSJFOEMZ"1* • J04-JWF"DUJWJUJFTTVQQPSU • 1MVHHBCMFDSFEFOUJBMTUPSBHF BDDFTTUPLFOTN5-4DFSUJGJDBUFT • 5SVMZPQFOTPVSDF DPEFRVBMJUZ

    EPDT DPNNVOJUZ ʜ • 3FVTBCMFMPBECBMBODFSJNQMFNFOUBUJPO • .BOBHFNFOUDPOTPMF 'VUVSF8PSL 8FDBOCVJMEUIJTUPHFUIFS