SBM blog CTA mobile 1

옴니채널 비즈니스 메시징으로 당신의 비즈니스를 성장 시키고 비용을 줄이세요

On This Page

Sendbird Desk: K8s 구성 최적화를 통한 비용 절감 사례

Blog cover Sendbird Desk K8s
Aug 18, 2023
Mark yeon
Mark Yeon
Software Engineer
SBM blog CTA mobile 1

옴니채널 비즈니스 메시징으로 당신의 비즈니스를 성장 시키고 비용을 줄이세요

On This Page
SBM blog CTA mobile 1

옴니채널 비즈니스 메시징으로 당신의 비즈니스를 성장 시키고 비용을 줄이세요

이번 글에서는 Sendbird의 Desk 서비스를 최적화하여 비용 절감을 이끌어냈던 사례를 공유하려 합니다.

Desk 서비스는 Sendbird Chat을 기반으로 한 고객 지원 및 문의 처리를 위한 플랫폼으로 많은 사용자들이 동시에 접속하고 데이터를 주고받는 서비스입니다. 이러한 특성 때문에 서버 부하가 매우 크게 발생할 수 있습니다. 이에 효과적으로 대응하기 위해 Sendbird는 Desk 서비스를 운영하면서 Kubernetes(K8s)를 사용하여 인프라를 관리하고 있습니다. 특히 최근 비용 절감에 집중하면서 기존에 사용하던 K8s 구성을 최적화하여 비용을 절감하는 방법을 찾기 시작했습니다.

K8s는 오픈소스 플랫폼으로, 클라우드 인프라에서 널리 사용되며, 컨테이너화된 애플리케이션을 배포하고 관리하는 데 사용됩니다. 그러나 적절한 요소를 고려하지 않으면 불필요한 비용이 발생할 수 있습니다. 이를 방지하기 위해서는 노드 크기, 자원 요청 및 제한, 네트워크 구성 등을 고려해야 합니다.

K8s에서 가장 큰 비용 요소는 노드입니다. 노드는 클러스터 내에서 컨테이너를 실행하는 서버를 말하며, AWS와 같은 클라우드 서비스에서 노드의 가격은 CPU, 메모리, 스토리지의 크기, 아키텍처, 세대 등에 따라 결정됩니다. 따라서 Sendbird는 비용 요소 중 Node를 최우선으로 고려하여 비용 절감을 시도했습니다.

기존 문제점 및 개선 과정

(1) 아키텍처 교체

저희는 먼저 기존 Intel을 사용하던 Node를 AWS Graviton으로 변경했습니다. AWS에서는 Graviton이 성능 측면에서 우월하면서도 시간당 비용이 intel보다 낮기 때문입니다. 이를 위해, 저희는 클러스터에서 사용하는 모든 컨테이너 이미지가 두 아키텍처를 모두 지원하는지 확인한 후, ARM, x86 두 가지 아키텍처를 병렬적으로 빌드하도록 Desk application의 CI 파이프라인을 개선했습니다.

(2) HPA 동작 리뷰

Pod flowchart

HPA(Horizontal Pod Autoscaler)는 K8s에서 자동으로 Pod 개수를 조정하는 기능입니다. 이 기능을 사용하면 설정한 기준에 따라 자동으로 pod 수를 조정하고, 결과적으로 노드 개수도 조정할 수 있습니다. 이를 통해 비용을 절감하면서도 애플리케이션 성능을 유지할 수 있습니다.

그러나 Sendbird의 EKS 중 일부에서는 트래픽 패턴과 무관하게 pod 개수가 항상 최대치로 유지되는 현상이 발견되었습니다. 트래픽에 따라 pod 개수를 조절하고, 노드 개수도 조절되어 의도대로 비용이 절감되어야 했음에도 불구하고 항상 최대 크기의 노드로 유지되고 있었습니다.

CPU와 메모리 메트릭을 동시에 사용하여 스케일링 기준을 설정한 것이 문제였습니다. 보통 메모리 메트릭은 pod 스케일링의 기준으로 사용하지 않는 것이 권장 사항입니다. HPA가 제대로 작동하기 위해서는 pod 개수를 늘리면 계산값이 줄어들고, 줄이면 계산값이 늘어나는 선형적인 관계가 있어야 합니다. 그러나 일부 메모리 위주 애플리케이션을 제외하면 pod를 늘려도 pod들의 메모리 사용량이 줄어들지 않습니다. Desk 애플리케이션도 이러한 선형적인 관계가 성립하지 않아서, 메모리 수치가 기준치를 상회해도 pod를 계속해서 늘려나갔습니다. 따라서 메모리 메트릭을 제외하고 CPU 메트릭만 사용하여 스케일링 기준을 설정하였고, 결과적으로 pod 개수는 20개에서 8개로 60% 감소하여 트래픽 추이에 맞게 증감하게 되었습니다.

