Open su3inni opened 10 months ago
File과 비슷한 맥락
- 열고
- 쓰고
- 닫고
많은 I/O를 동시에 효율적으로 처리하기 위해서 I/O Model 필요
Sync
개발하기 쉽기 때문에 기본적으로 socket이 사용하는 방법이다.
- Sync ( Blocking ) 방식으로 작동 accept 호출의 경우 client가 실제로 connect할 때 까지 block 된다.
Socket API를 쓴다는 것은 커널에 요청을 보낸다는 것이고, 커널에 요청을 보내는 것은 System Call 이다. System Call은 결국 비용이다.
- 지정된 명령의 수행이 완료될 때 까지 반환되지 않는다.
- Listen의 backlog에 들어가 있는 것을 순서대로 꺼내며 accept 받는 구조
Async
I/O Multiplexing I/O가 균등하게 발생하는 것이 아니기때문에 효율을 높이기 위해 쓰는 방법이다.
System Call을 호출했을 때 완료될 때 까지 대기하는지 아닌지에 따른 차이가 있다.
단, 멀티 스레드 환경에서 Non-blocking을 사용할 경우 CPU 사용량이 증가하므로 사용을 지양한다.
- EWOULDBLOCK / EAGAIN 반환
System Call을 호출한 후 반환될 때 결과가 준비되어있는지 아닌지를 기준으로 구분한다.
EAgain이나 EWouldBlock이 오지 않는다.
- Non-Blocking과 차이점 System Call 의 갯수가 다르고, System Call은 비용과 연관되어있다.
System Call을 줄이고 Context Switching을 줄여야 하드웨어 효율을 높일 수 있다.
Network Architecture
서비스를 외부 혹은 내부에 제공하기 위해서 필요한 지원을 위한 설계
1. Load Balancing
Load : 요청을 처리하기 위해 시스템이 일하는 정도 > request / traffic LB를 위치시키고 LB 뒤에 서버를 연결시켜 부하를 분산 시키는 구조이다. Virtual IP : Load Balancer 의 IP
2. CDN : Contents Delivery Network
가장 가까운 곳에서 요청자가 데이터를 가져갈 수 있도록하는 솔루션이다. 인터넷은 Network 라우팅의 복잡성, bandwidth의 한계, latency등 여러 이유로 빠르지 않을 수 있다.
CDN을 사용하면..
원본데이터 Origin Server가 있고 Edge Server에 데이터를 받아온다.