Architecture

The Bytewax Platform architecture is based on the Kubernetes controller pattern applied to the Dataflow Custom Resource.

At a high level, the Bytewax Platform consists of these components running on Kubernetes:

  • Operator
  • Dashboard
  • WaxAPI
  • Waxctl

The Operator is a core component running in the Kubernetes cluster. It implements the controller pattern over the Dataflow custom resources deployed on that cluster. Each time a Dataflow is created, modified or deleted, the Operator takes the needed actions to make the current state like the desired state.

graph LR;
  client([user])-. CRUD Dataflows
using waxctl, waxapi or dashboard .->ingress[Dataflow CR]; ingress-->|events|service[Bytewax
Platform]; subgraph Kubernetes cluster ingress; service-->pod1[Dataflow Pod 1]; service-->pod2[Dataflow Pod 2]; end classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000; classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff; classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5; classDef bw fill:#fab90f,stroke:#fff,stroke-width:2px,color:#fff; class ingress,pod1,pod2 k8s; class client plain; class cluster cluster; class service bw;

The Dashboard allows you to manage your Dataflows visually.

The WaxAPI is a RESTful API gateway responsible for receiving requests from clients and interacting with Kubernetes API.

Waxctl is the Bytewax CLI. It allows you to manage your Dataflows from the command-line.

The Bytewax Platform Ecosystem

graph LR;
  client([user])
  waxctl[Waxctl]
  client-.terminal.->waxctl;
  waxctl --> k8sapi;
  client --> dashboard
  dashboard --> service
  idp(Identity
Provider) <--> |OpenID Connect
flow|service; idp <--> |OpenID Connect
flow|dashboard pod1 --> |metrics|prom[(Prometheus)]; pod1 --> |traces|otel[(OpenTelemetry)]; pod1 --> |recovery
snapshots|bucket[(S3)]; subgraph Kubernetes cluster k8sapi[kubeAPI] pod1[Dataflow
stack] subgraph Bytewax Platform operator[Operator] service[WaxAPI] dashboard[Dashboard] end service --> k8sapi operator --> k8sapi k8sapi-->pod1; end classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000; classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff; classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5; classDef bw fill:#fab90f,stroke:#fff,stroke-width:2px,color:#fff; class ingress,pod1,k8sapi k8s; class client plain; class cluster cluster; class service,dashboard,operator,waxctl bw;

Open ID Connect Integration

The Dashboard and WaxAPI are integrated with a third-party OpenID Connect provider to authenticate every request they receive.

The Bytewax Platform can work with identity providers which implement authorization code flow with Proof Key for Code Exchange (PKCE).