System Architecture Design
트래픽에 따른 예상 비용

트래픽에 따른 예상 비용

Azure에 리소스 사용별 가용에 따른 비용예상 현재 상태에서 정확한금액을 예측하기는 어렵습니다. 다만 여러가지 대시보드 & 통계데이타를 통해서 금액적으로 줄일수 있는 부분을 계속해서 체크해야합니다. 다양한 모니터링 데이타를 통해서 수집 가능합니다.

AKS

고정영역

  • Kubernetes 서비스 사용비용 : 92,000원

트래픽에 따른 가용영역

AKS Node(VM Computer)

평균 사용자에 따른 기준으로 사양을 선택해야함. - 평균적으로 발생하는 데이타를 기준으로 모니터링하여 각 서비스(리소스)와 노드(기본개수)를 안정적으로 구성함

비용 : 현재 사양기준 월(100만원) -> Standard_D3_v2 변경 필요에 따른 기존대비 2배 비용발생 현재 사양: Standard_DS2_v2(기본) * 7대 - 2CPU/7GiB메모리/IOPS 디스크 처리량 8*500G(RAID구성)/1500Mbps(대역폭) 가용 비용 : Standard_D3_v2 * 2 -> 월200만원예상

로드 테스트 : 동접 100명기준으로 Webtoon 서비스 테스트 진행

  • 비용절감 서비스 API 로드 테스트를 통해서 확장되는 Pod을 모니터링하여 적절한 사양 리소스를 처리하며 그에 따른 확장하여 Node 생성을 줄인다.

  • 참고 Terraform을 Nodepool 내용 참고 아래와같이 구성되어 있으며, 최대 Max는 5대로 구성되어 있습니다. 성격에 따라서 vm_size를 수정하여 적절한 사양으로 교체해줘야 IP이슈나 기타 대역폭에 따른 처리를 할수 있습니다.

node_pools = {
    user = {
      name                  = "user"
      mode                  = "User"
      kubernetes_cluster_id = module.aks.aks_id
      vm_size               = "Standard_DS2_v2"
      enable_auto_scaling   = true
      node_count            = 2
      min_count             = 2
      max_count             = 5
      vnet_subnet_id        = local.vnet_private_subnet_2_id
      # Add temporary_name_for_rotation for properties that require it
      temporary_name_for_rotation = "user"
    }
    ingress = {
      name                  = "ingress"
      mode                  = "System"
      kubernetes_cluster_id = module.aks.aks_id
      vm_size               = "Standard_DS2_v2"
      enable_auto_scaling   = true
      node_count            = 1
      min_count             = 1
      max_count             = 5
      vnet_subnet_id        = local.vnet_private_subnet_3_id
      # Add temporary_name_for_rotation for properties that require it
      temporary_name_for_rotation = "ingress"
    }
 
    worker = {
      name                  = "worker"
      mode                  = "User"
      kubernetes_cluster_id = module.aks.aks_id
      vm_size               = "Standard_DS2_v2" // "Standard_D3_v2"
      enable_auto_scaling   = true
      node_count            = 2
      min_count             = 2
      max_count             = 5
      vnet_subnet_id        = local.vnet_private_subnet_3_id
      # Add temporary_name_for_rotation for properties that require it
      temporary_name_for_rotation = "worker"
    }
  }

Azure Database for PostgreSQL

비용 : 219,000원 가용 비용 : 쿼리요청에 따른 트래픽에 맞춰 수정됨. 사용자 데이타가 많아짐에 따라서 프로세스하는 비용이 발생됨. 속도향상을 위해서는 옵션을 통해서 비용 추가 발생함. 그에 따른 캐시를 활용하여 비용 축소

최대 : 219,000원 * 3 (D8ds 8vCore / 32GiB)

현재 사양 : GP_Standard_D2s_v3 / 2vCore / 8GiB사용중

Storage

AKS Node Diks비용

비용 : 150,000원 가용 비용 : 150,000원 * 3 => 내부 서비스 사용하는 AKS Node DISK의 용량증가에 따른 비용추가

EventHub

각각의 마이크로서비스간의 데이타 통신과 로그 수집을 활용하는데 사용하고 있습니다. Capture는 이벤트 데이타를 DB + Topic에 저장하는 용도로 사용하고 있습니다. 기본 Throughput Unit에 따라서 속도 응답속도 개선이 있어서 사용자에 따라서 유닛은 늘릴계획입니다.

비용 : (Capture 고정비용)92,000원 + Throughput Unit(1) * 27,900원 가용 비용 : 사용자가 많은경우: Throughput Unit(10) * 270,900원

Stream Analyzer

EventHub을 통해서 전달받은 데이타를 실시간 DB 압축 Avro & Topic Service Bus에 전달하여 서버에서 순차적으로 가져오는 작업 -> Elasticsearch 추후 이벤트 데이타를 통해서 사용자 행동 분석용으로 사용함.

비용 : 126,000원 가용 비용 : 126,000원 * 3 스케일에 따른 비용발생 현재는 스트리밍 단위는1개로 설정되어있습니다. 내부 모니터링을 통해서 확대 1 -> 3으로 설정

참고

https://learn.microsoft.com/ko-kr/azure/virtual-machines/dv2-dsv2-series (opens in a new tab)