Cancer@Home v2 - Architecture Diagram
System Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WEB BROWSER β
β http://localhost:5000 β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTP/WebSocket
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (HTML5/CSS3/JS) β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββββββββββββββ β
β βDashboard β Neo4j β BOINC β GDC β Pipeline β β
β β View β Viz β Tasks β Data β Tools β β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββββββββββββββ β
β β
β Technologies: D3.js, Chart.js, Vanilla JavaScript β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ
β
β REST API + GraphQL
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND (FastAPI + Python) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β API Layer β β
β β β’ REST Endpoints (/api/*) β β
β β β’ GraphQL Endpoint (/graphql) β β
β β β’ WebSocket Support β β
β β β’ Swagger Documentation (/docs) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β Python Modules β
β βΌ β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββββββββββββ β
β β BOINC β GDC β Neo4j β Pipeline β Utilities β β
β β Client β Client β DB β Tools β β β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββββββββββββββ β
βββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββββββββββββββββββββββββ
β β β β
β β β β
βΌ βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATA & SERVICES LAYER β
β β
β ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββ β
β β Neo4j Graph β β BOINC Server β β GDC Portal β β
β β Database β β (Distributed) β β (External) β β
β β β β β β β β
β β Port: 7687 (Bolt) β β Local/Remote β β api.gdc.cancer β
β β 7474 (HTTP) β β Task Processing β β .gov β β
β β β β β β β β
β β β’ Genes β β β’ Variant Calling β β β’ TCGA Data β β
β β β’ Mutations β β β’ BLAST Search β β β’ TARGET Data β β
β β β’ Patients β β β’ Alignment β β β’ Clinical Data β β
β β β’ Cancer Types β β β’ Annotation β β β’ Genomic Files β β
β ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Bioinformatics Tools (Local) ββ
β β ββ
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββ ββ
β β β FASTQ β β BLAST β β Variant Caller β ββ
β β β Processor β β Runner β β β ββ
β β β β β β β β ββ
β β β β’ QC β β β’ BLASTN β β β’ VCF Generation β ββ
β β β β’ Filtering β β β’ BLASTP β β β’ Annotation β ββ
β β β β’ Trimming β β β’ Parsing β β β’ TMB Calculation β ββ
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββ ββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FILE STORAGE β
β β
β data/ β
β βββ gdc/ # Downloaded GDC files β
β βββ boinc/ # BOINC task data β
β βββ processed/ # Analysis results β
β β βββ fastq/ β
β β βββ blast/ β
β β βββ variants/ β
β βββ cache/ # Temporary files β
β β
β logs/ # Application logs β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Data Flow Diagram
ββββββββββββββββ
β User β
β Browser β
ββββββββ¬ββββββββ
β 1. Request
βΌ
ββββββββββββββββββββββββββββββββββββ
β Dashboard β
β (View Gene/Mutation Data) β
ββββββββ¬ββββββββββββββββββββββββββββ
β 2. GraphQL Query
βΌ
ββββββββββββββββββββββββββββββββββββ
β FastAPI Backend β
β - Parse Query β
β - Validate Request β
ββββββββ¬ββββββββββββββββββββββββββββ
β 3. Cypher Query
βΌ
ββββββββββββββββββββββββββββββββββββ
β Neo4j Database β
β - Execute Graph Query β
β - Traverse Relationships β
β - Aggregate Results β
ββββββββ¬ββββββββββββββββββββββββββββ
β 4. Graph Data
βΌ
ββββββββββββββββββββββββββββββββββββ
β GraphQL Resolver β
β - Transform Data β
β - Format Response β
ββββββββ¬ββββββββββββββββββββββββββββ
β 5. JSON Response
βΌ
ββββββββββββββββββββββββββββββββββββ
β Frontend Visualization β
β - Render Graph β
β - Display Charts β
β - Show Statistics β
ββββββββββββββββββββββββββββββββββββ
BOINC Task Processing Flow
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Submit β β Queue β β Execute β
β Task βββββββΆβ Task βββββββΆβ Analysis β
β β β β β β
ββββββββββββββββ ββββββββββββββββ ββββββββ¬ββββββββ
β
βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Store β β Import to β β Generate β
β Results ββββββββ Neo4j ββββββββ Results β
β β β β β β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
Neo4j Graph Schema
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Neo4j Graph Model β
β β
β ββββββββββββ ββββββββββββ β
β β Gene β β Mutation β β
β ββββββββββββ€ ββββββββββββ€ β
β β gene_id βββββββββAFFECTSββββββmut_id β β
β β symbol β β chr β β
β β name β β position β β
β β chr β β ref β β
β ββββββββββββ β alt β β
β ββββββ²ββββββ β
β β β
β β HAS_MUTATION β
β β β
β ββββββββββββ ββββββ΄ββββββ β
β β Cancer β β Patient β β
β β Type β ββββββββββββ€ β
β ββββββββββββ€ βpatient_idβ β
β βcancer_id β β age β β
β β name ββββDIAGNOSED_WITHββββ gender β β
β β tissue β β race β β
β ββββββββββββ β status β β
β ββββββββββββ β
β β
β Relationships: β
β β’ Gene β AFFECTS β Mutation β
β β’ Patient β HAS_MUTATION β Mutation β
β β’ Patient β DIAGNOSED_WITH β CancerType β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Technology Stack
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Technology Layers β
β β
β Frontend: β
β β’ HTML5, CSS3, JavaScript (ES6+) β
β β’ D3.js (Graph Visualization) β
β β’ Chart.js (Charts & Analytics) β
β β’ Responsive Design β
β β
β Backend: β
β β’ Python 3.8+ β
β β’ FastAPI (Web Framework) β
β β’ Uvicorn (ASGI Server) β
β β’ Strawberry (GraphQL) β
β β
β Database: β
β β’ Neo4j 5.13 (Graph Database) β
β β’ Bolt Protocol β
β β’ APOC & GDS Plugins β
β β
β Data Processing: β
β β’ Biopython (Sequence Analysis) β
β β’ NumPy & Pandas (Data Manipulation) β
β β’ BLAST+ (Sequence Alignment) β
β β
β Infrastructure: β
β β’ Docker & Docker Compose β
β β’ YAML Configuration β
β β’ Python Virtual Environments β
β β
β External APIs: β
β β’ GDC Portal API (Cancer Data) β
β β’ BOINC RPC (Distributed Computing) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Deployment Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Local Development β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Host Machine β β
β β β β
β β βββββββββββββββββββ ββββββββββββββββββββββββ β β
β β β Python venv β β Docker Desktop β β β
β β β Port 5000 β β β β β
β β β β β ββββββββββββββββββ β β β
β β β β’ FastAPI β β β Neo4j β β β β
β β β β’ Backend API ββββββββββΆβ β Port 7474 β β β β
β β β β’ GraphQL β β β Port 7687 β β β β
β β β β’ WebSocket β β ββββββββββββββββββ β β β
β β β β β β β β
β β βββββββββββββββββββ ββββββββββββββββββββββββ β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Access URLs: β
β β’ http://localhost:5000 - Main Application β
β β’ http://localhost:5000/docs - API Documentation β
β β’ http://localhost:5000/graphql - GraphQL Playground β
β β’ http://localhost:7474 - Neo4j Browser β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