Skip to content

Conversation

@fru1tworld
Copy link
Member

@fru1tworld fru1tworld commented Jan 19, 2025

✏️ 한 줄 설명

websocket 분산을 위한 load-balancer server 구현

✅ 작업 내용

  • Load Balancer 서버 구현 및 WebSocket 서버 Redis 의존

🏷️ 관련 이슈

📸 스크린샷/영상

📌 리뷰 진행 시 참고 사항

  • 확장 가능한 서비스를 위한 Load-Balancer 서버 구현

  • 현재 API, WebSocket, LB-Server로 구성되어있습니다.

  • WebSocket 서버 흐름은 다음과 같습니다.

  • connection 연결 connection 카운트 증가, redis 반영

  • 전체 커넥션 해제, redis key값 삭제

  • key값 ws:connection:${serverId}

  • 10초 간격으로 주기적으로 cpu 사용량을 redis에 업데이트

WebSocket 서버 정리

  • 10초 간격 CPU 사용량 CRON
  • 커넥션 연결 정보 Redis에 반영

Load-Balancer Server 흐름

  • 처음 연결
    1. 이미 연결된 Room이 있는지 Redis를 통해 확인
  • 1-1 연결된 정보가 있다면 해당 server 값 반환
    1. 연결된 Room이 없으면 Optimal Server 탐색
  • 2-1 Optimal Server는 CPU 가용량이 가장 낮은 서버의 값을 반환

Redis 구성

CPU 사용량을 조회할 때는 최소값만 알면되므로 ZSet(Sorted Set) 사용
WebSocket Connection 정보를 관리할 때는 단순히 get/set 사용

Container 구성

흐름의 주체는 결국 CPU의 코어
현재 NCP는 코어가 2개로 실행 중
docker-container에서는 특정 컨테이너가 특정 core에서 실행될 수 있도록 설정 작업
관련 작업은 이후 반영 예정

수정 필요한 부분 :

  1. CPU 사용량 계산을 core 단위로 계산
  2. CPUUsage가 아니라 CPUCoreUsage로 네이밍 수정
  3. Docker-compose 설정 수정

