Skip to content

Network Load Balancer and Driver API

ByoungSeob Kim edited this page May 12, 2022 · 34 revisions

CB-Spider Network Load Balancer and Driver API


- CB-Spider Network Load Balancer(NLB) Specification V0.1
- Version 0.1: Driver 개발용


[CB-Spider Network Load Balancer Roadmap]


1. CB-Spider NLB Overview

  • 사용자는 VPC 내의 VM을 향한 외부의 Client 요청 및 입력 스트림에 대한 부하 분산(Load Balancing)을 관리하기 위해서
    • 특정 VPC에 소속되는 Network Load Balancer(이하 NLB)를 생성 및 구성할 수 있다.
  • NLB는 Public 타입과 Internal 타입을 선택하여 생성할 수 있다.
    • Public 타입(default): 외부 인터넷을 통한 사용자의 클라이언트 스트림에 대한 부하 분산
    • Internal 타입: 내부 VM 간의 스트림에 대한 부하 분산
    • V0.1: Public 타입 제공 중심으로 개발 및 우선 활용
  • NLB는 Region 범위와 Global 범위의 운영을 선택하여 생성할 수 있다.
    • Regional NLB(default): 단일 Region에서 운영되는 로드 밸런서
    • Global NLB: 멀티 Region에서 운영되는 로드 밸런서
    • V0.1: Regional NLB 제공 중심으로 개발 및 우선 활용


[CB-Spider Network Load Balancer Overview]


2. CB-Spider NLB Components


[CB-Spider Network Load Balancer Components]

  • NLB는 그림과 같이 프론트엔드(Frontend) 영역과 백엔드(Backend) 영역으로 구분되며, 영역별 주요 구성 요소는 다음과 같다.
    • [NLB-Frontend Tier]

      (1) 프론트엔드 서비스 IP(Frontend Service IP)

      • Client의 입력 스트림을 수신할 사용자를 위한 서비스 IP이며,
      • 하나의 NLB는 하나의 서비스 IP를 포함하며, CSP 또는 대상 Driver에서 자동 생성 및 관리된다.
      • ※ 서비스 IP에 매핑 되는 DNS Name 지원: 추후 고려

      (2) 서비스 리스너(Service Listener)

      • 서비스 리스너는 Client의 요청 및 입력 스트림을 수신하여 백엔드 영역의 서비스 그룹으로 전달한다.
      • 선택 가능한 프로토콜은 TCP 및 UDP이며, 1-65535 범위의 값으로 수신 포트 설정이 가능하다.
      • 하나의 NLB는 복수 개의 서비스 리스너 추가 및 삭제가 가능하며,
      • 동일한 NLB의 리스너는 동일한 서비스 그룹으로 라우팅이 가능하다.
    • [NLB-Backend Tier]

      (3) 서비스 그룹(Service Group)

      • 서비스 그룹은 동일한 서비스를 제공하는 Service VM들의 집합이며, 서비스 VM은 추가 삭제가 가능하다.
      • 선택 가능한 프로토콜은 TCP, UDP, HTTP 및 HTTPS이며,
      • 서비스 그룹은 하나의 전용 서비스 포트를 설정할 수 있다. (포트범위: 1-65535)
      • 서비스 그룹 내의 서비스 VM들은 서비스 그룹 포트와 동일한 포트 번호를 통해서 서비스 제공이 가능하다.
      • 하나의 NLB는 하나의 서비스 그룹만을 포함한다.

      (4) 헬스 체크기(Health Checker)

      • 하나의 서비스 그룹은 하나의 헬스 체크기를 포함한다.
      • 선택 가능한 프로토콜은 TCP, HTTP 및 HTTPS이며,
      • VM의 건강 상태를 체크하기 위해서 서비스 VM의 서비스 포트를 활용하거나
      • 별도의 헬스 체크 전용 포트를 활용하도록 설정할 수 있다.
      • 각 서비스 VM의 서비스 포트 및 헬스 체크용 포트는 사용자에 의해 사전에 준비되어야 한다.
      • 헬스 체크기는 상태 체크 주기 및 타임 아웃 등을 설정할 수 있으며,
      • 서비스 VM들의 헬스 상태 정보를 제공한다.

      (5) 서비스 그룹 오토 스케일링(Service Group Auto-Scaling)

      • 오토 스케일링 정의 및 지원 여부 등 추후 고려

3. CB-Spider NLB Operation Flow


