VSM Packages¶
The Viable Systems ecosystem consists of several interconnected Elixir packages that implement cybernetic principles:
Core Packages¶
vsm-starter¶
A starter template for building VSM applications: - Template for S1-S5 subsystem structure - Example channel implementations (Command, Resource, Audit, Algedonic) - Standard telemetry event patterns - Foundation for building VSM applications in Elixir
vsm-telemetry¶
Advanced telemetry and monitoring for VSM systems: - Real-time metrics collection from all subsystems - Variety calculations and tracking - Phoenix LiveView dashboards - Prometheus metrics export - WebSocket streaming of system state
vsm-goldrush¶
High-performance cybernetic pattern detection: - Real-time detection of VSM failures (variety explosion, channel saturation) - Native BEAM performance via goldrush compilation - Temporal pattern detection (sequences, frequencies, correlations) - GenStage integration for event streaming - Pre-built cybernetic failure patterns
vsm-rate-limiter¶
VSM-aware rate limiting with variety attenuation: - Implements Ashby's Law of Requisite Variety - Subsystem-specific rate limits (S1-S5) - Pluggable adapters (token bucket, ExRated, Hammer) - Algedonic signaling for threshold breaches - Dynamic variety attenuation based on system load
Integration Architecture¶
graph TD
A[vsm-starter] -->|Telemetry Events| B[vsm-telemetry]
A -->|Telemetry Events| C[vsm-goldrush]
A -->|Rate Limit Checks| F[vsm-rate-limiter]
B -->|Metrics| C
C -->|Pattern Matches| B
C -->|Algedonic Signals| A
F -->|Telemetry Events| B
F -->|Algedonic Alerts| A
B -->|Dashboard| D[Phoenix LiveView]
B -->|Metrics| E[Prometheus]
How They Work Together¶
-
VSM Applications (built using vsm-starter template) emit standard telemetry events for all subsystem activities
-
vsm-telemetry collects and aggregates these events into metrics, providing dashboards and monitoring
-
vsm-goldrush consumes telemetry events in real-time to detect cybernetic failures and patterns
Example Integration Flow¶
# 1. Your VSM app (built with vsm-starter) emits an event
:telemetry.execute(
[:vsm, :system1, :operation, :error],
%{count: 1, latency: 5000},
%{error: :timeout}
)
# 2. vsm-telemetry collects it
# Updates metrics, dashboards, and forwards to collectors
# 3. vsm-goldrush detects patterns
# Checks if this is part of a cascade failure or variety explosion
# If pattern matches, triggers algedonic signal back to your VSM app
Package Relationships¶
Package | Type | Purpose | Integration |
---|---|---|---|
vsm-starter | Template | Foundation for building VSM apps | Provides patterns & structure |
vsm-telemetry | Service | Monitoring & visualization | Consumes telemetry events |
vsm-goldrush | Library | Real-time failure detection | Analyzes events for patterns |
vsm-rate-limiter | Library | Variety attenuation & rate limiting | Protects subsystems from overload |
Getting Started¶
To build a complete VSM system with monitoring and pattern detection:
- Create your VSM app using vsm-starter as a template
- Add dependencies for monitoring and analysis:
# mix.exs in your VSM application
def deps do
[
# Core dependencies from vsm-starter template
{:telemetry, "~> 1.2"},
{:telemetry_metrics, "~> 1.0"},
# Add VSM ecosystem packages
{:vsm_telemetry, "~> 0.1.0"}, # For monitoring
{:vsm_goldrush, "~> 0.1.0"}, # For pattern detection
{:vsm_rate_limiter, "~> 0.1.0"} # For variety attenuation
]
end
See individual package documentation for detailed integration examples.