Skip to content

cjw0324/DistributedSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

로드 밸런서 기반 분산 시스템 프로젝트

개요

본 프로젝트는 로드 밸런서와 다수의 서버 간 통신을 통한 분산 시스템 구현을 목표로 합니다. 프로젝트는 로드 밸런서, API 서버, TCP 서버, UDP 서버로 구성되며, 각 서버는 로드 밸런서와의 통신을 통해 등록 및 상태 관리를 수행합니다. 이 예제는 로드 밸런싱, 헬스 체크, 라운드 로빈 방식과 같은 분산 시스템의 주요 개념을 학습하는 데 도움을 줄 수 있습니다.

각 컴포넌트의 역할

1. 로드 밸런서 (loadbalancer)

로드 밸런서는 모든 서버의 중앙 관리 역할을 담당하며, 다음과 같은 기능을 수행합니다:

  • 서버 등록 및 제거: 각 서버는 로드 밸런서에 자신을 등록하거나 제거할 수 있습니다.
  • 헬스 체크: 주기적으로 등록된 서버들의 상태를 확인하고, 응답하지 않는 서버는 목록에서 제거합니다.
  • 라운드 로빈 방식의 로드 밸런싱: 요청을 순차적으로 등록된 서버들에게 분산시킵니다.

2. API 서버 (apiserver1, apiserver2)

API 서버는 클라이언트의 요청을 처리하며, 다음과 같은 역할을 수행합니다:

  • 로드 밸런서와의 통신을 통해 서버를 등록하고 상태를 관리합니다.
  • 헬스 체크 요청을 수신하고 정상 상태임을 응답합니다.
  • 로드 밸런서가 라운드 로빈 방식으로 분배한 메시지를 수신하여 처리합니다.

3. TCP 서버 (tcpserver)

TCP 서버는 API 서버와 유사한 역할을 수행하며, TCP 프로토콜을 사용하여 통신합니다:

  • 로드 밸런서에 등록하고 헬스 체크 요청을 처리합니다.
  • 로드 밸런서로부터 수신한 메시지를 처리합니다.

4. UDP 서버 (udpserver)

UDP 서버는 UDP 프로토콜을 사용하여 통신하며, 다음과 같은 기능을 수행합니다:

  • 로드 밸런서에 서버를 등록하고 상태를 관리합니다.
  • 헬스 체크 요청을 수신하고 응답합니다.
  • UDP 통신을 통해 메시지를 처리합니다.

로드 밸런싱 방식

본 프로젝트는 라운드 로빈 방식을 채택하여 로드 밸런싱을 구현하였습니다. 라운드 로빈 방식은 등록된 서버 리스트에서 순서대로 하나씩 서버를 선택하여 요청을 분배하는 방식으로, 각 서버에 균등하게 부하를 분산시키는 특징이 있습니다.

이 프로젝트가 분산 시스템 이해에 기여하는 바

본 프로젝트는 분산 시스템의 주요 개념을 학습하는 데 유용한 도구가 됩니다:

  1. 로드 밸런싱: 클라이언트의 요청을 여러 서버에 분산시켜 서버 부하를 고르게 분산하고, 시스템 성능을 최적화할 수 있습니다.
  2. 헬스 체크: 주기적인 상태 점검을 통해 비정상적인 서버를 자동으로 제외함으로써, 시스템의 안정성을 보장합니다.
  3. 프로토콜의 이해: TCP와 UDP의 차이를 이해하고, HTTP 기반 API 통신소켓 기반 통신의 특성을 학습할 수 있습니다.
  4. 분산 환경에서의 예외 처리: 연결 실패 시 예외 처리와 같은 분산 시스템에서의 오류 처리 방식을 학습할 수 있습니다.

시작하기

  1. 프로젝트 클론
    git clone https://github.com/username/LoadBalancerProject.git
  2. 서버 및 로드 밸런서 실행
  3. Main 클래스에서 UdpServer, TcpServer, ApiServer 등을 실행하여 시작합니다. 로드 밸런서를 통해 요청 보내기 예: http://localhost:8080/send-message2server

요구사항

Java 8 이상 Jackson 라이브러리 (JSON 파싱) Spring Boot (로드 밸런서 HTTP 서버)

실행

  1. 각 서버와 로드 밸런서 실행
  2. Main 클래스에서 서버 인스턴스를 생성하고, 로드 밸런서를 시작합니다.
  3. 테스트 및 검증 클라이언트가 로드 밸런서에 요청을 전송할 때, 라운드 로빈 방식으로 서버에 요청이 전달됩니다. 헬스 체크는 주기적으로 실행되며, 비정상적인 서버는 자동으로 등록 목록에서 제거됩니다.

About

[단국대학교 컴퓨터공학과] 분산처리 강의

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors