본 온라인 세미나에서는 AWS 서비스를 활용하시는데 있어, 총 소유비용(TCO) 관점에서 클라우드 사용시 장점에 대해 이해하고, AWS서비스 사용시 어떻게 하면 비용최적화를 잘 할 수 있을지를 예약인스턴스, 스팟인스턴스, S3의 라이프사이클 정책 활용 방법 등을 통해 학습합니다. 특별히, 예약인스턴스 구매, 비용 알람 설정, AWS 서비스 월별 사용 계산기 사용법 등에 대한 핸즈온을 통해 좀 더 저희 서비스에 쉽게 접근하실 수 있도록 도와드립니다.
발표영상 다시보기: https://youtu.be/LhBdKwKrQH8
본 온라인 세미나에서는 현재 발생하고 있는 AWS 비용을 어떻게 확인할 수 있는지와 해당 비용을 절감할 수 있는 모범사례들을 살펴보도록 하겠습니다. 특히, 예약 인스턴스 (RI), 스팟 인스턴스 (Spot) 와 같이 비용 절감에 도움을 주는 기능들을 학습하고, AWS가 제공하는 비용 관련 기능들을 이해함으로써 지속해서 비용절감을 할 수 있는 방법들을 알려드립니다.
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
본 온라인 세미나에서는 AWS 서비스를 활용하시는데 있어, 총 소유비용(TCO) 관점에서 클라우드 사용시 장점에 대해 이해하고, AWS서비스 사용시 어떻게 하면 비용최적화를 잘 할 수 있을지를 예약인스턴스, 스팟인스턴스, S3의 라이프사이클 정책 활용 방법 등을 통해 학습합니다. 특별히, 예약인스턴스 구매, 비용 알람 설정, AWS 서비스 월별 사용 계산기 사용법 등에 대한 핸즈온을 통해 좀 더 저희 서비스에 쉽게 접근하실 수 있도록 도와드립니다.
발표영상 다시보기: https://youtu.be/LhBdKwKrQH8
본 온라인 세미나에서는 현재 발생하고 있는 AWS 비용을 어떻게 확인할 수 있는지와 해당 비용을 절감할 수 있는 모범사례들을 살펴보도록 하겠습니다. 특히, 예약 인스턴스 (RI), 스팟 인스턴스 (Spot) 와 같이 비용 절감에 도움을 주는 기능들을 학습하고, AWS가 제공하는 비용 관련 기능들을 이해함으로써 지속해서 비용절감을 할 수 있는 방법들을 알려드립니다.
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
16. 유저 동시 접속
시간당 459,000명 안정적 접속
02
DevOps(CI/CD)
Frontend Pipeline
Backend Pipeline
Rolling Update
04
클라우드 기반
실시간 게임
구현 목표
실시간 게임
Websocket, Redis, Rabbit MQ
01
Container 환경
Gradle, package.json
환경 변수 분리, Stateless, ECS
03
17. 진행자
: WebSocket
2.1 퀴즈 플레이 전체 통신 흐름
참가자
Lambda
Log
데이터
Show
데이터
DynamoDB
Redis
RabbitMQ Spring
boot
Spring
boot
18. 진행자
WebSocket
Message 구조
참가자 화면
참가자
진행자 화면
서버
Redux
Redux
2.2 진행자 게임 화면 제어
Command
(Start)
퀴즈 시작 전
대기 화면
퀴즈 시작 화면
Command
화면 제어 퀴즈 시작
중간 결과
최종 결과
3개
Command
유저 제어
로비 대기
닉네임 체크
강퇴
정답 제출
퀴즈 종료
5개
19. RabbitMQ
2.3 서버 구조
Redis
퀴즈진행
3. 게임 서버
1. 인증 서버
인증 서버
인증 서버
2. Lambda
퀴즈 관리 로그 관리
퀴즈진행
퀴즈진행 퀴즈진행
퀴즈, 로그 관리
로그인
다중 컨테이너
퀴즈 진행
실시간 게임
데이터 관리
21. 1. 실시간 점수
랭킹 계산
Redis Cluster 구축
3.1 Redis - 성능 최적화
3. 안정적인
데이터 저장
Redis - Sorted Set Redis TTL
2. 메모리 관리
ZADD(점수 설정) - O(log(N))
ZRANDMEMBER(점수 증가) - O(N)
ZMSCORE(점수 가져오기) - O(N)
ZRANGE (전체 조회) - O(log(N)+M)
1. 게임 종료 시 사용했던
메모리 할당 해제
2. 4시간의 TTL적용 - 자동삭제
1. 데이터 유실 최소화
2. AWS ElastiCache를 이용한
3개 노드로 클러스터 구축
22. 3.1 Redis - 설계 구조
2. Sorted Set
참가자 정답 개수
참가자 랭킹 점수
제출자 수
데이터 산정
1. Set
Show ID
Email 인증번호
중복 제어
3. Hash
퀴즈 데이터 분리 및 저장
특정 데이터 조회
4. List
전체 퀴즈 데이터 조회
23. 3.2 NoSQL - DB 최적화
초기 RDB
RDB
LOG
데이터
SHOW
데이터
NoSQL
다중 테이블
Join 호출
프로젝트 구조상
NoSQL이 적합하다고 판단
24. 3.3 NoSQL - Show 데이터 전체 구조
2. NoSQL 저장 형태
1. Show 데이터 설계
{
"_id": "638af7d04f2229040345b52a",
"quizInfo": {
"email": "test@gmail.com",
"title": "",
"tags": [],
"createDate": "",
"lastModifyDate": "",
"isPulic": true,
"state": ""
},
"quizData": [
{
"num": 0,
"type": "",
"question": "",
"media": {
"type": "",
"url": ""
},
"choiceList": {
"num1": "",
"num2": "",
"num3": "",
"num4": ""
},
"answer": [],
"time": 0,
"useScore": true,
"rate": 0
},
],
"_class": "com.mzc.quiz.show.entity.Show"
}
27. 3.4 NoSQL - LOG 전체 데이터 구조
실제 저장 데이터
LOG – 진행된 전체 퀴즈 데이터
{
"id":"id",
"showid":"showid",
"email":"email",
"showtitle":"showtitle"
"playdate":"playdate",
"quizcount":"quizcount",
"Usercount":"usercount",
"userdata":[
{
"nickname":"test",
"rank":"1",
"rankscore":"12345",
"correctcount":"12",
"iscorrectlist":"0,1,-1"
},
{
"nickname":“nickName",
"rank":“2",
"rankscore":“112233",
"correctcount":"10",
"iscorrectlist":"0,1,-1"
}
]
}
(닉네임, 랭킹, 정답 수 등)
37. EC2
Instance Type Purpose Cost Amount Total Cost
T3.small
(vCPU2, RAM 2GB)
ECS Cluster Instance $19.86 /m 5 $99.28 /m
T2.large
(vCPU2, RAM 8GB)
Dev Server
(Jeknins, Grafana)
$88.77 /m 1 $88.77 /m
Lambda
Architecture Purpose Memory Request / Month 실행시
간
Total Cost
x86_64 Show, Log API 128MB 3천만 300ms $24.75 /m
6. 인프라 예상 비용 – Compute $140
t3.small * 1 $ 23.31 /m
38. Elastic Load Balancer
Type LCUs New Conn /S Active Conn /M Processed bytes / H Amount Total Cost
Application 1 25 3000 1GB 2 $47.16 /m
NAT Gateway
Data Processed / month Amount Total Cost
100 GB 1 $51.46 /m
Amazon MQ (Rabbit MQ)
Type Purpose Broker EBS OutBound Traffic Total Cost
Rabbit MQ MQ 1개 200GB 100G $49.75 /m
6. 인프라 예상 비용 Network & RabbitMQ $ 140
39. Role Engine Instance Type Deployment Option Billing option Total Cost
Primary Mysql t3.mirco Single-AZ On-Demand $18.98 /m
DynamoDB
ElastiCache
Table Class Capacity mode DataSet Read Units Write Units Total Cost
Standard Provisioned 10GB 5 5 $6.10 /m
Engine Instance Type Instance Number Billing option Total Cost
Redis t3.mirco 3 On-Demand $56.94 /m
MySQL
6. 인프라 예상 비용 – DB $ 80
40. EBS
Volume Type Storage IOPS Snapshot Amount Total Cost
gp2 30 GB 100 / 3000 0 GB 6 $21.60 /m
S3
Volume Type Storage PUT/COPY/POST GET Amount Total Cost
Standard 100 GB 1000 K 1000 K 1 $8.63 /m
ECR
Data stored Type Amount Total Cost
50GB Private 2 $20 /m
6. 인프라 예상 비용 – Storage $ 45
42. 1. 테스트 전제조건
사용자 수
(단위: 명)
플레이 수
(단위: 시간당 횟수)
1게임 req
(단위: 명당 횟수)
시간당 req
(단위: 시간당 횟수)
진행자 1
3
17 51
참가자 50 12 1,800
총계 51 3 29 1,851
1시간당 1,000게임 진행
총 req: 1,851 X 1,000 = 1,851,000 req
43. 2. 테스트 시나리오
시간당 게임
1000, 2500, 5000
단위 스케일 아웃
반복횟수
서버 과부하 시
컨테이너 2개 증가
반복횟수 조정
컨테이너 8개 도달 후
최종 목표 미달성 시
1000 혹은 500단위로 증감, 최
적 컨테이너 수량 도출
최적 컨테이너 도출
Locust
테스트 도구
48. 5. 테스트 결과
진행자 수
(단위: 명)
참가자 수
(단위: 명)
총 사용자 수
(단위: 명)
성공
(단위: Container)
실패
(단위: Container)
1000 50,000 153,000 6 4
2500 125,000 382,500 8 6
3000 150,000 459,000 8 -
3500 175,000 535,500 - 8
4000 200,000 612,000 - 8
5000 250,000 765,000 - 8
49. 0.9vCPU, RAM 0.9 GB * 8개
Redis : t3.mirco * 3개
Rabbit MQ : t3.mirco * 1개
Lambda : Managed by AWS
5. 시스템 성능 평가
안정 수치
초과 처리
클러스터
확장 필요
Play 서버 구성
평균치의 3배
확장 성능
목표 수치
900rps
안정 수치
550rps