Skip to content

LoadBalancer

Since 1.5.0

Load balancer for distributing requests across service instances with configurable strategies.

Signature

typescript
type LoadBalancer = {
  select: (instances: ServiceInstance[]) => ServiceInstance | undefined
  getStrategy: () => LoadBalancerStrategy
  setStrategy: (strategy: LoadBalancerStrategy) => void
}

Parameters

This type has no generic parameters.

Examples

Basic Usage

typescript
import type { LoadBalancer, ServiceInstance } from 'uni-types'

const instances: ServiceInstance[] = [
  { id: '1', name: 'api', host: '10.0.0.1', port: 3000, version: '1.0', status: 'healthy' },
  { id: '2', name: 'api', host: '10.0.0.2', port: 3000, version: '1.0', status: 'healthy' },
  { id: '3', name: 'api', host: '10.0.0.3', port: 3000, version: '1.0', status: 'unhealthy' }
]

const lb: LoadBalancer = {
  select: (instances) => instances[0],
  getStrategy: () => 'round-robin',
  setStrategy: (strategy) => { /* update strategy */ }
}

const instance = lb.select(instances.filter(i => i.status === 'healthy'))

Weighted Strategy

typescript
import type { LoadBalancer, ServiceInstance } from 'uni-types'

const lb: LoadBalancer = {
  select: (instances) => instances[0],
  getStrategy: () => 'weighted',
  setStrategy: (strategy) => { /* update */ }
}

lb.setStrategy('least-connections')

const weightedInstances: ServiceInstance[] = [
  { id: '1', name: 'api', host: '10.0.0.1', port: 3000, version: '1.0', status: 'healthy', weight: 3, connections: 5 },
  { id: '2', name: 'api', host: '10.0.0.2', port: 3000, version: '1.0', status: 'healthy', weight: 1, connections: 12 }
]

const selected = lb.select(weightedInstances)

Released under the MIT License.