ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • socketio redis adapter
    개발 2023. 1. 6. 17:49

    Publish Subscribe Pattern

    publisher가 subscriber에게 메시지를 바로 보내는게 아니고, publisher와 subscriber 사이에 이벤트 채널을 두는 형태다. publisher는 subscriber 에 대한 정보를 모른체 이벤트 채널에 메시지를 보내면 메시지는 분류화(categorized)돼서 이벤트 채널에 저장된다 저장된다. subscriber도 publisher에 대한 존재를 모른체 관심있는 메시지만 이벤트 채널로부터 수신한다. publisher와 subscriber 사이의 디커플링된 관계는 확장성을 용이하게 한다.

     

    Redis Pub/Sub Mechanism 

    redis 는 publish/subscribe 에서 이벤트 채널의 역할을 한다. 외부 애플리케이션에서 redis에 특정 채널 명에 메시지를 보내면(publish) 같은 채널을 구독하는(subscribe) 애플리케이션은 방금 보낸 메시지를 받을 수 있다. 내부적으로 시스템을 갖고 있어 쉽게 pub/sub 작업을 처리할 수 있다. 

     

    SocketIO + Redis Pub/Sub Mechanism

    socketio 는 redis의 pub/sub channel을 소켓 통신에 써먹는다. Server 1에서 처리한 작업을 Client A, D에게 동시에 메시지를 전달해야 한다고 해보자. Server1은 메시지를 Redis의 특정 채널에 보낸 다음(publish) Server 1, 2가 Redis로부터 다시 메시지를 받는다. Server1과 Server2는 받은 메시지를 각각 Client A, B에게 보낸다. pub/sub 구조를 응용한 방식이다. 서버가 여러대를 운용중인 경우 이런 구조로 서비스를 운영할 수 있다. 

     

    레디스 서버가 다운되는 경우에는 현재 서버와 연결된 클라이언트에게만 메시지를 보낸다. 이런 구조를 가져가는 경우에는 레디스 서버의 안정성도 같이 고려해야한다.

     

     

    pub/sub 패턴을 응용해서 다른 nodejs 서비스로부터 메시지를 보내는 기능도 있다.

     

    mongodb 랑 postgresql 도 SocketIO 의 Adapter로 사용할 수 있는데 개인적으로는 Redis가 가장 구현이 쉽다. 부하와 유지관리 측면에서는 어떤지도 추후 알아봐야겠다.

     

     

     

    Redis adapter | Socket.IO

    How it works

    socket.io

     

    Redis Pub/Sub

    How to use pub/sub channels in Redis

    redis.io

     

    '개발' 카테고리의 다른 글

    Python - 데코레이터  (0) 2023.02.14
    Nodejs Blocking/Non-Blocking,  (0) 2023.01.26
    dart - mixin  (0) 2023.01.04
    flutter - provider 패턴  (0) 2023.01.04
    typeorm - OneToOne, OneToMany, ManyToMany  (1) 2022.11.29

    댓글

Designed by Tistory.