@fru1tworld fru1tworld changed the title 이후 협업을 위한 PR Load-Balancer 서버 구현 Jan 22, 2025
@fru1tworld fru1tworld force-pushed the feature/load-balancer branch from 0f18228 to 0158fd8 Compare January 22, 2025 07:13
@fru1tworld fru1tworld merged commit 8916395 into dev Jan 22, 2025
fru1tworld added a commit that referenced this pull request Jan 22, 2025
fru1tworld added a commit that referenced this pull request Jan 22, 2025
fru1tworld added a commit that referenced this pull request Jan 22, 2025
fru1tworld added a commit that referenced this pull request Jan 22, 2025
* docs: 리드미 링크 수정 (#6)

* Wesocket서버 및 API 서버 분리  (#3)

* fix: api 서버와 websocket 분리를 위해 backend 서버 네임 변경

* feature/split api websocket

* fix: 분리 후 중복되는 코드 삭제

* Load-Balancer 서버 구현 (#5)

* fix: api 서버와 websocket 분리를 위해 backend 서버 네임 변경

* feature/split api websocket

* fix: 분리 후 중복되는 코드 삭제

* fix: 불필요한 파일 삭제 및 하위 subTree connection 연결되어있는 경우 저장되는 오류 해결

* feat: load-balancer server 초기 세팅 nest 생성 redis container 설정 docker-compose 수정

* fix: 하위 subTree 삭제됐는데 note를 생성할 수 있는 로직 수정

* fix: 삭제된 트리에서 노트가 생성되던 문제 해결 및 Validation 계층추가로 결합도 낮추기

* feat: redis 환경 설정 및 연결 여부 확인

* feat: load-balancer server && WebSocket Server 분산 작업 및 docker-compose 작업

* fix: url 주소 변경됨에 따라 urlParse 로직 일부 수정

* fix: room2 연결 안되던 문제 해결

* fix: cron이 작동하지 않는 문제 해결

* feat: lb-server 기능 개발

* fix: lb-server key값 수정

* feat: load-balancer 로직 구현

* feat: lb 요청 로직 추가

* fix: lb 요청 로직 비동기로 작동하도록 수정

* fix: window 상에서 redis 포트 사용 불가로 docker-compose override 수정

* fix: 웹소켓 연결 시 순환참조 수정

* fix: note 생성 요청에 spaceId 추가

* fix: validation 검증 로직 수정

* feat: 노트 에디터 로드밸런싱 로직 적용

---------

Co-authored-by: Byeongju Park <badmuxi@gmail.com>

* Revert "Load-Balancer 서버 구현 (#5)"

This reverts commit 8916395.

---------

Co-authored-by: Byeongju Park <badmuxi@gmail.com>
fru1tworld added a commit that referenced this pull request Jan 22, 2025
* fix: api 서버와 websocket 분리를 위해 backend 서버 네임 변경

* feature/split api websocket

* fix: 분리 후 중복되는 코드 삭제

* fix: 불필요한 파일 삭제 및 하위 subTree connection 연결되어있는 경우 저장되는 오류 해결

* feat: load-balancer server 초기 세팅 nest 생성 redis container 설정 docker-compose 수정

* fix: 하위 subTree 삭제됐는데 note를 생성할 수 있는 로직 수정

* fix: 삭제된 트리에서 노트가 생성되던 문제 해결 및 Validation 계층추가로 결합도 낮추기

* feat: redis 환경 설정 및 연결 여부 확인

* feat: load-balancer server && WebSocket Server 분산 작업 및 docker-compose 작업

* fix: url 주소 변경됨에 따라 urlParse 로직 일부 수정

* fix: room2 연결 안되던 문제 해결

* fix: cron이 작동하지 않는 문제 해결

* feat: lb-server 기능 개발

* fix: lb-server key값 수정

* feat: load-balancer 로직 구현

* feat: lb 요청 로직 추가

* fix: lb 요청 로직 비동기로 작동하도록 수정

* fix: window 상에서 redis 포트 사용 불가로 docker-compose override 수정

* fix: 웹소켓 연결 시 순환참조 수정

* fix: note 생성 요청에 spaceId 추가

* fix: validation 검증 로직 수정

* fix: deploy
q

* Revert 5 feature/load balancer (#10)

* docs: 리드미 링크 수정 (#6)

* Wesocket서버 및 API 서버 분리  (#3)

* fix: api 서버와 websocket 분리를 위해 backend 서버 네임 변경

* feature/split api websocket

* fix: 분리 후 중복되는 코드 삭제

* Load-Balancer 서버 구현 (#5)

* fix: api 서버와 websocket 분리를 위해 backend 서버 네임 변경

* feature/split api websocket

* fix: 분리 후 중복되는 코드 삭제

* fix: 불필요한 파일 삭제 및 하위 subTree connection 연결되어있는 경우 저장되는 오류 해결

* feat: load-balancer server 초기 세팅 nest 생성 redis container 설정 docker-compose 수정

* fix: 하위 subTree 삭제됐는데 note를 생성할 수 있는 로직 수정

* fix: 삭제된 트리에서 노트가 생성되던 문제 해결 및 Validation 계층추가로 결합도 낮추기

* feat: redis 환경 설정 및 연결 여부 확인

* feat: load-balancer server && WebSocket Server 분산 작업 및 docker-compose 작업

* fix: url 주소 변경됨에 따라 urlParse 로직 일부 수정

* fix: room2 연결 안되던 문제 해결

* fix: cron이 작동하지 않는 문제 해결

* feat: lb-server 기능 개발

* fix: lb-server key값 수정

* feat: load-balancer 로직 구현

* feat: lb 요청 로직 추가

* fix: lb 요청 로직 비동기로 작동하도록 수정

* fix: window 상에서 redis 포트 사용 불가로 docker-compose override 수정

* fix: 웹소켓 연결 시 순환참조 수정

* fix: note 생성 요청에 spaceId 추가

* fix: validation 검증 로직 수정

* feat: 노트 에디터 로드밸런싱 로직 적용

---------

Co-authored-by: Byeongju Park <badmuxi@gmail.com>

* Revert "Load-Balancer 서버 구현 (#5)"

This reverts commit 8916395.

---------

Co-authored-by: Byeongju Park <badmuxi@gmail.com>

---------

Co-authored-by: Byeongju Park <badmuxi@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants