This is an automated email from the ASF dual-hosted git repository.

yasith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/master by this push:
     new be607c4d97 update README with detailed description of internals
be607c4d97 is described below

commit be607c4d9773ac34760cd1097262f8ba4c93bddf
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Fri Jun 27 02:36:56 2025 -0500

    update README with detailed description of internals
---
 README.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 65 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 5c328f51d5..fc6b6fabba 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,8 @@ Apache Airavata is a software framework for executing and 
managing computational
 
 > Learn more at [airavata.apache.org](https://airavata.apache.org)
 
+![image](assets/airavata-components.png)
+
 ## 🧱 The Airavata Ecosystem
 
 Apache Airavata is composed of modular components spanning core services, data 
management, user interfaces, and developer tooling.
@@ -103,18 +105,72 @@ ls -la modules/distribution/target/
 
 ```
 
-### Core Service Classes
+### Core Airavata Services
+
+![image](assets/airavata-dataflow.png)
+
+
+#### API Server
+> Class Name: `org.apache.airavata.server.ServerMain`
+
+The API Server is the entrypoint to Airavata, bootstrapping 7 core services 
that run in parallel. Each service implements the 
`org.apache.airavata.common.utils.IServer` interface.
+
+- API - `org.apache.airavata.api.server.AiravataAPIServer` - public-facing API 
that is consumed by Airavata SDKs and dashboards. It bridges external clients 
to internal Airavata services, and is served over Thrift.
+- DB Event Manager - 
`org.apache.airavata.db.event.manager.DBEventManagerRunner` - Monitors task 
execution events (launch, transitions, completion/failure) and syncs them to 
the Airavata DB via pub/sub hooks.
+- Registry - `org.apache.airavata.registry.api.service.RegistryAPIServer` - 
Manages metadata and definitions for executable tasks and applications.
+- Credential Store - 
`org.apache.airavata.credential.store.server.CredentialStoreServer` - Manages 
secure storage and retrieval of credentials for accessing registered compute 
resources.
+- Sharing Registry - 
`org.apache.airavata.sharing.registry.server.SharingRegistryServer` - Handles 
sharing and permissioning of Airavata resources between users and groups.
+- Orchestrator - `org.apache.airavata.orchestrator.server.OrchestratorServer` 
- Constructs workflow DAGs, assigns unique IDs to tasks, and hands them off to 
the workflow manager.
+- Profile - `org.apache.airavata.service.profile.server.ProfileServiceServer` 
- Manages users, tenants, compute resources, and group profiles.
+
+#### Pre Workflow Manager
+> Class Name: `org.apache.airavata.helix.impl.workflow.PreWorkflowManager`
+
+The pre-workflow manager listens on the internal MQ (KafkaConsumer) to inbound 
tasks at **pre-execution** phase. When a task DAG is received, it handles the 
environment setup and data staging phases of the DAG in a robust manner, which 
includes fault-handling. All these happen BEFORE the task DAG is submitted to 
the controller, and subsequently to the participant.
+
+#### Controller
+> Class Name: `org.apache.airavata.helix.impl.controller.HelixController`
+
+The Controller manages the step-by-step transition of task state on 
*helix-side*. It uses Apache Helix to track step start, completion, and failure 
paths, ensuring the next step starts upon successful completion or retrying the 
current step on failure.
+
+#### Participant
+> Class Name: `org.apache.airavata.helix.impl.participant.GlobalParticipant`
+
+The participant synchronizes the *helix-side* state transition of a task with 
its concrete execution at *airavata-side*. The currently registered steps are: 
`EnvSetupTask`, `InputDataStagingTask`, `OutputDataStagingTask`, 
`JobVerificationTask`, `CompletingTask`, `ForkJobSubmissionTask`, 
`DefaultJobSubmissionTask`, `LocalJobSubmissionTask`, `ArchiveTask`, 
`WorkflowCancellationTask`, `RemoteJobCancellationTask`, 
`CancelCompletingTask`, `DataParsingTask`, `ParsingTriggeringTask`, and 
`MockTask`.
+
+#### Post Workflow Manager
+> Class Name: `org.apache.airavata.helix.impl.workflow.PostWorkflowManager`
+
+The post-workflow listens on the internal MQ (KafkaConsumer) to inbound tasks 
at **post-execution** phase. Once a task is received, it handles the cleanup 
and output fetching phases of the task DAG in a robust manner, which includes 
fault-handling. Once the main task completes executing, this is announced to 
the realtime monitor, upon which the post-workflow phase is triggered. Once 
triggered, it submits this state change to the controller.
+
+#### Parser Workflow Manager (Deprecated)
+> Class Name: `org.apache.airavata.helix.impl.workflow.ParserWorkflowManager`
+
+The parser-workflow listens on the internal MQ (KafkaConsumer) to inbound 
tasks at **post-completion** phase., which includes transforming generated 
outputs into different formats. This component is not actively used in airavata.
+
+![image](assets/airavata-state-transitions.png)
+
+#### Email Monitor
+> Class Name: `org.apache.airavata.monitor.email.EmailBasedMonitor`
+
+The email monitor periodically checks an email inbox for job status updates 
sent via email. If it reads a new email with a job status update, it relays 
that state-change to the internal MQ (KafkaProducer).
+
+#### Realtime Monitor
+> Class Name: `org.apache.airavata.monitor.realtime.RealtimeMonitor`
+
+The realtime monitor listens to incoming state-change messages on the internal 
MQ (KafkaConsumer), and relays that state-change to the internal MQ 
(KafkaProducer). When a task is completed at the compute resource, the realtime 
monitor is notified of this.
+
+#### Agent Service
+> Class Name: 
`org.apache.airavata.agent.connection.service.AgentServiceApplication`
 
-* API Server - `org.apache.airavata.server.ServerMain`
-* Controller - `org.apache.airavata.helix.impl.controller.HelixController`
-* Participant - `org.apache.airavata.helix.impl.participant.GlobalParticipant`
+The agent service is the backend for launching interactive jobs using Airavata.
+It provide constructs to launch a custom "Agent" on a compute resource, that 
connects back to the Agent Service through a bi-directional gRPC channel.
+The Airavata Python SDK primarily utilizes the Agent Service (gRPC) and the 
Airavata API (Thrift) to submit and execute interactive jobs, spawn 
subprocesses, and create network tunnels to subprocesses, even if they are 
behind NAT.
 
-* Pre WM - `org.apache.airavata.helix.impl.workflow.PreWorkflowManager`
-* Parser WM - `org.apache.airavata.helix.impl.workflow.ParserWorkflowManager`
-* Post WM - `org.apache.airavata.helix.impl.workflow.PostWorkflowManager`
+#### Research Service
+> Class Name: `org.apache.airavata.research.service.ResearchServiceApplication`
 
-* Email Monitor - `org.apache.airavata.monitor.email.EmailBasedMonitor`
-* Realtime Monitor - `org.apache.airavata.monitor.realtime.RealtimeMonitor`
+The research service is the backend for the Airavata research catalog. It 
provides the API to add, list, modify, and publish notebooks, repositories, 
datasets, and computational models in cybershuttle, and launch interactive 
remote sessions to utilize them in a research setting.
 
 ### 🐳 Docker Development (Experimental)
 

Reply via email to