Anúncio

쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 | 지민규, 서버 소프트웨어 엔지니어, 데브시스터즈 ::: Games on AWS 2022

Amazon Web Services Korea
8 de Nov de 2022
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Similar a 쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 | 지민규, 서버 소프트웨어 엔지니어, 데브시스터즈 ::: Games on AWS 2022(20)

Anúncio

Mais de Amazon Web Services Korea(20)

Último(20)

Anúncio

쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 | 지민규, 서버 소프트웨어 엔지니어, 데브시스터즈 ::: Games on AWS 2022

  1. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. 지민규 (Chi Mingyu) 서버 소프트웨어 엔지니어 Devsisters 쿠키런 킹덤이 대규모 서버와 인프라를 운영하는 방법 GAMES ON AWS 2022 - TRACK 03 용찬호 (Yong Chanho) R&D 엔지니어 Devsisters
  2. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 발표자 소개 2 지민규 쿠키런 킹덤 서버 리드 엔지니어 용찬호 DevOps R&D Engineer
  3. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. Part 1. 쿠키런: 킹덤 게임서버 Deep Dive 3
  4. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 4
  5. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 쿠키런 킹덤 • 팜 시뮬레이터 + 수집형 RPG • 비동기 요청/응답 기반 서버 • 동접자 수 35만명 이상 • 초당 5만 건 요청 5
  6. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 쿠키런 킹덤 서버 스택 • 언어: Scala • 패러다임: 함수형 • 통신: gRPC • RDBMS: CockroachDB(crdb) • NoSQL: Redis • 메시지 큐: Kafka 6
  7. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Stateless 서버, Stateful 서버 • 유저 데이터의 진실의 근원을 어디로 둘 것인가  데이터베이스일 때 Stateless  인메모리 일 때 Stateful 7
  8. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Stateless 서버, Stateful 서버 Stateless 서버 • 부하 분산이 쉬움 • 오토 스케일링이 안정적 • 메모리를 적게 소모 Stateful 서버 • 성능이 좋음 • 데이터베이스 부하가 적음 • 응답 시간이 빠름 8
  9. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Stateless 서버, Stateful 서버 • Stateless 서버가 운용하기 쉽다 • Stateful 서버가 Throughput이 높다 9
  10. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Stateful 서버 – 액터 모델 • 비동기 처리를 위한 모델 • 공유할 데이터의 소유권을 가진 경량 스레드 • 액터와 소통하여 공유 데이터 접근 10
  11. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Stateful 서버 – 액터 모델 11
  12. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Stateful 서버 – 액터 모델 12
  13. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 액터 클러스터 관리 • 분산 및 리밸런싱 • 유일성 보장 • 노드 멤버십 관리 • Akka Cluster sharding을 쓰자! 13
  14. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 클러스터 리더 선출 • 클러스터를 관리하는 역할 • 클러스터 리더는 노드간에 선정 • 클러스터 리더가 죽으면 다음 클러스터 리더 선출 14
  15. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 패킷 손실, 네트워크 파티션 • 패킷 손실은 피할 수 없음 • 지속적 패킷 손실 = 네트워크 파티션 • 클러스터 리더 방식은 Split-brain 문제가 발생 15
  16. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Split-brain Resolver(SBR) • 네트워크 파티션으로 인해 리더가 2명이 된 시나리오 16
  17. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Split-brain Resolver(SBR) • 노드 대수가 과반수인 클러스터만 남기는 방법 17
  18. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Split-brain Resolver(SBR) • 클러스터가 3개로 나눠져 전부 소수일 때는 어떻게? • 하나의 클러스터지만 특정 노드간 연결이 끊길 때는? 18
  19. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 계속된 클러스터 전멸로 인한 점검 19
  20. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 애초에 클러스터 리더가 필요한가? • 쿠버네티스는 이미 클러스터 멤버십을 관리하고 있다 • 쿠버네티스 클러스터에서 제거된 노드는 죽은 노드 20
  21. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Akka를 버리자! 21
  22. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Shardcake • 유일성, 리밸런싱 관리를 위한 서버 • 분산 데이터는 Redis에 저장 • 노드 생존 기준은 쿠버네티스 22
  23. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 23 Shardcake
  24. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 그 이후… • 8개월간 클러스터 형성 실패로 인한 점검 0회 • 클러스터 리더를 선출하지 않아 스타트업 시간 단축 • 가벼워져서 Autoscaling을 좀 더 공격적으로 활용 가능 24
  25. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 오픈소스화 25 https://github.com/devsisters/shardcake
  26. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 뒷 이야기 26 • 8시간 뒤 Akka의 라이센스 변경 공지...
  27. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 뒷 이야기 27 • 공개 일주일만에 Star 200개 획득?
  28. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. Part 2. 쿠키런: 킹덤 인프라 28
  29. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Part 2. 쿠키런 킹덤 인프라에서 다룰 내용들 • 쿠키런 킹덤의 인프라 구조 • EKS에서 대규모 데이터베이스를 운영하기 • Mission: 게임 서버 응답 시간 줄이기 • EKS에 1000개의 노드를 띄우면 어디가 터질까? 29
  30. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.1 쿠키런 킹덤 인프라 구조 30 AWS Cloud AZ 1 Global Accelerator EKS Istio ingressgw Istio ingressgw AZ N externalTrafficPolicy: local Elasticache Game Servers Game Servers CockroachDB (locality A) CockroachDB (locality N) Prometheus Prometheus ... kafka kafka Cloudfront Users CDN Download Operator ...
  31. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.2 EKS에서 대규모 데이터베이스 운영하기 31 • 현재 쿠키런 킹덤을 포함한 모든 DB는 EKS에서 운영 중 • CockroachDB의 경우 Locality를 적용한 Multi-AZ로 배포 CockroachDB (locality A) CockroachDB (locality B) CockroachDB (locality C) A A A A A B B B B B example) replicas: 5 primary primary
  32. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.2 EKS에서 대규모 데이터베이스 운영하기 32 장점 • 데이터베이스 운영이 매우 간편함 • 일반적인 EKS 애플리케이션과 동일한 레벨에서 인스턴스를 관리할 수 있음  (모니터링, 로깅 등) • Instance Retirement, Degradation 등의 경우에도 매우 유연하게 대응 가능 (CockroachDB의 경우)
  33. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.2 EKS에서 대규모 데이터베이스 운영하기 33 단점 • EKS 버전 업그레이드 시 노드의 교체 필요 (in-place 업그레이드 불가능) • 인프라 레벨에서의 튜닝이 어려울 수 있음 (ZFS 등) • EBS vs Local Storage (NVMe) • Local Storage 인스턴스를 사용할 시 cluster autoscaler 튜닝 필요 [1] [1] https://github.com/kubernetes/autoscaler/issues/1658#issuecomment-724364132
  34. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 34 쿠키런: 킹덤의 글로벌 흥행 • 한국 뿐만 아니라 다양한 국가들에서 플레이하기 시작 • 미국, 대만 등 지리적으로 멀리 떨어져 있는 국가의 유저들이 급증
  35. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 35 게임 서버 응답 시간을 빠르게 만들 수 없을까? • 지리적 거리로 인해 상대적으로 게임 서버 응답속도가 느려지는 현상 발생 • 유저의 게임 경험 향상 및 플레이 초기 퍼널에서의 이탈 예방 필요
  36. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 36 (DevOps 엔지니어가) 상상할 수 있는 직관적인 해결책들 • [X] 게임 서버 자체를 최적화한다. • [X] 게임 서버를 글로벌 리전으로 배포한다.  Part 1에서 설명한 actor 기반의 게임 서버 및 데이터베이스에서 멀티 리전이 고려되어야 함 • [O] 게임 서버 응답이 사용자에게 도달하는 네트워크를 최적화한다. • [O] 게임 서버 요청이 AWS 내부로 들어왔을 때의 네트워크를 최적화한다.
  37. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - GA 37 GA (Global Accelerator) 도입 • 클라이언트-서버 간 통신에서 AWS의 자체 네트워크 인프라를 사용하는 TCP 가속 솔루션 • non-GA 대비 약 2배 이상의 레이턴시 차이를 보임 (handshake rtt p99 기준)  지리적 거리가 멀 수록, 네트워크 상황이 열악할수록 그 효과가 극대화됨
  38. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - GA 38 Global Accelerator + EKS 연동 • GA에서 소스 IP 보존 방법 : ALB attach, 혹은 EC2 직접 연결 Global Accelerator Users Istio ingressgw Istio ingressgw Istio ingressgw ... Fetch EKS EC2 Info aws-ga- controller Register EKS Workers http (80) https (443) k8s service (NodePort)
  39. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - GA 39 Global Accelerator 사용 시 주의사항 • Global Accelerator 자체의 장애 발생 시 인지 및 원인 파악이 어려울 수 있음 장애 발생 DevPlay SDK로부터 수집되는 클라이언트 레이턴시
  40. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - GA 40 Global Accelerator Istio ingressgw Users (ko) Network Load Balancer Users (others) Route 53 - Korea : NLB Address - Others : GA Address geolocation record geolocation 교체
  41. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - AZ Locality 41 Game Servers CockroachDB (locality A) CockroachDB (locality B) CockroachDB (locality C) AZ 1 AZ 2 AZ 3 A A A A A B B B B B leader leader Game Servers Game Servers Multi-AZ에서는 AZ Locality를 적극 활용 • 응답 시간 감소 및 네트워크 비용 절약 가능
  42. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - AZ Locality 42 Multi-AZ에서는 AZ Locality를 적극 활용 • 응답 시간 감소 및 네트워크 비용 절약 가능 Game Servers CockroachDB (locality A) CockroachDB (locality B) CockroachDB (locality C) AZ 1 AZ 2 AZ 1 A A A A A B B B B B leader leader Game Servers Game Servers - AZ-cross 네트워크 비용이 2번 발생 - 쓰기 요청에 대한 응답시간 증가 Write Request for [A]
  43. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - AZ Locality 43 Multi-AZ에서는 AZ Locality를 적극 활용 • 응답 시간 감소 및 네트워크 비용 절약 가능 Game Servers CockroachDB (locality A) CockroachDB (locality B) CockroachDB (locality C) AZ 1 AZ 2 AZ 1 A A A A A B B B B B leader leader Game Servers Game Servers Write Request for [A] Istio Istio, AWS App Mesh 등 service mesh의 AZ Locality 기능을 활용
  44. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - AZ Locality 44 locality 적용 전/후 게임 서버 p99 latency 차이 locality 적용 전 locality 적용 후 Multi-AZ에서는 AZ Locality를 적극 활용 • 응답 시간 감소 및 네트워크 비용 절약 가능
  45. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - CNI 45 EKS는 aws-vpc-cni를 default CNI로 사용 EKS EC2 Instance ... ENI 1 aws-vpc-cni (aws-node) IP : 172.21.148.245 Pod A 1. Read ENI IP Address 2. Allocate IP to Pod Internet Gateway VPC NAT Gateway EC2 Instance ENI outbound traffic outbound traffic
  46. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - CNI 46 aws-vpc-cni를 Cilium, Calico으로 대체하거나, 함께 사용할 수도 있음 EKS EC2 Instance ... ENI 1 IP : 172.21.148.245 Pod A 1. Read ENI IP Address 2. Allocate IP to Pod Internet Gateway VPC NAT Gateway EC2 Instance ENI outbound traffic outbound traffic Cilium / Calico eBPF
  47. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.3 Mission: 게임 서버 응답 시간 줄이기 - CNI 47 별도의 CNI를 사용할 경우 다양한 부가 기능 사용 가능 • kube-proxy 대체 & DSR, eBPF 기반 모니터링 • EKS 1.24+, Kernel 5.10+ 권장 Users (others) Worker Node B 1.1.1.2 Pod A (10.0.0.1:80) Worker Node A 1.1.1.1 1.1.1.10 1.1.1.10:61000  1.1.1.1:33000 1.1.1.1:33000  1.1.1.10:61000 1.1.1.10:61000  10.0.0.1:80
  48. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 48 단일 클러스터에서 많은 개수의 노드를 띄울 때 문제가 될 수 있는 부분들 • AWS에서 1천개의 인스턴스 띄우기 • VPC에서의 IP 고갈 • Instance Degradation & Retirement • Prometheus 부하 • EKS 컨트롤 플레인 부하?
  49. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 49 일단 AWS에서 인스턴스 1천개를 띄울 수는 있을까? • 단일 인스턴스 타입으로 • 큰 인스턴스 타입으로 • 1천개를 띄우는 것은 현실적으로 불가능 각 AZ마다 가용 인스턴스 갯수가 정해져 있음 대규모 인스턴스가 필요하다면 Multi AZ는 필수 • EKS cluster autoscaler의 튜닝이 권장됨
  50. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 50 IP고갈은 어디에서 발생할까? EC2 Instance ENI 1 ... 기본적으로 10~60개의 IP를 할당하고 시작 ENI 2 EKS x 1000 = ? Game Servers
  51. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 51 Warm Pool을 이용한 IP 할당 최적화 [2] • WARM_ENI_TARGET : 인스턴스에서 여유분으로 보유할 ENI 개수 (default: 1) • WARM_IP_TARGET : 항상 여유분으로 가지고 있어야 하는 사용 가능한 IP 개수 • MINIMUM_IP_TARGET : 인스턴스에서 보유해야 할 IP의 최소 개수 (이미 사용한 IP 포함) [2] https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/eni-and-ip-target.md WARM_ENI_TARGET WARM_IP_TARGET MINIMUM_IP_TARGET 할당된 pod 갯수 ENI 갯수 총 IP 할당량 미사용 IP 갯수 1 - - 3 2 49 * 2 (49 * 2) - 3 = 95 0 5 10 3 1 10 10 - 3 = 7 0 5 10 7 1 12 12 -7 = 5 (WARM_IP_TARGET)
  52. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 52 IP 및 ENI attach는 CNI에 의해 동적으로 Attach 될 수 있음 - AWS API rate limit이 발생하지 않을지 주의 필요 여러 개의 EBS가 마운트되어 있다면 NIC을 충분히 활용하지 못할 수도 있음 [3] [3] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html
  53. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 53 Instance Degradation & Retirement • EC2 인스턴스를 많이 띄울수록 하드웨어 자체의 장애 가능성도 높아짐 • 쿠키런 킹덤의 서버/DB 인스턴스에 빈번한 retirement 발생
  54. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 54 • 데이터베이스  AZ Failure, 인스턴스 장애 시에도 무중단 서비스가 가능한 CockroachDB 사용 retirement(장애)에도 유연하게 대응할 수 있는 인프라/서버를 구축하는 것이 중요 CockroachDB (locality A) CockroachDB (locality N)
  55. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 55 게임 서버 • EKS에서 인스턴스가 내려갈 경우 ( = shutdown -h now) k8s API에서는 Pod이 일정 시간동안 Running으로 관측됨 • ShardCake가 지속적으로 Pod Health Check를 수행해서 샤드를 리밸런스 game-server-5ddcc5744-xnjjn 2/2 Running 0 6d8h game-server-5ddcc5744-pxgh2 2/2 Running 0 6d8h 1. retirement! 3. health check 2. Pod is Running State 4. Shard Rebalance
  56. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 56 prometheus • EKS 노드 개수가 늘어날수록 프로메테우스 메트릭 갯수도 증가 • 프로메테우스 OOM 발생 유발  WAL Replay로 인한 메모리 증가  또 다시 OOM  반복 최적화 이전의 Prometheus 메트릭
  57. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 57 prometheus • 어떤 메트릭이 어떠한 원리를 통해서 어디에서 수집되는지에 대한 명세가 필요 • retention을 짧게 설정한 뒤 thanos, cortex를 사용하거나, federation, hierarchy 형태의 Prometheus/Thanos를 권장 1. custom scrape config 2. ServiceMonitor 3. Annotation Based Scrape Prometheus Prometheus ... AWS S3 ...
  58. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. 2.4 EKS에 1000개의 노드를 띄우면 어디가 터질까? 58 prometheus • 메트릭 부하를 확인할 수 있는 쿼리 또는 명령어  sum(scrape_sampes_post_metric_relabeling) by (job) : job 별로 쌓이는 메트릭 양 확인  topk(30, count by (__name__)({__name__=~".+"})) : 메트릭 이름 별로 카디널리티 확인  tsdb analyze /prometheus : tsdb 단에서 chunk를 읽어서 카디널리티 분석 – 또는 :9090/api/v1/status/tsdb 엔드포인트 사용
  59. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. We are hiring! 59 careers.devsisters.com
  60. GAMES ON AWS 2022 © 2022, Amazon Web Services, Inc. or its affiliates. Thank you! © 2022, Amazon Web Services, Inc. or its affiliates. 지민규 (Chi Mingyu) 데브시스터즈 mingyu.chi@devsisters.com 용찬호 (Yong Chanho) 데브시스터즈 chanho.yong@devsisters.com
Anúncio