반응형

소켓 통신 29

네트워크 병렬 서버 로드 밸런싱 - DNS, Anycast

개요네트워크 병렬 서버 로드 밸런싱 - 프록시 서버 네트워크 병렬 서버 로드 밸런싱 - 프록시 서버개요다수의 클라이언트가 서버로 요청을 보내는 경우, 한개의 서버로 모든 클라이언트의 로직을 처리한다면 해당 서버에는 과부하가 걸릴 것이고 클라이언트는 응답을 늦게 받거나 서버가 뻗zzzz955.tistory.com 프록시 서버를 사용하지 않고도 병렬 서버에서 부하 분산(로드 밸런싱)을 구현하는 방법이 있다.이러한 방법은 클라이언트가 직접 여러 서버와 통신하도록 설계하여 프록시 서버의 부하를 줄이고, 중간 단계를 없애는 데 초점을 둔다.   DNS 기반 부하 분산DNS 로드 밸런싱은 하나의 도메인 이름에 여러 개의 IP 주소를 매핑하여 클라이언트가 요청할 때마다 서로 다른 서버로 트래픽을 분배하는 기법이다.D..

소켓 통신 2024.11.26

네트워크 병렬 서버 로드 밸런싱 - 프록시 서버

개요다수의 클라이언트가 서버로 요청을 보내는 경우, 한개의 서버로 모든 클라이언트의 로직을 처리한다면 해당 서버에는 과부하가 걸릴 것이고 클라이언트는 응답을 늦게 받거나 서버가 뻗어버릴 것이다.그렇다면 서버를 병렬로 두어 여러가지 서버를 둔다고 가정을 해보자클라이언트 입장에서는 각 서버의 IP주소와 포트번호를 알아야 연결 요청을 진행할 수 있다.그럼 클라이언트 입장에서 어떤 IP주소와 포트번호로 연결 요청을 해야할까?또한 연결 요청한 서버가 과부하 상태라면 어떻게 할까?이를 관리 해주기 위한 로드밸런싱이 필요하다.  프록시 서버네트워크 프록시 네트워크 프록시개요프록시(Proxy)는 네트워크 통신에서 중개 서버 역할을 하는 시스템이다.클라이언트와 서버 사이에서 데이터를 중계하거나 대리로 처리하는 기능을 수..

소켓 통신 2024.11.26

네트워크 IOCP

개요IOCP(Input/Output Completion Port)는 윈도우 OS에서 고성능 비동기 입출력을 지원하기 위해 설계된 메커니즘이다.IOCP는 주로 대규모 네트워크 서버와 같이 높은 동시성을 요구하는 애플리케이션에서 사용된다. 비동기 I/O를 기반으로 동작하며, 연산이 완료될 때까지 블로킹되지 않아 CPU 리소스를 효율적으로 사용할 수 있다.입출력 작업이 완료되면 해당 작업의 완료 상태를 IOCP에 전달해 큐에 저장하고, 워커 스레드가 작업을 가져가 처리한다.이때 IOCP는 스레드 풀을 사용하여 워커 스레드를 관리해 필요한 만큼의 스레드를 유지하며, CPU 코어 수를 고려하여 최적의 성능을 제공한다.IOCP는 수천 개의 연결을 동시에 처리할 수 있어, 고성능 서버 구현에 적합하다.  작동 흐름C..

소켓 통신 2024.11.26

POSIX Docker 설치와 Ubuntu 환경 세팅

개요POSIX환경에서의 소켓 통신을 구현하기 앞서 Linux환경의 세팅을 Docker를 통해 진행해 준다. https://www.docker.com/products/docker-desktop/ Docker Desktop: The #1 Containerization Tool for Developers | DockerDocker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.www.docker.com 위 사이트를 방문하여 자신의 OS 환경에 맞는 Docker Desktop을 다운로드 해준다.나는 인텔 칩을 사..

소켓 통신/POSIX 2024.11.24

Boost.asio 실시간 채팅 AWS EC2 서버 구현

개요클라이언트가 채팅 서버에 접속하고, 각자 닉네임을 생성한 후에 실시간으로 다른 클라이언트와 채팅을 통해 소통하는 소켓 통신을 구현해 보자로직은 다음과 같다.클라이언트가 서버로 연결 요청을 한다.서버가 연결 요청을 수락한다.클라이언트가 사용할 닉네임을 설정하고 이를 서버에 쓰기 연산을 한다.서버에서 해당 클라이언트의 닉네임을 읽고 기억한다.클라이언트가 동기 쓰기 연산을 통해 하고싶은 말을 서버로 출력한다.서버가 클라이언트로 부터 받은 데이터를 읽고 현재 연결되어 있는 모든 클라이언트에게 데이터를 보낸 클라이언트의 닉네임을 사용하여 쓰기 작업을 한다.모든 클라이언트에서 서버로 부터 받은 데이터를 읽는다. AWS EC2 서버서버는 Linux 환경에서 구현한다, 물론 클라이언트도 구현 할것이다.AWS EC2..

