-
Notifications
You must be signed in to change notification settings - Fork 48
Network Load Balancer and Driver API
ByoungSeob Kim edited this page May 19, 2022
·
32 revisions
- CB-Spider Network Load Balancer(NLB) Specification V0.2
- V0.2 : Driver 검토/개발 용
[CB-Spider Network Load Balancer Roadmap]
- 사용자는 VPC 내의 VM을 향한 외부의 Client 요청 및 입력 스트림에 대한 부하 분산(Load Balancing)을 관리하기 위해서
- 그림과 같이 특정 VPC에 소속되는 Network Load Balancer(이하 NLB)를 생성 및 구성할 수 있다.
- NLB는 Public 타입과 Internal 타입을 선택하여 생성할 수 있다.
- Public 타입(default): 외부 인터넷을 통한 사용자의 클라이언트 스트림에 대한 부하 분산
- Internal 타입: 내부 VM 간의 스트림에 대한 부하 분산
- Public 타입 제공 중심으로 선개발 및 우선 활용
- NLB는 Region 범위와 Global 범위의 운영을 선택하여 생성할 수 있다.
- Regional NLB(default): 단일 Region에서 운영되는 로드 밸런서
- Global NLB: 멀티 Region에서 운영되는 로드 밸런서
- Regional NLB 제공 중심으로 선개발 및 우선 활용
[CB-Spider Network Load Balancer Overview]
[CB-Spider Network Load Balancer Components]
- NLB는 그림과 같이 프론트엔드(Frontend) 영역과 백엔드(Backend) 영역으로 구분되며, 영역별 주요 구성 요소는 다음과 같다.
-
- 리스너는 Client의 요청 및 입력 스트림을 수신하여 백엔드 영역의 VM그룹으로 전달한다.
- 하나의 NLB는 하나의 리스너를 포함하며, 수신 프로토콜, IP 및 수신 포트로 구성된다.
- 선택 가능한 수신 프로토콜은 TCP 및 UDP이며, IP는 CSP 또는 대상 Driver에서 자동 생성 및 관리된다.
- 수신 포트는 1-65535 범위의 값으로 설정이 가능하다.
- ※ 리스너 IP에 매핑 되는 DNS-Name 지원: 추후 고려
-
- VM 그룹은 동일한 서비스(nginx, redis, 사용자 개발 서비스 등)를 제공하는 VM들의 집합이며, VM은 추가 삭제가 가능하다.
- 하나의 NLB는 하나의 VM 그룹을 포함하며, VM 그룹은 수신 프로토콜, 수신 포트 및 VM들로 구성된다.
- 선택 가능한 수신 프로토콜은 TCP, UDP, HTTP 및 HTTPS이며,
- VM 그룹은 하나의 수신 포트를 설정할 수 있다. (포트범위: 1-65535)
- VM 그룹 내의 VM들은 VM 그룹 포트와 동일한 포트 번호를 통해서 서비스 제공이 가능하다.
- 하나의 NLB는 하나의 헬스 체크기를 포함한다.
- 선택 가능한 체크 프로토콜은 TCP, HTTP 및 HTTPS이며,
- VM 그룹에 소속된 VM들의 헬스 상태를 체크하기 위해서 VM 그룹과 동일한 포트를 활용하거나
- 별도의 헬스 체크 전용 포트를 설정할 수 있다.
- 각 VM의 서비스 포트 및 헬스 체크용 포트는 사용자에 의해 사전에 준비되어야 한다.
- 헬스 체크기는 상태 체크 주기 및 타임 아웃 등을 설정할 수 있으며,
- VM 그룹에 소속된 VM들의 헬스 상태 정보를 제공한다.
- 오토 스케일링 정의 및 지원 여부 등 추후 고려
-
[CB-Spider Network Load Balancer Operation Flow]
- NLB 주요 동작 흐름은 다음과 같다.
- ① Client -> Frontend 서비스 요청
- Client는 TCP 또는 UDP 프로토콜 기반으로 Frontend 리스너 IP 및 리스너 포트를 통해서 서비스를 요청한다.
- ② Frontend -> Backend 서비스 라우팅
- 리스너에 의해 수신된 사용자 요청은 TCP, UDP, HTTP 또는 HTTPS 기반으로 VM 그룹 포트로 라우팅 된다.
- ③ 라우팅 대상 VM 선정 (대상 CSP에서 수행)
- VM 그룹에 포함된 VM들 중 Healthy 상태의 VM에게 Client 요청 및 입력 스트림을 라우팅 한다.
- ※ Health Checking
- 헬스 체크기는 주기적으로 VM 그룹에 포함된 VM의 Health 상태를 파악하고 제공한다.
- ① Client -> Frontend 서비스 요청
-
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 import "time" //-------- Info Structure type NLBInfo struct { IId IID // {NameId, SystemId} VpcIID IID // {NameId, SystemId} Type string // PUBLIC(V) | INTERNAL Scope string // REGION(V) | GLOBAL //------ Frontend Listener ListenerInfo //------ Backend VMGroup VMGroupInfo HealthChecker HealthCheckerInfo CreatedTime time.Time KeyValueList []KeyValue } type ListenerInfo struct { Protocol string // TCP|UDP IP string // Auto Generated and attached Port string // 1-65535 DNSName string // Optional, Auto Generated and attached CspID string // Optional, May be Used by Driver. KeyValueList []KeyValue } type VMGroupInfo struct { Protocol string // TCP|UDP|HTTP|HTTPS Port string // 1-65535 VMs *[]IID CspID string // Optional, May be Used by Driver. KeyValueList []KeyValue } type HealthCheckerInfo struct { Protocol string // TCP|HTTP|HTTPS Port string // Listener 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 HealthInfo struct { AllVMs *[]IID HealthyVMs *[]IID UnHealthyVMs *[]IID } //-------- API type NLBHandler interface { //------ NLB Management CreateNLB(nlbReqInfo NLBInfo) (NLBInfo, error) ListNLB() ([]*NLBInfo, error) GetNLB(nlbIID IID) (NLBInfo, error) DeleteNLB(nlbIID IID) (bool, error) //------ Frontend Control ChangeListener(nlbIID IID, listener ListenerInfo) (NLBInfo, error) //------ Backend Control ChangeVMGroupInfo(nlbIID IID, vmGroup VMGroupInfo) (error) AddVMs(nlbIID IID, vmIIDs *[]IID) (NLBInfo, error) RemoveVMs(nlbIID IID, vmIIDs *[]IID) (bool, error) GetVMGroupHealthInfo(nlbIID IID) (HealthInfo, error) ChangeHealthCheckerInfo(nlbIID IID, healthChecker HealthCheckerInfo) (error) }
- V0.1 => V0.2
- Multi Service Listener => Single Service Listener
- Service Listener => Listener
- Service Group => VM Group
- API: 변경 사항 반영
- API: NLBReqInfo를 NLBInfo에 통합
- API: NLBInfo Type 및 Scope 속성 추가
- API: 단순화
-
Install & Start Guide
-
Features & Usage
-
- AdminWeb Tool Guide
- CLI Tool Guide
- REST API Guide
-
Design
-
Developer Guide
-
Cloud Driver Developer Guide
- Cloud Driver Developer Guide-WIP
- VM SSH Key Development Guide-WIP
- VM User Development Guide
- What is the CSP SDK API Version of drivers
- Region Zone Info and Driver API
- Price Info and Driver API
- (StartVM TerminateVM) API Call Counts and Waiting
- StartVM and TerminateVM Main Flow of drivers
- VM Root Disk Configuration Guide
- Security Group Rules and Driver API
- Network Load Balancer and Driver API
- VM Snapshot, MyImage and Disk Overview
- Kubernetes and Driver API(PMKS, K8S)
- Tag and Cloud Driver API
- AnyCall API Extension Guide
-
Test Reports
- v0.2.8-for-espresso-release
- v0.3.0-espresso-release
- Azure:Terminating VM
- cb-user@VM: ssh login, sudo run
- v0.3.14 test for SG Source
- v0.4.0-cafemocha-release
- Test via REST API Gateway
- Test Reports of v0.4.11 (IID2 initial Version)
- Test Reports of v0.4.12 (Register & Unregister existing Resources)
- Test Reports for v0.6.0 Release
- How to ...
- How to provision GPU VMs
- How to Resolve the 'Failed to Connect to Database' Error
- How to test CB Spider with Mock Driver
- How to install CB Spider on WSL2 under 공유기/사설망
- How to install CB Spider on macOS
- How to run CB Spider Container on macOS
- How to install OpenStack on a VM for CB Spider Testing
- How to get Azure available Regions
- How to profile memory usage in Golang
- Deprecated:How to install protoc and plugins
- [For Cloud-Migrator]