24-06-21 네트워크 관련 지식
오늘은 AWS 강의를 마저 다 듣는 시간을 가졌다. 다양한 서비스들에 대해서 알게 되었고, 잘 이용할 수 있기 위해서는 더많은 공부가 필요할 것 같다.
그리고 네트워크에 대한 기본 지식이 부족하다고 생각해서 그 부분에 대해서 조금 더 공부해보았고 여기에 그 내용을 간단하게 정리해보았다.
1. 네트워크 안정성과 관련한 용어들
- 가용성
서버가 안정하다, 네트워크가 불안정하다라고 표현을 하지만 이런 표현들은 수치화가 되지 않았기 때문에 명확히 얼마나 안정적인지 알 수가 없다.
이런 안정성의 정도를 나타내는 용어가 바로 '가용성(Availability)'이다. 서버, 네트워크, 프로그램 등의 컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율을 뜻한다. 쉽게 말해 전체 사용 시간 중에서 정상적으로 사용할 수 있는 시간을 의미한다.
아래와 같은 수식으로 나타낼 수 있다.
$$ Availability(가용성) = \frac {정상 {\;} 사용{\;}시간(Uptime)} {정상{\;}사용 {\;} 시간(Uptime) + 정상적인 {\;} 사용 {\;} 불가능한 {\;} 시간(Downtime)} $$
가용성이 크다는 것은 전체 사용시간 중에서 대부분의 시간 동안 사용이 가능하다는 뜻이 된다. 가용성이 높다라고 표현하며 가용성이 높은 성질을 '고가용성(High Availability)'라고 한다.
모든 웹 서비스 업체들의 중요한 목표가 바로 이 고가용성이고, 그것을 달성하기 위해 다양한 방법들을 사용한다.
- 이중화와 다중화
이중화는 말 그대로 무언가를 이중으로 두는 것을 말한다. 가용성을 높이기 위한 기본적이고 대표적인 방법이다.
이중화 할 수 있는 대상은 아주 많다. 서버 컴퓨터와 같은 물리적인 장비들뿐만 아니라 DB와 웹 서버 프로그램 등도 이중화 할 수 있다.
이중화 할 수 있는 대상들 대부분은 문제가 발생할 경우 시스템 전체가 중단될 수 있는 대상이라는 공통점이 있는데 바로 이것을 단일 장애점(SPOF)라고 부른다. 이 단일 장애점에서 장애가 발생하면 서비스 전체가 동작하지 않기 때문에, 단일 장애점은 최대한 없애는 것이 좋다. 가용성을 높이려면 바로 이 단일 장애점을 이중화 하는 것이 좋다.
이중화에는 크게 두 가지 방식이 있다. 액티브-스탠바이(Active-Standby), 액티브-액티브(Active-Active) 이렇게 두 가지 방식이 있으며, 액티브는 가동 상태를, 스탠바이는 액티브의 백업으로 대기하는 상태를 의미한다.
액티브-스탠바이는 한 시스템은 가동하고, 다른 시스템은 백업 대기상태로 두는 이중화 방식이고, 액티브-액티브는 두 시스템 모두를 가동 상태로 두는 구성 방식이다.
액티브-액티브의 경우는 두 시스템이 동시에 가동되므로 성능상의 이점도 있다. 다만 한 시스템에 문제가 발생하면 순간적으로 다른 시스템에 부하가 급증할 수 있다는 단점도 있다.
이런 이중화를 더 일반적인 개념으로 확장하여 무언가를 여러개 두는 기술을 다중화라고 하며, 장비를 2개가 아니라 3개 이상으로 구성하면 더 안정적으로 시스템 운영이 가능할 것이다.
- 로드 밸런싱과 로드 밸런서
서버의 가용성에 큰 영향을 끼치는 요소 중 하나가 바로 트래픽이다. 서버를 다중화 하였더라도 트래픽 분배라는 문제가 남는다.
서버에 과도한 트래픽이 몰리게 되면, 높은 부하로 인해서 CPU의 발열이 심해지고, 메모리 공간 역시 부족해질 수 있으며, 병목 현상으로 응답이 느려지거나, 일부 요청에 대한 응답이 누락될 수 있으며, 프로그램의 일관성이 손상될 수도 있다. 서버의 가용성을 떨어뜨리게 되는 것이다.
서버를 다중화해도 특정 서버에만 트래픽이 몰리면 가용성이 떨어질 수 있기 때문에 트래픽을 고르게 분산해야 한다. 이 트래픽의 고른 분배를 위해 사용되는 기술이 '로드 밸런싱(Load Balancing)'이고 이 로드 밸런싱은 '로드 밸런서(Load Balancer)'에 의해 수행된다. 로드 밸런서는 네트워크 장비로도 수행할 수 있고, 로드 밸런싱 기능을 제공하는 소프트웨어를 설치하면 일반 호스트로도 로드 밸런서로 사용할 수 있다. 대표적인 웹 서버인 Nginx에도 로드 밸런싱 기능이 들어있다.
로드 밸런서는 일반적으로 다중화된 서버와 클라이언트 사이에 위치하며, 클라이언트가 로드 밸런서에 요청을 보내면 로드 밸런서가 요청들을 각 서버에 균등하게 분배한다.
부하가 균등하게 분산되도록 부하 대상을 선택하는 방법을 '로드 밸런싱 알고리즘'이라고 부르고 이 알고리즘의 종류는 다양하다.
2. 오늘 배운 것
- AWS 서비스 전반을 강의를 통해 쭉 둘러볼 수 있었다.
- 네트워크에 대한 이해가 더 필요한 것 같아 앞으로 하루에 일정 시간을 할애하여 공부해야할 것 같다. (오늘부터!)