Expand description
§Polaris
Rust-native distributed compute and orchestration framework for scaling concurrent workloads across threads, processes, or machines.
§Quick Start
use polaris::prelude::*;
#[polaris::task]
async fn compute_square(x: i32) -> PolarisResult<i32> {
Ok(x * x)
}
#[tokio::main]
async fn main() -> PolarisResult<()> {
// Create a local cluster for development
let cluster = Cluster::builder()
.with_local_node()
.build()
.await?;
// Submit a task
let task = Task::new("compute", bytes::Bytes::from("5"));
let handle = cluster.submit(task).await?;
// Wait for result
let result = handle.result().await?;
println!("Result: {:?}", result);
Ok(())
}§Features
- Distributed Task Execution: Schedule and execute tasks across a cluster
- Intelligent Scheduling: Pluggable schedulers (RoundRobin, LoadAware, custom)
- Fault Tolerance: Automatic retries with exponential backoff
- Security: mTLS by default, optional JWT authentication
- Observability: Built-in tracing and Prometheus metrics
- Flexible Storage: In-memory, RocksDB, or Sled backends
- DAG Support: Define complex task dependencies
§Architecture
Polaris follows a modular architecture:
- Cluster: Top-level orchestration API
- Scheduler: Pluggable task scheduling strategies
- Node: Worker nodes that execute tasks
- Transport: Network layer (QUIC, TLS, gRPC)
- Storage: Persistent state backends
§Examples
§Connect to a Cluster
use polaris::prelude::*;
let cluster = Cluster::connect(["10.0.0.1:7001", "10.0.0.2:7001"]).await?;§Submit Tasks with Retry
use polaris::prelude::*;
use std::time::Duration;
let task = Task::new("my_task", bytes::Bytes::from("input"))
.with_priority(TaskPriority::High)
.with_timeout(Duration::from_secs(60))
.with_max_retries(5);
let handle = cluster.submit(task).await?;§Custom Scheduler
use polaris::prelude::*;
let cluster = Cluster::builder()
.with_scheduler(LoadAwareScheduler::new())
.with_local_node()
.build()
.await?;Modules§
- prelude
- Convenient prelude for common imports Prelude module with commonly used types and traits.
Structs§
- Cluster
- Main cluster handle
- Cluster
Builder - Builder for creating a cluster
- Cluster
Config - Cluster configuration
- Cluster
Stats - Cluster statistics
- DagExecutor
- DAG executor for managing task dependencies
- InMemory
Storage - In-memory storage backend (default)
- Load
Aware Scheduler - Load-aware scheduler
- Metrics
Collector - Metrics collector for cluster operations
- Network
Config - Network configuration
- Node
- A node in the cluster
- Node
Config - Node configuration
- NodeId
- Unique identifier for a node
- Node
Info - Node information
- Node
Registry - Registry for managing cluster nodes
- Resource
Limits - Resource limits for a node
- Resource
Usage - Current resource usage for a node
- Round
Robin Scheduler - Round-robin scheduler
- Scheduler
Config - Scheduler configuration
- Security
Config - Security configuration
- Storage
Config - Storage configuration
- Task
- A task to be executed in the cluster
- Task
Handle - Handle to a submitted task
- TaskId
- Unique identifier for a task
- Task
Metadata - Task metadata
- Task
Result - Task execution result
Enums§
- Node
Status - Node status
- Polaris
Error - The main error type for Polaris operations.
- Task
Priority - Task priority level
- Task
Status - Task execution status
Traits§
Functions§
- default_
serializer - Get default serializer based on enabled features
- init_
tracing - Initialize tracing subscriber
Type Aliases§
- Polaris
Result - Result type alias for Polaris operations.
Attribute Macros§
- task
- Attribute macro for defining Polaris tasks.