Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions docs/assets/scss/_styles_project.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1868,6 +1868,78 @@ pre:hover .copy-code-button {
}
}

// =============================================================================
// DEPLOYMENT MODES PREVIEW
// Preview section for showing different deployment modes on home page
// =============================================================================

.deployment-modes-preview {
display: flex;
justify-content: center;
gap: 1.5rem;
flex-wrap: wrap;
margin: 2rem 0 1rem 0;
}

.deployment-mode {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
padding: 1rem 1.5rem;
background: $white;
border-radius: $border-radius-md;
border: 1px solid rgba($gray-300, 0.5);
min-width: 140px;
transition: all $transition-base;

i {
font-size: 1.75rem;
color: $primary;
transition: transform $transition-base;
}

strong {
font-size: 0.9rem;
font-weight: 600;
color: $gray-800;
}

&:hover {
transform: translateY(-3px);
box-shadow: $shadow-md;
border-color: $primary;

i {
transform: scale(1.1);
}
}
}

.deployment-modes-cta {
margin: 1rem 0 0 0;
text-align: center;

a {
color: $primary;
font-weight: 600;
text-decoration: none;

i {
margin-left: 0.35rem;
transition: transform $transition-base;
}

&:hover {
text-decoration: underline;

i {
transform: translateX(3px);
}
}
}
}

// Responsive adjustments
@media (max-width: 768px) {
.learning-paths-grid {
Expand Down Expand Up @@ -1920,6 +1992,23 @@ pre:hover .copy-code-button {
font-size: 0.8rem;
}
}

.deployment-modes-preview {
gap: 1rem;
}

.deployment-mode {
padding: 0.75rem 1rem;
min-width: 110px;

i {
font-size: 1.5rem;
}

strong {
font-size: 0.85rem;
}
}
}

// =============================================================================
Expand Down
21 changes: 21 additions & 0 deletions docs/content/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,27 @@ description: >
</div>
</div>

## Deploy Drasi Your Way

Drasi adapts to your environment with three flexible deployment modes:

<div class="deployment-modes-preview">
<div class="deployment-mode">
<i class="fas fa-book"></i>
<strong>Library</strong> - Embed in Rust apps
</div>
<div class="deployment-mode">
<i class="fas fa-server"></i>
<strong>Server</strong> - Standalone process
</div>
<div class="deployment-mode">
<i class="fas fa-cloud"></i>
<strong>Platform</strong> - Kubernetes at scale
</div>
</div>

<p class="deployment-modes-cta"><a href="/concepts/deployment-modes/">Learn about deployment modes <i class="fas fa-arrow-right"></i></a></p>

## How Drasi Works

<div class="flow-diagram">
Expand Down
11 changes: 11 additions & 0 deletions docs/content/concepts/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ description: >
</div>
</div>
</a>
<a href="/concepts/deployment-modes/">
<div class="unified-card unified-card--concepts">
<div class="unified-card-icon">
<i class="fas fa-layer-group"></i>
</div>
<div class="unified-card-content">
<h3 class="unified-card-title">Deployment Modes</h3>
<p class="unified-card-summary">Explore the different ways to deploy and run Drasi.</p>
</div>
</div>
</a>
<a href="/concepts/sources/">
<div class="unified-card unified-card--concepts">
<div class="unified-card-icon">
Expand Down
141 changes: 141 additions & 0 deletions docs/content/concepts/deployment-modes/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
---
type: "docs"
title: "Deployment Modes"
linkTitle: "Deployment Modes"
weight: 15
description: >
Understand the different ways you can deploy and run Drasi
related:
concepts:
- title: "Why Drasi?"
url: "/concepts/overview/"
howto:
- title: "Install Drasi Platform"
url: "/how-to-guides/installation/"
- title: "Using Drasi Server"
url: "/how-to-guides/installation/drasi-server/"
- title: "Using drasi-lib"
url: "/how-to-guides/installation/drasi-lib/"
---

## Introduction

Drasi offers flexible deployment options to meet different application needs and infrastructure requirements. Whether you're building a small embedded application, running a standalone service, or deploying a distributed platform on Kubernetes, Drasi adapts to your environment.