소켓 통신/Boost 2024.11.24

Boost.asio 비동기 TCP 서버

개요비동기 TCP 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.비동기 I/O 및 제어 연산을 한다.한 번에 여러 클라이언트를 처리할 수 있다.일반적인 비동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.비동기 수용 연산을 시작하도록 한다.하나 이상의 스레드를 만들어 Boost.asio 이벤트 루프를 실행시키는 스레드 풀에 추가한다.비동기 수용 연산이 끝나면, 다음 연결 요청을 받아들이는 새로운 연산을 시작하도록 한다.비동기 읽기 연산을 시작시켜 연결된 클라이언트로부터 들어오는 요청을 읽는다.비동기 읽기 연산이 끝나면, 요청을 처리하고..

소켓 통신/Boost 2024.11.20

Boost.asio 병렬 동기 TCP 서버

개요병렬 동기 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.I/O 및 제어 연산을 하는 동안에는 연산이 끝나거나 오류가 발생할 때까지 실행 스레드를 멈춘다.클라이언트를 한 번에 하나 이상 처리할 수 있다.일반적인 병렬 동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.서버가 중단될 때까지 루프를 돈다.클라이언트로부터 연결 요청이 오기를 기다린다.연결 요청이 오면 받아들인다.스레드를 새로 생성하고 새 스레드에서 다음과 같은 작업을 한다.클라이언트로부터 요청 메시지가 오기를 기다린다.요청 메시지를 읽는다.요청을 처리한다.클라이언트에게 응..

소켓 통신/Boost 2024.11.20

Boost.asio 반복 동기 TCP 서버

개요반복적 동기 TCP 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.I/O 및 제어 연산을 하는 동안에는 연산이 끝나거나 오류가 발생할 때까지 실행 스레드를 멈춘다.클라이언트를 한 번에 하나씩 처리한다.일반적인 동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.서버가 중단될 때까지 루프를 돈다.클라이언트로부터 연결 요청이 오기를 기다린다.연결 요청이 오면 받아들인다.클라이언트로부터 요청 메시지가 오기를 기다린다.요청 메시지를 읽는다.요청을 처리한다.클라이언트에게 응답 메시지를 보낸다.클라이언트와의 연결을 닫고 소켓을 할당 해지한다. ..

소켓 통신/Boost 2024.11.18

Boost.asio 서버 개요

개요서버는 분산 어플리케이션의 반대쪽 부분인 클라이언트에게 받을 서비스를 제공하는 역할을 맡는다.그리고 클라이언트는 서버가 제공하는 서비스를 받기 위해 서버와 통신한다. 일반적으로 서버는 클라이언트-서버 통신 과정에서 수동적인 역할을 한다.서버는 호스트의 포트에 붙고, 그 포트로 클라이언트가 요청을 보내지 않는지 기다린다.요청이 도착하면 서버는 자신이 제공하는 서비스에 맞춰 동작한다. 서버가 제공하는 서비스에 따라 요청 처리 과정도 매우 다르다.예를 들어, HTTP 서버라면 대체로 요청 메시지에서 원한 파일 내용을 읽어 클라이언트로 보낸다.프록시 서버라면 클라이언트의 요청을 실제로 처리할 다른 서버로 전달한다.좀 더 구체적인 서버들이라면 클라이언트가 제공한 데이터에 대해 복잡한 계산을 거쳐 그 결과를 클..

소켓 통신/Boost 2024.11.18

Boost.asio 비동기 멀티 스레드 TCP 클라이언트

개요클라이언트가 수백 만개의 요청을 만들 수 있고, 최대한 빠르게 처리하고 싶다면, 다중 스레드를 지원해야한다.그러면 여러개의 스레드가 진짜로 동시에 여러 요청을 처리할 수 있다.물론, 클라이언트가 실행되는 컴퓨터에 프로세서가 여러 개 있어야 한다.만약, 컴퓨터에 설치된 프로세서의 수보다 더 많은 스레드를 동시에 실행시키면 스레드 교환에 따른 부하 때문에 어플리케이션의 속도가 오히려 떨어질 수도 있다. 단일 스레드와의 차이는 클래스 인스턴스를 생성할 때 생성자에 생성할 스레드의 개수를 전달한다.해당 정수를 통해 전달한 크기 만큼의 스레드를 생성하여 작업을 병렬처리 할 수 있다.I/O 연산을 하는 부분은 단일 스레드와 큰 차이가 없으므로 하기 글을 참고하길 바란다. Boost.asio 비동기 단일 스레드 ..

소켓 통신/Boost 2024.11.18
728x90
반응형