router.py 2.91 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
from typing import List, Optional

from sglang_router_rs import PolicyType
from sglang_router_rs import Router as _Router


class Router:
    """
    A high-performance router for distributing requests across worker nodes.

    Args:
12
13
        worker_urls: List of URLs for worker nodes that will handle requests. Each URL should include
            the protocol, host, and port (e.g., ['http://worker1:8000', 'http://worker2:8000'])
14
15
16
        policy: Load balancing policy to use. Options:
            - PolicyType.Random: Randomly select workers
            - PolicyType.RoundRobin: Distribute requests in round-robin fashion
17
            - PolicyType.CacheAware: Distribute requests based on cache state and load balance
18
19
20
21
22
        host: Host address to bind the router server. Default: '127.0.0.1'
        port: Port number to bind the router server. Default: 3001
        cache_threshold: Cache threshold (0.0-1.0) for cache-aware routing. Routes to cached worker
            if the match rate exceeds threshold, otherwise routes to the worker with the smallest
            tree. Default: 0.5
23
24
25
26
        balance_abs_threshold: Load balancing is triggered when (max_load - min_load) > abs_threshold
            AND max_load > min_load * rel_threshold. Otherwise, use cache aware. Default: 32
        balance_rel_threshold: Load balancing is triggered when (max_load - min_load) > abs_threshold
            AND max_load > min_load * rel_threshold. Otherwise, use cache aware. Default: 1.0001
27
28
        eviction_interval_secs: Interval in seconds between cache eviction operations in cache-aware
            routing. Default: 60
29
        max_payload_size: Maximum payload size in bytes. Default: 4MB
30
        max_tree_size: Maximum size of the approximation tree for cache-aware routing. Default: 2^24
31
        verbose: Enable verbose logging. Default: False
32
33
34
35
36
37
38
39
40
    """

    def __init__(
        self,
        worker_urls: List[str],
        policy: PolicyType = PolicyType.RoundRobin,
        host: str = "127.0.0.1",
        port: int = 3001,
        cache_threshold: float = 0.50,
41
42
        balance_abs_threshold: int = 32,
        balance_rel_threshold: float = 1.0001,
43
44
        eviction_interval_secs: int = 60,
        max_tree_size: int = 2**24,
45
        max_payload_size: int = 4 * 1024 * 1024,  # 4MB
46
        verbose: bool = False,
47
48
49
50
51
52
53
    ):
        self._router = _Router(
            worker_urls=worker_urls,
            policy=policy,
            host=host,
            port=port,
            cache_threshold=cache_threshold,
54
55
            balance_abs_threshold=balance_abs_threshold,
            balance_rel_threshold=balance_rel_threshold,
56
57
            eviction_interval_secs=eviction_interval_secs,
            max_tree_size=max_tree_size,
58
            max_payload_size=max_payload_size,
59
            verbose=verbose,
60
61
62
63
64
65
66
67
        )

    def start(self) -> None:
        """Start the router server.

        This method blocks until the server is shut down.
        """
        self._router.start()