A fault was handled by spawning a goroutine per message, so a burst of faults spawned without limit. Handling them inline instead would put the burst on the receive goroutine, which carries every other default priority message on that underlay. - adds a pool for work lifted off a control channel's receive goroutine, kept separate from the rate limiter pool, whose workers park waiting for controller send capacity; sharing it would make receiving depend on the very back-pressure that lifting work off the receive goroutine exists to survive - hands fault handling to that pool, and falls back to spawning when the pool is full rather than dropping, since a dropped fault leaves a dead link marked up with no repair loop behind it - counts the fallbacks, so the pool being too small is visible rather than silent - sizes the queue generously and the worker count modestly: the work arrives in bursts, one per controller reconnect, but is per control channel and there are only ever a handful of those
Ziti Router Components
This document describes the key components of the Ziti router architecture.
Core Components
NetworkControllers
Manages connections to Ziti controllers. Handles controller discovery, connection establishment, failover, and maintains heartbeats. Routes control plane messages between the router and controllers.
Link Registry
Maintains the registry of active links to other routers in the mesh. Tracks link states, manages link lifecycle, and provides link lookup capabilities for routing decisions.
Forwarder
The packet forwarding engine that routes data between xgress instances. Delivers payloads to links, xgress instances or edge forwarders.
Faulter
Monitors link health and detects failures. Automatically reports link faults to controllers and triggers link recovery processes when connectivity issues are detected.
Scanner
Continuously scans the forwarder's state to detect and clean up stale forwarding entries. Removes inactive circuits and performs periodic maintenance of the forwarding tables.
Data Plane Components
Xgress Components
Handle ingress and egress traffic for the router:
- Xgress Listeners: Accept incoming connections from clients and services
- Xgress Dialers: Establish outbound connections to services
- Xgress Factories: Create protocol-specific xgress instances (edge, transport, proxy, tunnel)
- Xgress Registry: Global registry managing all xgress factory types
Xgress Types
edge: Handles Ziti SDK connectionstransport: Router-to-router communicationproxy: TCP/UDP proxy connectionstunnel: Intercepted traffic from tunneling clients
Metrics
Comprehensive metrics collection covering:
- Link latency and throughput
- Xgress connection statistics
- Pool utilization (link dialer, egress dialer, rate limiter)
All metrics are reported to controllers and available via health check APIs.