Null4U – SMCTF 운영시 사양 관련 Discussion

– SCA CTF에서 청소년부 뿐만 아니라 대학/성인부도 받을 예정이라 기존보다 리소스를 넉넉하게 받아야함
– 지원을 넉넉하게 받으면 가장 베스트지만 최악의 경우를 생각해서 거의 받지 못한다고 가정
– => 지원을 받던 받지 않던 인프라는 안정적 + 최소한의 비용 둘다 챙겨야함..

– 약 150명 정도의 규모로 예상됨.
– DB(PostgreSQL/Redis)를 RDS/ElastiCache로 분리해둘거임
– 저번 운영때 OS/커널에서 쓰로틀이 났던게 아마 SQLite 같은 파일 DBMS에 IO 문제이지 않을까 생각함. => 이건 문제 없을 것으로 예정

– 가장 중요한게 EKS 노드 성능임.. 일단 기본적으로 메인 백엔드 서비스 + Container Provisioner(이하 CP) 마이크로서비스로 분류(비중 70% 30% 정도)
– 백엔드 전용 노드는 ARM, 스택 전용 노드는 AMD/x86-64 기반으로 구성
– ==> Graviton3 기반 c7g.large(2 vCPU/4GiB) 4개로 구성하면 넉넉함. (8 vCPU/16GiB)
– 안정적으로 보면 20% 정도 여유를 둬서 6.4 vCPU, 12.8 GB 라고 생각하면 되는데 이 정도도 넉넉함. (150명 정도 규모라면)

– Deployment replicas는 메인 백엔드 4 replicas, Container Provisioner 2 replicas <– 얜 분산 굳이 안해도됨. 그래도 2개로 분산해뒀음
– Burstable QoS로 두기 위해 requests 설정할거임. cpu: 400m / memory: 512Mi 정도? (전체 “최소” 1.6 vCPU/2 GiB)
– CP는 절반 이하로 보고 cpu: 150m / memory: 256Mi (전체 최소 300m/512 MiB)
– 토탈 vCPU 1.9, 메모리 2.5GB를 최소로 잡고 들어감. 여유는 매우 충분 + Burstable QoS라서 안정적일 듯?
– => 하다가 버벅이면 Terraform 한줄 수정해서 워커 노드 수 늘려

– 문제는 스택을 굴리기 위한 스택 전용 노드인데..
– 아직 문제 스펙을 몰라서 대충 평균 50m 64MiB 사양이라고 가정하겠음.
– 최악의 시나리오를 가정하여 개인당 2개의 스택 제한 = 총 300개의 스택
– 50m x 300 = 15000m = 15 vCPU, 64Mi x 300 = 19200Mi = 18.75 GB
– 20% 정도 여유를 두면 토탈 18 vCPU, 24 GB 정도?
– AMD EPYC <– 이거 저렴함. c6a.2xlarge 3개 쓰면 대충 24 vCPU / 48 GB 정도의 리소스가 보장됨
– Max Pods (ENI 할당 가능한 IP 수)가 좀 애매한데.. Prefix Delegation를 킬까? -> 그냥 추후 팀 단위로 스택 제한되게 하는게 나을듯;;
– 아무튼 c6a.2xlarge 이거 3개면 충분함. => 근데 서울 리전에 없네 => c6i.2xlarge 이걸로 대신 ㄱ
– 근데 웹 문제는 리소스를 많이 먹어서 문제 만들어지면 다시 고민해봐야 할듯. 셀레니움이나 puppeteer 이런거 쓰면 리소스 요구량이 확 올라감 참고바라며 난발하진 않기를
– 네트워크가 문제다.. 노드 ENI 마다 최대 Pod 개수가 정해져있어서.. <– 이건 스택 리밋 정책을 팀 단위로 바꾸거나 해서 바꿔봐야할듯

그리고 매우 중요한거. "스택 리밋을 개인 기준으로 할지, 팀 기준으로 할지" => 이거 최악의 시나리오 가정으로 본다면 차이가 엄청 커짐.. 팀 단위로 스택 제한 걸어두는게 좋긴 할듯. ex) 팀당 최대 3개 => 그럼 최악의 경우 대충 최대 120개 정도의 스택이 필요하지 않을까? 유저 단위라면 최소 150개, 2개씩 주면 최소 300개씩 필요한데 그럼 노드 사양을 줄때 차이가 엄청 커지게됨.

개인으로 한다면 개인당 스택 1개씩으로 제한하는게 확실할듯
=> 어차피 스택 만드는거 레이트리밋 1분인데 그냥 해라.. AI 딸깍으로 병렬로 문제 풀어서 제출하는건 의도가 아니였기 때문에 괜찮을듯?

아무튼 대충 EKS 고정 비용까지 포함하면 24시간 딱 하루만 운영한다고 가정하면

– c6i.2xlarge x 3 : 3 x 0.384 x 24 = $27.65 / 24시간
– c7g.large x 4 : 4 x 0.0816 x 24 = $7.83 / 24시간
– EKS 클러스터는 시간당 0.1$ 고정 = $2.40 / 24시간
==> $37.88 / 24시간,,, 환율 아이고; 24시간 굴리면 이론적으로 56102.55원이라고 함 이정도면 괜찮지 않을까? 개인 부담해도..

근데 대충 이런것도 고려해야함.. 그냥

– EBS 볼륨 (거의 안듬)
– NAT Gateway (이게 좀 문제임.. 좀 많이 비싼 애임)
– NLB/ALB
– 데이터 트랜스퍼 비용 (AWS 특유의 가격 창렬)
– 퍼블릭 IPv4 요금

RDS / ElastiCache는 둘다 분산까진 안해도 되고 그냥 PostgreSQL RDS는 db.t4g.medium, Redis는 cache.t4g.small 정도면 될듯.
그러면 뭐 대충 24시간 기준으로 3~4 달러 나올듯? 불안하면 별로 안비싸니깐 사양 1.5~2배로 높이면 될듯. 근데 부하가 많진 않을듯?

참고로 EC2 에서 T 시리즈(패밀리)는 Burstable라고 해서 CPU 사용량이 적을때 크레딧을 적립하고 부하가 많아지면 크레딧을 소비해서 성능을 알아서 높힘. 그나마 부하 많을때가 스코어보드 이런거 조회할때이지 않을까? 스택 제외하고.

많아봤자 10만원 내외로 나오지 않을까 @@ // 애들한테 밥 한번 사줬다치고 개인 부담 + 지원 받으면 나름 할만할듯..

아까 말한 ENI Pod IP 부족한건 Prefix delegation로 해결 해보거나 스택 제한 정책을 유저가 아닌 팀 단위로 바꿔보는걸로 하자.
=> 이거 토글할 수 있게 만들기? 괜찮은듯.

DB 커넥션 문제랑 NodePort 부족 문제는 괜찮음. 커넥션 문제 생길일도 없지만 있어도 RDS Proxy 쓰면 그만이야~~

Loading

Bookmark the permalink.

Comments are closed.