## Deployment Modes

Drasi can be deployed in three distinct modes, each optimized for different use cases:

<div class="card-grid">
<div class="unified-card unified-card--concepts">
<div class="unified-card-icon">
<i class="fas fa-book"></i>
</div>
<div class="unified-card-content">
<h3 class="unified-card-title">Drasi Library (drasi-lib)</h3>
<p class="unified-card-summary">Embed Drasi directly into your Rust applications as a library crate. Perfect for applications that need change processing capabilities without external dependencies.</p>
<p><strong>Best for:</strong> Embedded systems, single applications, minimal footprint deployments</p>
<p><a href="/how-to-guides/installation/drasi-lib/">Learn more →</a></p>
</div>
</div>

<div class="unified-card unified-card--concepts">
<div class="unified-card-icon">
<i class="fas fa-server"></i>
</div>
<div class="unified-card-content">
<h3 class="unified-card-title">Drasi Server</h3>
<p class="unified-card-summary">Run Drasi as a standalone server process. Provides a complete change processing service without Kubernetes overhead.</p>
<p><strong>Best for:</strong> Development environments, single-server deployments, traditional hosting</p>
<p><a href="/how-to-guides/installation/drasi-server/">Learn more →</a></p>
</div>
</div>

<div class="unified-card unified-card--concepts">
<div class="unified-card-icon">
<i class="fas fa-cloud"></i>
</div>
<div class="unified-card-content">
<h3 class="unified-card-title">Drasi Platform (Kubernetes)</h3>
<p class="unified-card-summary">Deploy Drasi as a distributed platform on Kubernetes. Provides scalability, high availability, and enterprise-grade operations.</p>
<p><strong>Best for:</strong> Production deployments, multi-tenant environments, high-scale applications</p>
<p><a href="/how-to-guides/installation/">Learn more →</a></p>
</div>
</div>
</div>

## Comparison

The following table helps you choose the right deployment mode for your needs:

| Feature | drasi-lib | Drasi Server | Drasi Platform |
|---------|-----------|--------------|----------------|
| **Deployment** | Embedded in application | Standalone process | Kubernetes cluster |
| **Management** | Programmatic API | Command-line/API | CLI + Kubernetes API |
| **Scaling** | Single instance | Single instance | Horizontal scaling |
| **Dependencies** | Minimal | Minimal | Kubernetes, Dapr, databases |
| **Operations** | Application lifecycle | Process management | Kubernetes orchestration |
| **Use Case** | Embedded applications | Development, simple deployments | Production, enterprise |
| **Availability** | Single instance | Single instance | High availability |
| **Multi-tenancy** | Single application | Single server | Multi-tenant capable |

## Choosing a Deployment Mode

### Use drasi-lib when:
- You're building a Rust application that needs change processing
- You want to embed Drasi functionality directly in your code
- You need minimal external dependencies
- Your application manages its own lifecycle
- You're building embedded systems or IoT applications

### Use Drasi Server when:
- You need a standalone change processing service
- You're developing or testing locally
- You want to deploy on traditional infrastructure (VMs, bare metal)
- You don't need Kubernetes orchestration
- You're running a single-tenant deployment

### Use Drasi Platform when:
- You're deploying to production at scale
- You need high availability and fault tolerance
- You require horizontal scaling capabilities
- You're already using Kubernetes
- You need multi-tenant isolation
- You want enterprise-grade operations and monitoring

## Architecture Differences

While all three deployment modes provide the same core Drasi functionality—{{< term "Source" "Sources" >}}, {{< term "Continuous Query" "Continuous Queries" >}}, and {{< term "Reaction" "Reactions" >}}—the way they're deployed and managed differs:

### drasi-lib Architecture
The library mode embeds all Drasi components within your application process. Your application code directly interacts with Drasi through Rust APIs, managing Sources, Continuous Queries, and Reactions programmatically.

### Drasi Server Architecture
The server mode runs Drasi as a single standalone process. You interact with it through a REST API or command-line interface. All components run within the same process, but are managed as a service.

