Redis

    Redis - Pipelining

    Redis하면 뭐가 떠오를까 ? - 캐시이므로 빠른 성능 - key-value - 인메모리 db - Single thread - atomic Single thread vs Multi Thread redis는 부분적으로 Single thread와 Multi Thread를 함께 사용한다. 클라이언트로 부터 전송된 네트워크를 읽는 부분과 전송하는 부분은 Multi Thread로 구현되어있으며 우리가 redis에 요청한 명령을 실행하는 부분은 Single thread로 구현되어 있다. 때문에 single thread의 장점인 Atomic한 요청 처리가 가능한 것이다. I/O : 네트워크 connection Event Loop : 명령 실행부분 위와 같은 방식을 활용한다면 클라이언트가 네트워크 패킷을 여러번 보냈..

    redis 서버에 외부서버가 접근하는 방법

    docker-compose.yml db-mysql: restart: always image: mysql:8.0 environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} ports: - 3306:3306 command: - "mysqld" - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" volumes: - ./db:/var/lib/mysql redis: hostname: ${REDIS_HOSTNAME} container_name: redis image..

    PUB/SUB 채팅서비스 redis ? kafka

    이번 소프트웨어마에스트로 서비스에서 채팅서비스를 운영하면서 웹소켓의 stomp구조를 사용하게되었다. STOMP란 무엇일까 ? (Simple/Stream Text Oriented Message Protocol) websocket 위에서 동작하는 문자 기반 메세징 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형 형식 내용들을 정의하는 매니즘 TCP와 웹소켓과 같은 신뢰할 수 있는 양방향 스트리밍 네트워크 프로토콜 기본적으로 pub/sub 구조이며, 메세지 전송하고 받아 처리하는 부분이 확실히 정해져 있다. http 와 마찬가지로 frame을 사용해 전송하는 프로토콜 여기서 pub/sub 란 무엇인지 또 알아보겠습니다. 1. 이벤트메세지를 발행하는 publisher가 존재하고, publisher는 특정 ..

    Lock 정리(낙관적 락과 비관적 락, 분산락, 데드락) 및 활용까지

    낙관적 락(optimistic Lock) - 충돌이 발생하지 않는다고 낙관적이라고 가정함. - DB가 제공하는 락 기능이 아니라 어플리케이션에서 제공하는 버전관리 기능을 사용함. - version 등의 구분칼럼을 사용하여 충돌방지 - 트랜잭션을 커밋하는 시점에 충돌을 알 수 잇다. - 최근 업데이트 과정에서만 락을 점유하기 때문에 락 점유시간을 최소화하여 동시성을 높일 수 있다. 예) 1. A가 먼저 접근 후 바로 뒤이어 B가 접근한다. 2. A가 해당 ROW와 version 을 업데이트한다. 3.B가 커밋 시점에 해당 ROW를 업데이트하려고 version을 체크해보니 처음과 다른 경우 어플리케이션은 예외를 발생시키고 첫번째 A의 커밋만 적용하여 정합성을 유지한다. 4. 실패된 커밋을 어플리케이션에서 후..