[AWS SAA] Scalability - Scale Out

junghan·2023년 2월 8일
0

AWS SAA

목록 보기
6/51
post-thumbnail

Scale-Up은 요구되는 컴퓨팅 파워에 따라서 컴퓨터 성능을 업그레이드 하는 것이었습니다. Scale-Out은 여러 대의 컴퓨터가 협력하여 공동의 목표를 이루는 것으로 Scale-Up과는 다른 내용입니다. 복잡도가 증가하면 예상치 못한 문제가 생길 수 있기 때문에 가급적 Scale-Up을 권장하고 Scale-Up 만으로 처리할 수 없는 정도의 트래픽이 발생했을 때 Scale-Out으로 처리하는게 좋습니다.

Scale-out이란?

트래픽에 대한 대처를 할 때 서버의 자원 스펙 상승으로는 한계가 있기 때문에 효율이 떨어지는 시점이 있는데, Scale Out은 컴퓨팅의 성능 상승보다 컴퓨팅 수를 늘려서 효율적으로 트래픽을 처리하는 방법입니다.

일반적으로 클라이언트와 서버간의 트래픽을 처리할 때, 위의 그림과 같이 오른쪽에 있는 웹 애플리케이션 서버는 아래와 같은 구조로 이루어져있습니다.

웹서버: nginx, apache ...
미들웨어: php, jsp ...
데이터베이스: mysql, oracle ...

Scale-Out의 핵심은 '분업'에 있는데, 위와 같이 클라이언트의 요청에 응답하기 위해 하나의 컴퓨터에서 처리하던 일들을 기능별로 여러가지 절차를 쪼개어서 두 대 이상의 컴퓨터가 분할해서 맡아 처리 속도를 높이는 것이 가능합니다.

분업에 대한 하나의 예로, 만약 데이터가 점점 늘어나 데이터처리속도가 느려지는 경우에 아래와 같이 slave DB를 두거나 샤딩(Sharding: 대규모 데이터베이스를 여러 머신에 저장하는 프로세스)을 통해 작업을 분할하여 성능을 개선시킬 수 있습니다.

웹서버의 경우에는 사용자가 IP를 통해 web server에 접근해야하는데, DNS설정을 바꿔 여러명의 사용자들이 DNS를 통해 다른 IP를 가진 웹서버에 각각 접속하던지 로드밸런서(Load Balancer:부하의 균형을 잡아줘서 부하가 골고루 전달되도록 하는 장치)를 통해 접근이 가능하게 할 수 있습니다.



ELB(Elastic Load Balancer)란?

Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 인스턴스의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅합니다. Elastic Load Balancing은 수신 트래픽의 변화에 따라 로드 밸런서 용량을 자동으로 조정합니다.

ELB 작동방식

  1. 클라이언트가 애플리케이션에 요청합니다.
  2. 로드 밸런서의 리스너는 구성한 프로토콜 및 포트와 일치하는 요청을 수신합니다.
  3. 수신 리스너는 지정한 규칙에 대해 수신 요청을 평가하고 해당하는 경우 요청을 적절한 대상 그룹으로 라우팅합니다. HTTPS 리스너를 사용하여 TLS 암호화 및 암호 해독 작업을 로드 밸런서로 오프로드할 수 있습니다.
  4. 하나 이상의 대상 그룹에 있는 정상적인 대상은 로드 밸런싱 알고리즘 및 리스너에서 지정하는 라우팅 규칙을 기반으로 트래픽을 수신합니다.


ELB 테스트

CLB는 구버전이므로 느낌만 보세요

간단하게 ELB환경을 만들고 인스턴스와 연결을 하여 테스팅을 해보도록 하겠습니다. 일부 생활코딩강의로 대체하였고, ALB관련 테스팅을 보려면 ALB포스팅으로 이동해주세요

ELB 생성

1. 로드밸런서 생성

2.로드밸런서 선택

3.Load Balancer 포트 설정

클라이언트로부터 들어오는 요청은 80, 443허용하고, 로드밸런서와 인스턴스간 통신은 ssl 통신을 할 경우 요금이 더 비싸지기 때문에 80으로 연결

4. 보안 그룹할당

5. 상태 검사 구성

정기적으로 각각의 인스턴스에 접근해서 상태를 체크하게 되는데, 위의 ping에 정의된 port와 path를 통해 검증하게됩니다.

시간, 횟수 한계점 등을 설정 가능합니다.

6. EC2 인스턴스와 로드밸런서 연결

7. 클라이언트에서 서버로 부하발생

client: ab -n 100 -c 10 [ELB주소]
서버 성능테스트
sever: sudo tail -f /var/log/apache2/access.log
서버 로그 확인가능

서버1과 서버2를 번갈아가면서 요청이 전달되는 것을 확인할 수 있습니다.



ELB 주의점

ELB를 사용할 때에 주의해야 할 점은 DB는 공통된 DB로 접근하도록 해야 한다는 것입니다.
Scale-Out을 하느라 기능을 나눌 때 DB를 포함한 인스턴스를 나눠버리면 하나의 애플리케이션이 공통된 DB를 사용하지 않게 되기 때문에 문제가 발생하게 됩니다.

  • 문제가 있는 분산 예시

  • 문제를 해결한 분산 예시



https://opentutorials.org/course/2717/11332

profile
42seoul, blockchain, web 3.0

0개의 댓글