프로젝트
-
Spring WebSocket External Broker 적용(ActiveMQ)프로젝트/WebSocket 2023. 7. 21. 00:01
개요 In-memory Broker인 SimpleBroker를 사용하게 되면 Server Instance가 여러 대 존재할 때 상태에 대한 동기화가 제대로 이루어지지 않을 수 있습니다. 예를 들어, A유저는 Server1에서 웹소켓을 연동하였고, B유저는 Server2에서 웹소켓을 연동하였습니다. 만약 같은 /topic/same을 바라본다고 하더라도 Server1에서 message를 보내면 A만 받을 수 있을 것이며, Server2에서 message를 보내면 B만 받을 수 있습니다. 이에 따라 External Broker를 적용해보고자 합니다. RabbitMQ, ActiveMQ 등을 적용해 볼 수 있습니다. External Broker를 활용한 STOMP 구조도 SimpleBroker를 이용한 구조에서 ..
-
RSocket이란?프로젝트/WebSocket 2023. 7. 20. 00:01
RSocket이란? RSocket은 몇 가지 일반적인 마이크로서비스 통신 문제를 해결하기 위해 설계된 새로운 메시징 프로토콜입니다. TCP 또는 WebSocket을 통해 작동하는 유연한 프로토콜을 사용할 수 있습니다. 이는 변환없이 바이너리 메시지를 처리할 수 있음을 의미하고 Multiplexing, back-pressure, resumption, routing과 같은 제어 기능을 사용할 수 있으며, fire-and-forget, request-response, requset-stream, Channel 등을 이용할 수 있습니다. 또한 RSocket은 reactive로 동작하기 때문에 처리량이 많은 마이크로서비스 애플리케이션에 이상적입니다. Netflix, Pivotal, Alibaba, Facebook..
-
Redis replication? Sharding? Sentinel? Cluster?프로젝트/redis 2023. 7. 11. 00:01
개요 Redis를 사용하게 되었을 때 물리 머신이 가진 메모리를 한계를 초과하는 데이터를 저장하고 싶거나, failover(장애)에 대한 처리를 통한 HA(고가용성)을 보장하려면 Sentinel이나 Cluster 등의 운영 방식을 선택해서 사용해야 합니다. 여기서 Sentinel, Cluster, Sharding, Replication 등에 대해 알아보겠습니다. One Redis Instance 가장 단순한 방법입니다. 여러 개의 서버가 단일 Redis 인스턴스를 바라보고 있습니다. 하지만 Redis에 장애가 발생하는 경우 모든 종속 서비스가 중단되는 사태가 발생합니다. 즉, 가용성 또는 내결함성이 없습니다. Redis Replication Redis가 복제(replication)를 통해 HA(High ..
-
Redis 주의사항프로젝트/선착순 쿠폰 발급 시스템 2023. 7. 1. 00:01
Cache Stampede Stampede를 해석하면 우르르 몰려오는 소떼등을 의미합니다. 우리는 레디스를 캐시로 사용할 때 데이터의 갱신을 위해 대부분의 서비스에서는 키에 대해 Expire Time(만료시간)인 TTL을 설정합니다. 키가 Expire Time이 도래하기전까지는 DB에 부하를 주지 않고 Redis에 부하를 주면서 빠른 응답을 제공하는 것이죠 하지만 대규모 트래픽 환경에서 이 TTL 값은 예상치 못한 문제를 발생시킬 수 있습니다. 대규모 트래픽에서 키가 만료되는 순간 Redis에 조회되지 않기 때문에 DB에는 순간적인 duplicate read가 발생하게 됩니다. 그리고 다시 이는 Redis에 키를 적재하기 위한 Duplicate write를 발생시킵니다. Cache Stampede를 해결..
-
WebSocket Scale Out - 이론편프로젝트/WebSocket 2023. 6. 24. 00:01
개요 webSocket을 흔히 전이중통신이라 말합니다. 웹소켓의 경우에는 끊어지지 전까지 TCP Connection이 계속이 지속되어야 하는데, 그러면 Port를 붙잡고 있는 건지 궁금해졌습니다. 글의 주제가 Scale Out인데 TCP Connection과 Port이야기를 하는 이유는 만약 서버의 포트가 모두 TCP Connection에 의해 연결되면 신규 클라이언트는 연결할 수 없으니 자연스럽게 Scale Out이 필요하게 됩니다. 따라서 먼저 이에대한 궁금증을 해결하고 Scale Out 하는 방법에 대해 알아봅니다. Websocket은 어떤방식으로 Connection 연결을 유지할까? 80번 포트 혹은 443포트로 핸드셰이크과정을 거칩니다. (클라이언트의 무작위의 포트, 서버는 80 혹은 443 포..
-
TCP Socket vs WebSocket프로젝트/WebSocket 2023. 6. 23. 00:01
TCP Socket이란? 네트워크상 서버와 클라이언트 두 개의 프로그램이 특정 포트를 통해 양뱡향 통신이 가능하도록 만들어주는 소프트웨어 장치입니다. intranet 바운더리(조직 내 네트워크)에서 작업하는 경우에는 해당 네트워크의 컴퓨터를 제어하고 TCP 연결에 적합한 포트를 열 수 있기 때문에 TCP 소켓을 통해 통신하는 것이 더 쉽습니다. WebSocket이란? 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜입니다. HTTP나 HTTPS 위에서 동작하도록 설계되었으며 포트를 80번 443번 사용합니다. 이에 따라 HTTP를 통해 연결을 시작하되 TCP 소켓과 유사한 통신 stream을 허용합니다. 둘은 무엇이 다를까? 위의 둘은 서로 상반되는 개념이 아닙니다. 다만 소켓 통신..
-
Redis는 싱글스레드인가?프로젝트/선착순 쿠폰 발급 시스템 2023. 6. 19. 00:01
개요 대부분 Redis는 Single Thread라고 알고 있으며, 저 또한 그렇게 이해하고 있습니다. 이런 배경지식으로 병렬 프로그래밍 환경에서 원자성(Atomic)을 보장하기 위해 사용하기도 하였습니다. 하지만 종종 다음과 같은글들을 만날 수 있습니다. https://medium.com/javarevisited/go-crazy-is-redis-single-threaded-or-multi-threaded-96fe8ff99ab9 Go crazy, is Redis single-threaded or multi-threaded? For early programmers, Redis is single-threaded, no doubt about it. So why do many friends have doubts..
-
선착순 쿠폰 발급 시스템 성능테스트프로젝트/선착순 쿠폰 발급 시스템 2023. 6. 18. 00:01
개요 모든 구현이 끝났고 성능테스트만 남게 되었습니다. 성능테스트는 nGrinder로 진행할 예정입니다. nGrinder Script import static net.grinder.script.Grinder.grinder import static org.junit.Assert.* import static org.hamcrest.Matchers.* import net.grinder.script.GTest import net.grinder.script.Grinder import net.grinder.scriptengine.groovy.junit.GrinderRunner import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess import n..