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

알림 서비스로 시작하는 서버 개발

kakao
PRO
December 09, 2022

알림 서비스로 시작하는 서버 개발

#MessageQueue #Scale-out

카카오뱅크의 알림서비스를 소개합니다. 안정적이고 지속가능한 서비스를 위해 뭘 선택했고 그 선택에는 어떤 장단점이 있는지, 더 나아가 그 단점을 보완하는 과정을 알 수 있습니다.

발표자 : mason.kim
카카오뱅크에서 서버 개발자로 일하고 있는 mason입니다. 수신/여신/인증 등 다양한 부분에서 개발하고 있으며, 더 나은 코드를 작성하기 위해 노력하고 있습니다.

kakao
PRO

December 09, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. 알림 서비스로


    시작하는 서버 개발
    김민수 mason.kim


    카카오뱅크


    Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao.
    if(kakao)2022

    View Slide

  2. 카카오뱅크의 알림
    이체, 카드 사용, 광고 등의


    이벤트 발생 시 알림을 생성

    View Slide

  3. 카카오페이 카카오모빌리티 KB스타뱅킹

    View Slide

  4. 알림 생성
    Database
    알림 서버
    알림 생성

    View Slide

  5. 알림 조회
    알림 조회
    Database
    알림 서버

    View Slide

  6. 알림 생성
    알림 조회
    Database
    알림 서버

    View Slide

  7. 알림 생성에 부하가 걸린다면?
    알림 생성
    알림 조회
    Database
    알림 서버

    View Slide

  8. 알림 생성
    알림 조회
    알림 생성에 부하가 걸린다면?
    Database
    알림 서버

    View Slide

  9. 알림 생성
    알림 조회
    알림 생성에 부하가 걸린다면?
    Database
    알림 서버

    View Slide

  10. 생성 / 조회 서버 분리
    생성 서버
    조회 서버
    Database

    View Slide

  11. 생성 / 조회 서버 분리
    생성 서버
    조회 서버
    Database

    View Slide

  12. 여전히 연계시스템에는 장애를 전파
    조회 서버
    생성 서버
    지연 응답
    Database

    View Slide

  13. 여전히 연계시스템에는 장애를 전파
    생성 서버
    지연 응답

    View Slide

  14. 신뢰성 없는 생성 서버
    •짧은 Timeout 설정


    •비동기 호출
    생성 서버
    지연 응답

    View Slide

  15. 생성 서버의 비동기
    빠른 응답
    생성 서버
    Async


    Thread Pool
    1. 요청


    2.Async하게 알림 생성


    3.응답

    View Slide

  16. Decoupling
    빠른 응답
    Async


    Thread Pool
    알림 요청 알림 생성
    생성 서버

    View Slide

  17. 비동기의 단점
    빠른 응답
    Async


    Thread Pool
    알림이 정상적으로


    만들어졌는지 당장 알 수 없네🥲
    생성 서버

    View Slide

  18. 빠른 응답
    Async


    Thread Pool
    생성 서버
    이체하고 바로 알림 조회했는데


    알림이 없네🥲
    비동기의 단점

    View Slide

  19. 생성 서버가 다운되거나 재시작되면?
    빠른 응답
    Async


    Thread Pool
    생성 서버

    View Slide

  20. 빠른 응답
    알림 유실
    Async


    Thread Pool
    생성 서버
    생성 서버가 다운되거나 재시작되면?

    View Slide

  21. Message Queue 도입
    PRODUCER CONSUMER
    QUEUE

    View Slide

  22. Message Queue 도입
    생성 서버
    Queue
    Consumer
    Enqueue Dequeue
    Database

    View Slide

  23. Decoupling
    생성 서버
    Consumer
    Dequeue
    알림 요청 알림 생성
    Enqueue
    Queue
    Database

    View Slide

  24. 생성 서버
    Consumer
    Dequeue
    Queue
    Enqueue
    Database
    Consumer에 장애가 발생하면?

    View Slide

  25. 생성 서버
    Consumer
    Dequeue
    Ack
    Enqueue
    Queue
    Database
    Consumer에 장애가 발생하면?

    View Slide

  26. Consumer에 장애가 발생하면?
    생성 서버
    Consumer
    Dequeue
    Ack
    Enqueue
    Queue
    Database

    View Slide

  27. Disk
    생성 서버
    Queue
    Consumer
    Enqueue Dequeue
    Database
    Message Queue에 장애가 발생하면?

    View Slide

  28. Message Queue에 장애가 발생하면?
    Disk
    생성 서버
    Consumer
    Enqueue Dequeue
    요청 저장
    Database
    Queue
    Database

    View Slide

  29. Disk
    생성 서버
    Consumer
    Enqueue Dequeue
    Queue
    요청 저장
    Database
    Database

    View Slide

  30. 알림 조회
    알림 조회 Database
    App

    View Slide

  31. 고객에게 안정적이고 빠른 서비스 제공
    간단해진 조회
    무거워진 생성

    View Slide

  32. 추가 요구사항
    최대 12개월 전 알림까지 조회하고 싶어요.
    대용량의 알림 템플릿을 xlsx로 다운로드 / 업로드하고 싶어요.
    고객센터
    운영팀

    View Slide

  33. 내부 서비스
    내부 서비스
    Database
    서비스
    Long Range Query,


    OOM 가능성 있는 요청

    View Slide

  34. 최근 데이터 위주로 조회
    시간
    9월 10월 11월 12월
    . . .

    View Slide

  35. 내부 서비스
    내부 서비스
    Database
    서비스
    Long Range Query,


    OOM 가능성 있는 요청

    View Slide

  36. Database 분리
    Service
    Database
    Archive
    Database
    내부 서비스
    서비스
    Long Range Query,


    OOM 가능성 있는 요청
    90일 전 ~ 오늘
    365일 전 ~ 90일 전

    View Slide

  37. 알림 파기
    4개월 데이터

    View Slide

  38. 4개월 데이터
    알림 파기
    Delete From Table


    Where (3ѐਘ ੉੹)

    View Slide

  39. Partitioning
    9월 10월 11월 12월

    View Slide

  40. Partitioning
    9월 10월 11월 12월

    View Slide

  41. Partitioning
    10월 11월 12월
    9월

    View Slide

  42. 3억
    4억
    5억
    21.08 22.02 22.08
    점점 늘어나는 알림
    작년 대비


    25% 상승

    View Slide

  43. Application Scale
    -
    out

    View Slide

  44. Application Scale
    -
    out

    View Slide

  45. Application Scale
    -
    out
    .


    .


    .

    View Slide

  46. A B C


    D E F


    G H I
    J K L


    M N O


    P Q R
    S T U


    V W X


    Y Z
    Sharding

    View Slide

  47. A B C


    D E F


    G H I
    J K L


    M N O


    P Q R
    S T U


    V W X


    Y Z
    Sharding
    H

    View Slide

  48. A B C


    D E F


    G H I
    J K L


    M N O


    P Q R
    S T U


    V W X


    Y Z
    Sharding
    H

    View Slide

  49. A B C


    D E F
    G H I


    J K L M
    N O P


    Q R S
    Sharding
    T U V


    W X Y Z
    H

    View Slide

  50. Sharding
    algorithm(user) => 1 ~ 16
    Schema 1
    Schema 5
    Schema 9
    Schema 13
    Schema 2
    Schema 6
    Schema 10
    Schema 14
    Schema 3
    Schema 7
    Schema 11
    Schema 15
    Schema 4
    Schema 8
    Schema 12
    Schema 16

    View Slide

  51. Sharding
    Schema 1
    Schema 5
    Schema 9
    Schema 13
    Schema 2
    Schema 6
    Schema 10
    Schema 14
    Schema 3
    Schema 7
    Schema 11
    Schema 15
    Schema 4
    Schema 8
    Schema 12
    Schema 16

    View Slide

  52. Sharding
    Schema 1
    Schema 9
    Schema 2
    Schema 10
    Schema 3
    Schema 11
    Schema 4
    Schema 12
    Schema 5
    Schema 13
    Schema 6
    Schema 14
    Schema 7
    Schema 15
    Schema 8
    Schema 16

    View Slide

  53. 정리

    View Slide

  54. E.O.D

    View Slide