Apache Airavata is a software framework for executing and managing computational jobs on distributed computing resources including local clusters, supercomputers, national grids, academic and commercial clouds. Airavata builds on general concepts of service oriented computing, distributed messaging, and workflow composition and orchestration. Airavata bundles a server package with an API, client software development Kits and a general purpose reference UI implementation.
If you’re a researcher, Airavata offers several ways to streamline your workflows:
Apache Airavata is composed of modular components spanning core services, data management, user interfaces, and developer tooling.
airavata – Main resource management and task orchestration middlewareairavata-custos – Identity and access management frameworkairavata-mft – Managed file transfer servicesairavata-portals – All frontends for airavataairavata-data-lake – Data lake and storage backendairavata-data-catalog – Metadata and search servicesairavata-docs – Developer documentationairavata-user-docs – End-user guidesairavata-admin-user-docs – Admin-focused documentationairavata-custos-docs – Custos documentationairavata-site – Project websiteairavata-sandbox – Prototypes and early-stage workairavata-labs – Experimental projectsairavata-jupyter-kernel – Jupyter integrationairavata-cerebrum – Airavata for NeuroscienceAiravata runs as a single unified JVM (Spring Boot + Armeria) that serves gRPC and REST (HTTP/JSON transcoding) on a single port, plus background workers.
graph TB subgraph "Docker Infrastructure (compose.yml)" DB[(MariaDB<br/>:13306)] RMQ[RabbitMQ<br/>:5672] ZK[ZooKeeper<br/>:2181] KFK[Kafka<br/>:9092] KC[Keycloak<br/>:18080] end subgraph "Unified Airavata Server (single JVM)" direction TB ARMERIA["Armeria :9090<br/>gRPC + REST transcoding"] SVC["Service Layer<br/>(airavata-api module)"] BG["Background Services<br/>12 workers"] end SDK[Python SDK] -->|gRPC| ARMERIA Portal[Web Portal] -->|REST| ARMERIA ARMERIA --> SVC SVC --> DB SVC --> RMQ BG --> ZK BG --> KFK BG --> RMQ SVC -.->|auth| KC
(airavata-server)Entry point:
org.apache.airavata.server.AiravataServerMainStarted via:tilt uporjava -jar airavata-server/target/airavata-server-0.21-SNAPSHOT.jar
The unified server hosts gRPC and REST (via Armeria HTTP/JSON transcoding) on a single port, Spring Boot services (Research, Agent, File Server), and background workers in a single JVM. On startup it:
airavata database/docs)IServer workersAll business logic lives in a transport-agnostic service layer (org.apache.airavata.service.*). gRPC service implementations delegate to services. Proto definitions with google.api.http annotations provide automatic REST transcoding via Armeria.
| Service | Responsibility |
|---|---|
ExperimentService | Experiment lifecycle (create, launch, clone, terminate, intermediate outputs) |
ProjectService | Project CRUD and search |
GatewayService | Gateway management and sharing domain setup |
ApplicationCatalogService | App modules, deployments, and interfaces |
ResourceService | Compute/storage resources, job submission, data movement, storage info |
CredentialService | SSH/password credential management with sharing |
ResourceSharingService | Resource sharing and access control |
GroupResourceProfileService | Group resource profiles and policies |
GatewayResourceProfileService | Gateway resource preferences |
UserResourceProfileService | User resource preferences |
SSHAccountService | SSH account provisioning and validation |
DataProductService | Data products and replicas |
NotificationService | Notification CRUD |
ParserService | Parsers and parsing templates |
Shared utilities: SharingHelper (sharing operations), EventPublisher (messaging), RequestContext (transport-agnostic identity).
| Service | Responsibility |
|---|---|
DBEventManagerRunner | Syncs task execution events to the DB via pub/sub |
MonitoringServer | Prometheus metrics endpoint (optional) |
ComputationalResourceMonitoringService | Polls compute resource queue status |
DataInterpreterService | Metadata analysis for submitted jobs |
ProcessReschedulingService | Retries and reschedules failed processes |
HelixController | Manages Helix cluster state transitions |
GlobalParticipant | Executes task steps (EnvSetupTask, InputDataStagingTask, OutputDataStagingTask, JobVerificationTask, CompletingTask, ForkJobSubmissionTask, DefaultJobSubmissionTask, LocalJobSubmissionTask, ArchiveTask, WorkflowCancellationTask, RemoteJobCancellationTask, CancelCompletingTask, DataParsingTask, ParsingTriggeringTask) |
PreWorkflowManager | Handles pre-execution phase (env setup, data staging) |
PostWorkflowManager | Handles post-execution phase (cleanup, output fetching) |
ParserWorkflowManager | Handles parsing/data-interpretation workflow phase |
EmailBasedMonitor | Polls email inbox for job status updates (optional) |
RealtimeMonitor | Listens on Kafka for real-time job state changes |
stateDiagram-v2 [*] --> CREATED CREATED --> VALIDATED : validateExperiment VALIDATED --> LAUNCHED : launchExperiment LAUNCHED --> EXECUTING : PreWorkflowManager EXECUTING --> MONITORING : job submitted MONITORING --> COMPLETED : job finished MONITORING --> FAILED : job error EXECUTING --> CANCELLED : terminateExperiment COMPLETED --> [*] FAILED --> [*] CANCELLED --> [*]
graph LR subgraph "Startup Sequence" direction TB A[1. DB Init] --> B[2. Armeria Server :9090] B --> C[3. DBEventManager] C --> D[4. HelixController] D --> E{waitForHelixCluster} E --> F[5. HelixParticipant] F --> G[6. Pre/Post/Parser WF Managers] G --> H[7. Email/Realtime Monitors] end
The following services are embedded in the unified server (not run separately):
| Service | Module | Purpose |
|---|---|---|
| Agent Service | airavata-api/agent-service | Agent sidecar lifecycle, bidirectional gRPC for interactive jobs |
| Research Service | airavata-api/research-service | Research catalog, application catalog, data products, output parsing |
Additional service modules in airavata-api/:
| Module | Purpose |
|---|---|
compute-service | HPC resource catalog, resource profiles, resource scheduling |
storage-service | Storage resources, data movement interfaces and protocols |
credential-service | SSH keys, passwords, credential store |
iam-service | Identity, access management, gateways, user profiles |
sharing-service | Permissions, groups, tags, resource discovery |
orchestration-service | Process/task/job execution, workflow orchestration |
| Requirement | Version | Check Using |
|---|---|---|
| Java SDK | 17+ | java --version |
| Apache Maven | 3.8+ | mvn -v |
| Docker Engine | 20.10+ | docker -v |
| Docker Compose | 2.0+ | docker compose version |
| Tilt | 0.33+ | tilt version |
Tilt orchestrates the full development stack — infrastructure, build, and all services:
git clone https://github.com/apache/airavata.git cd airavata tilt up
This starts:
compose.yml)/docsOpen the Tilt UI at http://localhost:10350 to monitor all resources. Integration tests can be triggered manually from the Tilt UI.
docker compose up -d # Infrastructure mvn clean package -DskipTests -T4 # Build java -jar airavata-server/target/airavata-server-0.21-SNAPSHOT.jar # Start server
Or use the helper scripts:
./dev-tools/scripts/setup.sh # Infrastructure + build ./dev-tools/scripts/start.sh # Start server
The Armeria server on port 9090 exposes:
| Endpoint | Method | Description |
|---|---|---|
/internal/actuator/health | GET | Health check |
/docs | GET | Armeria DocService (API documentation) |
The main configuration file is airavata-server/src/main/resources/application.yml. Key settings:
spring.datasource.url — JDBC URL (default: jdbc:mariadb://localhost:13306/airavata)armeria.server.port — Armeria server port (default: 9090)airavata.security.openid-url — Keycloak realm URLmvn test -pl airavata-api -Dgroups=runtime
| Transport | Port | Purpose |
|---|---|---|
| Armeria | 9090 | gRPC + REST (HTTP/JSON transcoding), DocService at /docs, health at /internal/actuator/health |
We welcome contributions from the community! Here's how you can help:
Learn More:
Use tilt up to start the full stack, then attach your IDE debugger. For remote debugging, add -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 to the serve_cmd in the Tiltfile.
Get Help:
Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements. See the NOTICE file distributed with this work for
additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at:
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
See the LICENSE file for complete license details.