3. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
이전에 우리 학교를 배경으로 한 메타버스를 구현
로그인, 채팅 기록 저장 등 DB 관련 작업을
Backend server를 따로 만들어 수행
AWS를 사용해 서비스
4. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
필요한 기능
- User 담당 기능: 로그인, 회원가입에 사용
- Chat 담당 기능: 채팅 기록을 DB에 저장
- 위 정보들을 시각적으로 확인할 수 있는 View
5. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
User Service
회원가입시 사용자가 입력한 정보를 DB에 저장하고
로그인을 할 때 입력한 정보의 valid 확인
정보를 DB에 User table에 저장
6. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
Chat Service
사용자의 채팅을 DB에 저장하는 서비스
예상치 못한 문제에 대비하기 위해 이를 저장
7. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
View Service
사용자의 정보를 검색하고
채팅 내용을 확인할 수 있는 서비스
User, Chat table에 입력된 정보를 요청 후 출력
Ex, Inhyuk 아이디 검색
- 플레이어의 아바타 출력
- 아이디, 닉네임, 속해 있는 그룹 출력
- 플레이어가 한 채팅 내용을 출력
8. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
Monolithic Architecture
모든 기능을 하나의 프로그램으로 구현한 전통적인 구조
User, Chat, View 기능이 통합된 상태로 공용 DB를 사용해 서비스를 제공
User Chat View
DB
Application UI
Port: 8000
Business
Logic
장점
- 단순하기 때문에 빠른 개발 가능
- 서비스의 테스트 용이
단점
- 프로젝트가 커지면 빌드, 배포 시간이 오래 걸림
- 하나의 기능을 수정하면 전체를 다시 배포
- 언어의 제한이 있음
- 하나의 서비스의 버그가 다른 서비스에도 영향
9. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
MicroService Architecture
하나의 큰 서비스를 수행하기 위해 하나의 기능 단위로 서비스를 분리,
각 서비스는 자신의 목적만 집중해서 수행, 서비스끼리 Restful하게 통신
User, Chat, View 기능이 분리 되어있고, 각자의 DB로 서비스를 제공
User
DB
Application UI
Port: 8000
Business
Logic
- 서비스 각각은 Monolithic Architecture
Chat View
DB
Port: 8001 Port: 8002
장점
- 하나의 서비스에 집중해서 개발 하기 때문에 품질 향상
- 프로젝트의 크기가 작기 때문에 빌드, 배포가 빠름
- 하나의 기능을 수정하면 그 기능만 다시 빌드, 배포
- 각 서비스의 언어를 다르게 사용 가능
단점
- 작은 서비스들이 많기 때문에 관리의 복잡도 증가
- 테스트 부담 증가
Rest API Rest API
10. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
배포하고자하는SW
Part 1,
정리하자면,
MSA로 설계한 게임 backend server를 배포
서비스
- User Service
- Chat Service
- View Service
User, Chat Service는 각각의 DB를 사용해 정보를 관리
View Service는 User, Chat 정보가 필요하기 때문에 담당 service와 Restful하게 통신
12. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 3,
ECS (Elastic Container Service)
Amazon Elastic Container Service (Amazon ECS) is a highly
scalable, fast container management service that makes it
easy to run, stop, and manage containers on a cluster.
출처 – AWS ECS developer guide
ECS는 배포하려는 Application을 Container 단위로 배포, 관리를 지원해주는 Service이다.
기초적인 Container 관리부터 traffic에 따른 Auto Scaling,
무중단 배포를 위한 Blue-Green Deploy 등 다양한 관리 서비스를 제공한다.
MSA 관리 복잡도 하락
14. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
구성 요소
- Containers & Images (+ Docker)
- Tasks & Tasks Definition
- Container agent (With Fargate)
- Service
- Clusters
Part 3,
15. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 2,
Containers & Images (+ Docker)
(Container의 영역이 너무 크기 때문에, 아주 간략하게만 설명)
Container란, Application 실행에 필요한 코드, 시스템 환경 등을 모두 포함하는 실행 단위이다.
Image란, Container 실행을 위한 static file으로, 설정들 등을 포함한다.
하나의 Image로 여러 개의 Container를 생성할 수 있다.
이는 마치 하나의 Chrome App으로 여러 개의 창을 실행할 수 있는것과 같다.
Container 관련 작업을 할 때 Docker를 주로 사용한다.
Docker란, 단순하게 Container 를 위한 생성, 실행, 관리 를 도와주는 tool이다.
16. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
ECR (Elastic Container Registry)
AWS는 Docker Image를 저장할 수 있는 Private Registry를 제공한다.
사용자는 배포하고자 하는 SW를 docker를 사용해 build 후
ECR에 push 하는 방식으로 Image를 관리할 수 있다.
Part 3,
17. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
우리의 서비스는
User, Chat, View Service Image를 모두 ECR에 push 후
ECS에서 필요할 때 가져오는 방식
Part 3,
18. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Tasks & Tasks Definition
ECS는 Container 단위로 실행한다.
Task란, 실행을 위해 생성된
하나 이상의 Container의 집합으로 이해할 수 있다.
(요즘은 보통 하나의 Task에 하나의 Container를 실행)
Task Definition이란, Task 생성을 정의하는 청사진이다.
예를 들어, task에 사용할 Image, vCPU, memory, port 등을
정의할 수 있다.
즉, Task는 Task Definition에 설정 대로 생성된다.
Part 3,
19. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Container Agent (with Fargate)
Container Agent란, 생성된 Task를 실제로 수행하는 Computing Engine이다.
EC2와 Fargate 중 선택 가능한데, 프로젝트에서는 Fargate를 사용하였다.
Fargate란, EC2처럼 인스턴스를 관리할 필요 없이 Container를 실행시켜주는
Serverless Computing Engine Service이다.
Part 3,
20. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Fargate를 선택, 필요한 만큼 세밀하게 vCPU, memory 할당이 가능
Part 3,
21. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Service
Task의 생명 주기를 관리한다.
프로젝트에서 사용한 Service의 기능은 다음과 같다.
- 원하는 Task 개수 설정
- Blue-Green Deploy 설정
- Load Balancing 설정
- VPC, Subnet, Security Group 설정
- Auto Scaling policy 설정
Part 3,
22. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 2,
Clusters
Task를 실행하는 Container Instance들을 묶은 논리적 단위이다.
즉, ECS 에서는
동일한 Cluster에서 각 Task Definition을 Service로 생성하면,
설정에 맞춰 ECR에서 가져온 Image를 기반으로 Task를 생성하고,
이는 Container Instance가 실행하며 서비스 된다.
23. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 2,
ECS 배포 영상: https://youtu.be/dTZyB5-kJyw
게임 내 동작 영상: https://youtu.be/rZAIUj-dwR8
24. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
+ Blue-Green Deploy
기존 서비스 (blue) 에서 신규 서비스 (green) 에서 무중단 배포를 위한 기법
ECS에서는 2개의 TargetGroup을 사용한다. (‘Blue – 기존, Green – 신규’라고 가정)
1. 기존 Instance의 수 만큼 Green에 새로운 버전을 서비스하는 Instance를 생성
2. Instance가 모두 생성된 순간 Load Balancer는 2개의 TG으로 서비스 중
3. 롤백을 위해 일정 시간 (약 1시간) Blue 서비스를 남겨둔 후 제거
+ 배포 방식에는 여러가지 방법을 선택 가능
- 모든 traffic을 Green으로 전환
- 절반을 Green으로 전환, 이후 15분에 10%씩 추가적으로 이동
- 1분 간격으로 10% 씩 이동 등..
Part 3,
26. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 3,
ab -n 50000 -c 25 ALB_URL
최소 작업: 1
최대 작업: 3
Auto Scaling 실험
빠르게 확장/축소 결과를 보기 위해 휴지 기간을 짧게 설정
+ 게임 내에서는 특정 처리가 빨라야 하기 때문에 CPU UTIL을 낮게 설정
27. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 3,
수행 속도는 약 0.2초로 만족스럽지만,
CPU Util을 너무 낮게 잡아 끝난 후에 Instance가 증가하는 현상 발생
자원의 낭비
28. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 3,
ab -n 50000 -c 25 ALB_URL
CPU Util을 70으로 높이고, 최대 작업 개수를 2로 제한
29. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
ECS란무엇인가?
Part 3,
앞에서 발생한 문제 없이 비슷한 성능을 얻어낼 수 있었음
적정 Instance 개수 찾아내기 성공
30. ⓒSaebyeol Yu. Saebyeol’s PowerPoint
어려웠던점및해결방법
Part 4,
가장 어려웠던 부분
ECS를 사용하기 위한 기본 개념들 (task definition, service, container …)
블로그, 문서 등을 많이 찾아봄
하지만, 가장 도움이 됐던 것은 aws 공식 developer guide
어떤 서비스를 사용하기 전에 그 서비스의 동작 방법,
사용하기 위한 용어를 공부 후
주어진 간단한 예시를 수행해 감을 익히는 방식으로 ECS를 공부
교훈: 공식 문서들을 잘 읽고 용어를 확실하게 이해하자!