### Drasi Platform Architecture
The platform mode distributes Drasi components across multiple pods in Kubernetes. This includes separate components for the control plane, query containers, Sources, and Reactions. The platform leverages Kubernetes for orchestration, Dapr for distributed systems patterns, and provides full horizontal scaling capabilities.

## Configuration and Management

Each deployment mode has different configuration and management approaches:

- **drasi-lib**: Configure through Rust code and configuration files
- **Drasi Server**: Configure through configuration files and command-line arguments
- **Drasi Platform**: Configure through YAML manifests and the Drasi CLI

## Migration Between Modes

While the three deployment modes share the same core concepts and capabilities, migrating between them requires some adaptation:

- **drasi-lib to Drasi Server**: Requires refactoring programmatic API calls to use the server's REST API or CLI
- **Drasi Server to Drasi Platform**: Requires packaging your configuration as Kubernetes manifests
- **Between any modes**: Core query definitions and logic remain the same, only the deployment and management layer changes

## Next Steps

Choose your deployment mode and get started:

- [Get started with drasi-lib](/how-to-guides/installation/drasi-lib/)
- [Get started with Drasi Server](/how-to-guides/installation/drasi-server/)
- [Get started with Drasi Platform](/how-to-guides/installation/)
12 changes: 12 additions & 0 deletions docs/content/concepts/overview/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ related:
- title: "Getting Started with Drasi"
url: "/getting-started/"
concepts:
- title: "Deployment Modes"
url: "/concepts/deployment-modes/"
- title: "Sources"
url: "/concepts/sources/"
- title: "Continuous Queries"
Expand All @@ -30,6 +32,16 @@ Here are some examples of scenarios where Drasi's functionality can be applied t
- Optimizing the delivery of orders to customers when they arrive in a curbside pickup zone.
- Improving infrastructure threat detection by raising alerts when a container with known security threats is deployed to a Kubernetes Cluster.

## Flexible Deployment

Drasi offers three deployment modes to fit your needs:

- **[Drasi Library (drasi-lib)](/how-to-guides/installation/drasi-lib/)**: Embed Drasi directly in your Rust applications
- **[Drasi Server](/how-to-guides/installation/drasi-server/)**: Run as a standalone server process
- **[Drasi Platform](/how-to-guides/installation/)**: Deploy on Kubernetes for production scale

Learn more about choosing the right deployment mode in [Deployment Modes](/concepts/deployment-modes/).

## Components
Drasi is built around three simple components: {{< term "Source" "Sources" >}}, {{< term "Continuous Query" "Continuous Queries" >}}, and {{< term "Reaction" "Reactions" >}}. In the simplest scenario, data flows through these components from left to right as shown in the diagram below. But, a single Drasi environment can host many Sources, Continuous Queries, and Reactions, allowing you to connect them together to build scalable Data Change Processing capabilities to power dynamic business solutions. Each of these concepts is discussed in more detail below.

Expand Down
6 changes: 6 additions & 0 deletions docs/content/getting-started/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ related:
- title: "Writing Single-Source Queries"
url: "/tutorials/write-single-source-continuous-queries/"
concepts:
- title: "Deployment Modes"
url: "/concepts/deployment-modes/"
- title: "Why Drasi?"
url: "/concepts/overview/"
- title: "Sources"
Expand All @@ -32,6 +34,10 @@ related:
url: "/reference/query-language/"
---

{{% alert color="info" %}}
This tutorial focuses on getting started with **Drasi Platform on Kubernetes**. If you're interested in other deployment modes, see [Deployment Modes](/concepts/deployment-modes/) for information about Drasi Server and drasi-lib.
{{% /alert %}}

This step-by-step tutorial will help you get Drasi up and running quickly and show you how easy it is to create Sources, Continuous Queries, and Reactions.

After completing this tutorial, which should take around 30 minutes, you will have created a simple end-to-end Drasi-based change-driven solution, and you will have a fully functional Drasi environment suitable for further experimentation on your own. You will then be able to continue to explore the capabilities of the Drasi platform creating [Sources](/how-to-guides/configure-sources/), [Continuous Queries](/how-to-guides/write-continuous-queries/), and [Reactions](/how-to-guides/configure-reactions/).
Expand Down
Loading