[CB-Spider Network Load Balancer Operation Flow]

  • NLB 주요 동작 흐름은 다음과 같다.
    • ① Client -> Frontend
      • Client는 TCP 또는 UDP 프로토콜 기반으로 Frontend 서비스 IP 및 서비스 리스너 포트를 통해서 서비스를 요청한다.
    • ② Frontend -> Backend
      • 서비스 리스너에 의해 수신된 사용자 요청은 TCP, UDP, HTTP 또는 HTTPS 기반으로 서비스 그룹 포트로 라우팅 된다.
    • ③ 서비스 VM 선정 (대상 CSP에서 수행)
      • 서비스 그룹에 포함된 서비스 VM들 중 Healthy 상태의 VM으로 Client 요청 및 입력 스트림을 라우팅 한다.
    • ※ Health Checking
      • 헬스 체크기는 주기적으로 서비스 그룹에 포함된 VM 서비스의 Health 상태를 파악하고 제공한다.

3. NLB Driver Common API

  • Source Tree

    $tree cb-spider/cloud-control-manager/cloud-driver/interfaces/
    cb-spider/cloud-control-manager/cloud-driver/interfaces/
    |-- CloudDriver.go
    |-- README.md
    |-- connect
    |   `-- CloudConnect.go
    `-- resources
        |-- IId.go
        |-- ImageHandler.go
        |-- KeyPairHandler.go
        |-- KeyValue.go
        |-- NLBHandler.go  <======================= Network Load Balancer Driver API
        |-- SecurityHandler.go
        |-- VMHandler.go
        |-- VMSpecHandler.go
        `-- VPCHandler.go
    
  • Driver API Spec (latest)

    package resources
    
    type NLBReqInfo struct {
            IId             IID // {NameId, SystemId}
            VpcIID          IID    // {NameId, SystemId}
    
            //------ Frontend
            Listeners       *[]ListenerInfo
    
            //------ Backend
            ServiceGroup    ServiceGroupInfo
            ServiceVMs      *[]IID
            HealthChecker   HealthCheckerInfo
    }
    
    type ListenerInfo struct {
            Protocol        string // TCP|UDP
            Port            string // 1-65535
    
            CspID           string // Optional, May be Used by Driver.
            KeyValueList []KeyValue
    }
    
    type ServiceGroupInfo struct {
            Protocol        string // TCP|UDP|HTTP|HTTPS
            Port            string // 1-65535
    
            CspID           string // Optional, May be Used by Driver.
            KeyValueList []KeyValue
    }
    
    type HealthCheckerInfo struct {
            Protocol        string  // TCP|HTTP|HTTPS
            Port            string  // Service Port or 1-65535
            Interval        int     // secs, Interval time between health checks.
            Timeout         int     // secs, Waiting time to decide an unhealthy VM when no response.
            Threshold       int     // num, The number of continuous health checks to change the VM status.
    
            KeyValueList    []KeyValue
    }
    
    type HealthyInfo struct {
            AllServiceVMs   *[]IID
            HealthyVMs      *[]IID
            UnHealthyVMs    *[]IID
    }
    
    type NLBInfo struct {
            IId             IID     // {NameId, SystemId}
            VpcIID          IID     // {NameId, SystemId}
    
            //------ Frontend
            FrontendIP      string  // Auto Generated and attached
            FrontendDNSName string  // Optional, Auto Generated and attached
            Listeners       *[]ListenerInfo
    
            //------ Backend
            ServiceGroup    ServiceGroupInfo
            ServiceVMs      *[]IID
            HealthChecker   HealthCheckerInfo
    
            KeyValueList    []KeyValue
    }
    
    
    type NLBHandler interface {
    
            //------ NLB Management
            CreateNLB(nlbReqInfo NLBReqInfo) (NLBInfo, error)
            ListNLB() ([]*NLBInfo, error)
            GetNLB(nlbIID IID) (NLBInfo, error)
            DeleteNLB(nlbIID IID) (bool, error)
    
            //------ Frontend Control
            AddListeners(nlbIID IID, listeners *[]ListenerInfo) (NLBInfo, error)
            RemoveListeners(nlbIID IID, listeners *[]ListenerInfo) (bool, error)
    
            //------ Backend Control
            ChangeServiceGroupInfo(nlbIID IID, serviceGroup ServiceGroupInfo) (error)
            AddServiceVMs(nlbIID IID, vmIIDs *[]IID) (NLBInfo, error)
            RemoveServiceVMs(nlbIID IID, vmIIDs *[]IID) (bool, error)
            GetServiceVMStatus(nlbIID IID) (HealthyInfo, error)
            ChangeHealthCheckerInfo(nlbIID IID, healthChecker HealthCheckerInfo) (error)
    }

Table of contents



Clone this wiki locally