-
RSocket이란?프로젝트/WebSocket 2023. 7. 20. 00:01728x90
RSocket이란?
RSocket은 몇 가지 일반적인 마이크로서비스 통신 문제를 해결하기 위해 설계된 새로운 메시징 프로토콜입니다.
TCP 또는 WebSocket을 통해 작동하는 유연한 프로토콜을 사용할 수 있습니다.
이는 변환없이 바이너리 메시지를 처리할 수 있음을 의미하고 Multiplexing, back-pressure, resumption, routing과 같은 제어 기능을 사용할 수 있으며, fire-and-forget, request-response, requset-stream, Channel 등을 이용할 수 있습니다.
또한 RSocket은 reactive로 동작하기 때문에 처리량이 많은 마이크로서비스 애플리케이션에 이상적입니다.
Netflix, Pivotal, Alibaba, Facebook 등의 얼리어답터들이 사용하고 있습니다.
한마디로 정리하자면 TCP, WebSocket, Aeron, Http/2 Stream위에 동작할 수 있는 새로운 프로토콜로써 MSA 환경에서 기존 HTTP 통신을 대체할 수 있는 4가지 방법을 제시합니다.
Requset-Response
대부분의 웹 개발자에게 익숙한 패턴으로 하나의 요청을 보내면 하나의 응답을 받습니다.
Fire-And-Forget
응답이 없는 경우로, 단방향 메시지를 보냅니다 (server-sent와 비슷해 보인다)
Requset-Stream
하나의 메시지를 보내고 서버로부터 여러 응답 스트림을 받습니다.
Channel
양방향 통신 채널을 통해 클라이언트와 서버 간의 다중 요청 및 다중 응답을 주고받을 수 있습니다.
Rsocket vs Reactive WebSocket
- Reactive WebSocket은 application-level에서 back-pressure를 지원하지 않는다.
- WebSocket은 TCP 위에 계층화된 저수준 통신 프로토콜이며, 메시지를 라우팅 하거나 처리하는 방법에 대한 지침이 없습니다. 하지만 RSocket은 TCP, WebSocket, UDP 등과 같은 바이트 스트림 전송을 통해 실행됩니다.
Back Pressure란?
송신자와 수신자 간의 데이터 처리 속도 차이를 처리하기 위한 방법입니다.
예를 들어 데이터를 전송하는 Producer가 데이터를 빠르게 생성하더라도, Consumer는 처리할 수 있는 속도로 데이터를 수용합니다.
Consumer의 Overflow나 Memory 부족과 같은 문제를 방지하며 리액티브 프로그래밍에서 중요한 개념으로 사용됩니다.
이를 통해 데이터의 안정성과 처리 효율성을 향상할 수 있습니다.
Resumption이란?
RSocket 프로토콜의 기능 중 하나로, 네트워크 연결의 장애가 발생했을 때 연결을 복구하고 이전 세션 상태를 유지하는 메커니즘입니다. 이를 통해 클라이언트와 서버 간에 지속적인 통신을 유지할 수 있습니다.
이를 통해 네트워크 연결이 불안정하거나 끊어졌을 때 신뢰성과 내결함성을 제공하는 데 도움을 줍니다.
이를 통해 데이터 유실을 최소화하고, 애플리케이션의 지속적인 통신을 보장할 수 있습니다.
Multiplxed Streams란?
HTTP Pipelining의 개선안으로 하나의 Connection으로 동시에 여러 개의 메시지를 주고받을 수 있습니다.
응답은 요청 순서에 상관없이 처리됩니다.
리소스 간 우선순위를 부여하여 먼저 데이터를 전송하고 싶은 Stream에 가중치를 줄 수 있습니다.
참고자료
https://docs.spring.io/spring-framework/reference/rsocket.html
https://spring.io/blog/2020/03/02/getting-started-with-rsocket-spring-boot-server
https://stackoverflow.com/questions/46594297/spring-5-reactive-websockets-recommended-use?rq=4
https://rsocket.io/about/protocol/
'프로젝트 > WebSocket' 카테고리의 다른 글
Spring Boot WebSocket with Kafka (0) 2023.07.28 Spring WebSocket External Broker 적용(ActiveMQ) (0) 2023.07.21 WebSocket Scale Out - 이론편 (0) 2023.06.24 TCP Socket vs WebSocket (0) 2023.06.23 Spring WebSocket 활용 (0) 2023.06.12