(3) pod의 리소스 request 정교화 / HPA min replica 현실화

K8s에서 가장 큰 비용 요소는 노드의 개수와 크기이며, 이 중 노드 개수에 큰 영향을 미치는 요소는 pod의 리소스 request입니다. 이는 K8s 스케줄러가 pod 배치를 결정할 때 리소스 request를 고려하기 때문입니다. 하지만 desk에서는 사용량 대비 request가 production 환경에서 안정적으로 트래픽을 처리하기 위해 높게 설정되어 있어 비용 부담이 컸습니다. HPA를 통해 replica 개수가 조정되지만, min replica 수치가 여유롭게 설정됐기 때문에 이 역시 비용을 크게 증가시켰습니다. 따라서 request와 min replica 수치를 낮추는 작업이 진행되었습니다.

추후 개선 계획

(1) Spot Instance 도입

향후에는 Desk 서비스에 Spot 인스턴스를 도입하는 것을 계획하고 있습니다. Spot 인스턴스는 AWS에서 남는 컴퓨팅 자원을 저렴한 비용으로 제공하는 서비스로, 온디맨드 요금에 비해 최대 90%까지 절감할 수 있는 이점이 있습니다. 이를 효과적으로 활용하면 비용 효율성을 크게 높일 수 있습니다. 현재 Sendbird에서는 다른 제품군에서 Spot 인스턴스를 성공적으로 사용하고 있어 Desk 서비스에도 적용을 검토하고 있습니다. 앞서 언급한 컨테이너 이미지의 멀티 아키텍처 빌드는 여러 인스턴스 타입을 가능하게 함으로써 Spot 인스턴스 도입의 기반을 마련할 것으로 기대합니다.

(2) Karpenter

Karpenter 는 클러스터의 노드 자동 확장을 관리하는 오픈소스 프로젝트입니다. 더 성숙한 노드 자동 확장 솔루션인 Cluster Autoscaler 프로젝트가 있지만, 이는 EKS의 노드 그룹을 제어하는 구조 상 일부 제한적인 요소가 있습니다. 반면 Karpenter는 노드 그룹을 거치지 않고 EC2를 직접 제어함으로써 프로비저닝 속도를 높이고, 노드 유형을 유연하게 선택할 수 있으며 이를 통해 비용 효율성을 향상시킬 수 있습니다. 이러한 이점들로 인해 Sendbird는 Karpenter 도입을 검토하고 있습니다.

마치며

비용 최적화는 K8s를 사용하는 조직에서 중요한 이슈 중 하나입니다. 이를 위해, 클러스터의 리소스 사용량을 분석하고, 비용을 낮출 수 있는 다양한 방법이 있습니다. Spot 인스턴스를 사용하여 비용을 절감하고, 수평 및 수직 스케일링을 조합하여 성능과 가격 모두를 챙길 수 있으며, HPA와 Karpenter를 사용하여 리소스 사용을 자동으로 조정하고, KubeCost 및 KubeCapacity와 같은 도구들을 사용하여 리소스 사용량을 분석할 수 있습니다.

Sendbird는 Desk 서비스의 비용 절감을 위해 다양한 최적화 전략을 시도하였습니다. 아키텍처 교체, HPA 동작 리뷰 및 개선, 그리고 리소스 request 및 HPA min replica 최적화를 통해 노드 비용을 약 50% 절감하는 데 성공하였습니다. 또한 향후 Spot 인스턴스와 Karpenter를 적용함으로써 비용 효율성을 더욱 높일 계획입니다. 이런 지속적인 노력을 통해 Desk 서비스를 계속해서 개선하고 비용을 최적화할 수 있을 것으로 예상하고 있습니다.

Ebook Grow Mobile content offer background

비즈니스 성과로 이어지는 디지털 커뮤니케이션

센드버드와 함께, 지금 바로 시작해보세요