Systemarchitekt-Experten-Prompt
Von Wikiprompt, der freien Prompt-Enzyklopädie
Systemarchitekt-Experten-Prompt Ein umfassender Systemprompt für die Rolle eines Senior Software Architects, der aufgabenorientierte Ausführung, Architekturdesign-Workflows, Best Practices und Qualitätschecklisten abdeckt.
Prompt-InhaltSpeichern
🌐
# System Architecture Design: AI-Powered Image Generation Platform
## Context
### Business Requirements
- Build a scalable AI image generation platform supporting multiple models (Stable Diffusion, DALL-E, Midjourney)
- Support real-time generation requests with streaming results
- Handle concurrent users with varying workload patterns
- Provide REST API and WebSocket interfaces for client applications
- Support batch processing for bulk image generation tasks
### Technical Constraints
- Existing infrastructure: AWS cloud environment
- Team expertise: Python backend, React frontend
- Budget: Mid-tier startup budget
- Timeline: MVP in 3 months, full platform in 6 months
- Regulatory: GDPR compliance for user data
### Non-Functional Requirements
- **Performance**: P95 latency < 5 seconds for single image generation
- **Scalability**: Support 1000 concurrent users, 100 requests/second peak
- **Availability**: 99.9% uptime SLA
- **Security**: SOC2 compliance, encryption at rest and in transit
- **Cost**: Optimize GPU usage, target < $0.10 per image generation
### Assumptions
- GPU instances will be the bottleneck resource
- Image generation models are pre-trained and require no fine-tuning initially
- Users primarily generate images individually, not in bulk
---
## Architecture Plan
### Phase 1: MVP Architecture (Months 1-3)
- [ ] **ARCH-PLAN-1.1 [API Gateway Service]**:
- **Responsibility**: Request routing, authentication, rate limiting
- **Technology**: Python/FastAPI, AWS API Gateway
- **Communication**: REST (HTTPS), WebSocket for streaming
- **Scaling**: Stateless, horizontal scaling with auto-scaling group
- [ ] **ARCH-PLAN-1.2 [Generation Orchestrator]**:
- **Responsibility**: Queue management, model selection, result aggregation
- **Technology**: Python/Celery, Redis queue
- **Communication**: Async message queue (Redis), REST callbacks
- **Scaling**: Stateless workers, horizontal scaling based on queue depth
- [ ] **ARCH-PLAN-1.3 [GPU Worker Pool]**:
- **Responsibility**: Execute image generation models
- **Technology**: Python/PyTorch, AWS EC2 G4 instances
- **Communication**: Redis queue consumer, S3 for result storage
- **Scaling**: Stateful (model loading), horizontal scaling with warm pools
- [ ] **ARCH-PLAN-1.4 [Result Storage Service]**:
- **Responsibility**: Store generated images, metadata, and user history
- **Technology**: AWS S3 for images, PostgreSQL for metadata
- **Communication**: REST API, S3 presigned URLs
- **Scaling**: Stateless, horizontal scaling with read replicas
- [ ] **ARCH-PLAN-1.5 [User Management Service]**:
- **Responsibility**: User accounts, API keys, usage quotas
- **Technology**: Python/FastAPI, PostgreSQL
- **Communication**: REST API, JWT tokens
- **Scaling**: Stateless, horizontal scaling
### Phase 2: Enhanced Architecture (Months 4-6)
- [ ] **ARCH-PLAN-2.1 [Model Registry Service]**:
- **Responsibility**: Model versioning, A/B testing, model metadata
- **Technology**: Python/FastAPI, PostgreSQL, S3
- **Communication**: REST API, event streaming (Kafka)
- **Scaling**: Stateless, horizontal scaling
- [ ] **ARCH-PLAN-2.2 [Batch Processing Service]**:
- **Responsibility**: Handle bulk generation requests, job scheduling
- **Technology**: Python/Celery, Redis, SQS
- **Communication**: Async message queue, webhook callbacks
- **Scaling**: Stateless workers, horizontal scaling
- [ ] **ARCH-PLAN-2.3 [Analytics Service]**:
- **Responsibility**: Usage metrics, cost tracking, performance monitoring
- **Technology**: Python/FastAPI, InfluxDB, Grafana
- **Communication**: Event streaming (Kafka), REST API
- **Scaling**: Stateless, horizontal scaling
---
## Architecture Items
### Core Design Decisions
- [ ] **ARCH-ITEM-1.1 [Microservices vs Monolith]**:
- **Decision**: Use microservices architecture with clear bounded contexts
- **Rationale**: Different scaling requirements for API vs GPU workers, independent deployment
- **Trade-offs**: Increased operational complexity, distributed system challenges
- **Alternatives**: Monolith with worker processes - rejected due to scaling constraints
- [ ] **ARCH-ITEM-1.2 [Queue-Based Load Balancing]**:
- **Decision**: Use Redis queue for generation requests, not direct HTTP to workers
- **Rationale**: Decouples API from GPU workers, allows burst handling, enables retry logic
- **Trade-offs**: Added latency (~50ms), requires queue monitoring
- **Alternatives**: Direct HTTP calls - rejected due to tight coupling and scaling issues
- [ ] **ARCH-ITEM-1.3 [GPU Pool Management]**:
- **Decision**: Maintain warm GPU pools with model pre-loaded
- **Rationale**: Model loading takes 10-30 seconds, warm pools reduce latency to < 5 seconds
- **Trade-offs**: Idle GPU cost, complex pool sizing
- **Alternatives**: Cold start per request - rejected due to latency requirements
- [ ] **ARCH-ITEM-1.4 [Result Storage Strategy]**:
- **Decision**: Store images in S3, metadata in PostgreSQL
- **Rationale**: S3 provides durable, scalable storage; PostgreSQL enables complex queries
- **Trade-offs**: Two systems to manage, eventual consistency between S3 and DB
- **Alternatives**: MongoDB GridFS - rejected due to less mature ecosystem
### Data Consistency and Resilience
- [ ] **ARCH-ITEM-2.1 [Consistency Model]**:
- **Decision**: Eventual consistency for generation results, strong consistency for user data
- **Rationale**: Generation results are immutable once created; user data requires immediate consistency
- **Trade-offs**: Users may see delayed results in rare failure cases
- **Alternatives**: Strong consistency everywhere - rejected due to performance impact
- [ ] **ARCH-ITEM-2.2 [Circuit Breaker Pattern]**:
- **Decision**: Implement circuit breakers for all downstream service calls
- **Rationale**: Prevents cascading failures when GPU workers or storage services degrade
- **Trade-offs**: Added complexity, potential false positives
- **Alternatives**: Simple timeouts - rejected due to lack of failure isolation
- [ ] **ARCH-ITEM-2.3 [Retry Strategy]**:
- **Decision**: Exponential backoff with jitter for transient failures (max 3 retries)
- **Rationale**: Handles transient GPU failures and network issues without overwhelming services
- **Trade-offs**: Added latency for failed requests
- **Alternatives**: No retries - rejected due to reliability requirements
### Security and Compliance
- [ ] **ARCH-ITEM-3.1 [Authentication and Authorization]**:
- **Decision**: JWT-based authentication with API key support
- **Rationale**: Stateless authentication scales well, API keys for programmatic access
- **Trade-offs**: Token revocation complexity
- **Alternatives**: OAuth2 with refresh tokens - rejected for MVP simplicity
- [ ] **ARCH-ITEM-3.2 [Data Encryption]**:
- **Decision**: AES-256 encryption at rest, TLS 1.3 in transit
- **Rationale**: SOC2 compliance requirement, industry standard
- **Trade-offs**: Slight performance overhead
- **Alternatives**: No encryption - rejected due to compliance requirements
### Scalability and Performance
- [ ] **ARCH-ITEM-4.1 [Horizontal Scaling Strategy]**:
- **Decision**: Auto-scaling for stateless services, manual scaling for GPU pools
- **Rationale**: Stateless services scale easily; GPU pools require careful capacity planning
- **Trade-offs**: Manual GPU scaling may cause latency spikes during demand surges
- **Alternatives**: Full auto-scaling - rejected due to GPU instance startup time
- [ ] **ARCH-ITEM-4.2 [Caching Strategy]**:
- **Decision**: Redis cache for frequently accessed images and model metadata
- **Rationale**: Reduces S3 and database load, improves response times
- **Trade-offs**: Cache invalidation complexity
- **Alternatives**: No caching - rejected due to performance requirements
---
## Proposed Code Changes
### File: `services/api_gateway/main.py`
```python
# API Gateway Service - FastAPI Application
from fastapi import FastAPI, HTTPException, Depends
from fastapi.middleware.cors import CORSMiddleware
from redis import Redis
import jwt
import uuid
app = FastAPI(title="Image Generation API")
# CORS configuration
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
# Redis connection for queue
redis_client = Redis(host='redis-service', port=6379, decode_responses=True)
@app.post("/v1/generations")
async def create_generation(request: GenerationRequest, user: User = Depends(get_current_user)):
"""
Create a new image generation request
"""
# Validate user quota
if not check_quota(user.id):
raise HTTPException(status_code=429, detail="Quota exceeded")
# Generate unique request ID
request_id = str(uuid.uuid4())
# Queue the generation request
queue_payload = {
"request_id": request_id,
"user_id": user.id,
"prompt": request.prompt,
"model": request.model,
"parameters": request.parameters
}
# Push to Redis queue
redis_client.lpush("generation_queue", json.dumps(queue_payload))
# Return request ID for polling
return {"request_id": request_id, "status": "queued"}
@app.get("/v1/generations/{request_id}")
async def get_generation(request_id: str, user: User = Depends(get_current_user)):
"""
Get generation status and result
"""
# Check Redis for status
status = redis_client.get(f"generation:{request_id}:status")
if not status:
raise HTTPException(status_code=404, detail="Request not found")
if status == "completed":
result = redis_client.get(f"generation:{request_id}:result")
return {"status": "completed", "result": json.loads(result)}
return {"status": status}
```
### File: `services/gpu_worker/worker.py`
```python
# GPU Worker - Celery Task
from celery import Celery
import torch
from diffusers import StableDiffusionPipeline
import boto3
import json
app = Celery('gpu_worker', broker='redis://redis-service:6379/0')
# Initialize model (loaded once per worker)
model = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
)
model.to("cuda")
@app.task(bind=True, max_retries=3)
def generate_image(self, request_data):
"""
Generate image based on request parameters
"""
try:
# Extract parameters
prompt = request_data['prompt']
model_name = request_data['model']
parameters = request_data.get('parameters', {})
# Generate image
result = model(
prompt=prompt,
height=parameters.get('height', 512),
width=parameters.get('width', 512),
num_inference_steps=parameters.get('steps', 50),
guidance_scale=parameters.get('guidance_scale', 7.5)
)
# Save to S3
s3 = boto3.client('s3')
image_bytes = result.images[0].tobytes()
s3_key = f"generations/{request_data['request_id']}.png"
s3.put_object(
Bucket='image-generations',
Key=s3_key,
Body=image_bytes,
ContentType='image/png'
)
# Update status in Redis
redis_client = self.app.backend.client
redis_client.set(
f"generation:{request_data['request_id']}:status",
"completed"
)
redis_client.set(
f"generation:{request_data['request_id']}:result",
json.dumps({"image_url": f"s3://image-generations/{s3_key}"})
)
return {"status": "completed", "request_id": request_data['request_id']}
except Exception as exc:
# Retry with exponential backoff
raise self.retry(exc=exc, countdown=2 ** self.request.retries)
```
### File: `docker-compose.yml`
```yaml
version: '3.8'
services:
api-gateway:
build: ./services/api_gateway
ports:
- "8000:8000"
environment:
- REDIS_HOST=redis
- DATABASE_URL=postgresql://user:pass@db:5432/imggen
depends_on:
- redis
- db
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
gpu-worker:
build: ./services/gpu_worker
environment:
- REDIS_HOST=redis
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
depends_on:
- redis
deploy:
replicas: 2
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
redis:
image: redis:7-alpine
ports:
- "6379:6379"
command: redis-server --appendonly yes
volumes:
- redis-data:/data
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=imggen
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
redis-data:
postgres-data:
```
---
## Commands
### Local Development
```bash
# Start development environment
docker-compose up -d
# Run API tests
cd services/api_gateway
pytest tests/ -v
# Run worker tests
cd services/gpu_worker
pytest tests/ -v
# Local model testing (requires GPU)
python -m tests.test_model --model stable-diffusion-v1-5
```
### CI/CD Pipeline
```bash
# Build and push Docker images
docker build -t api-gateway:latest ./services/api_gateway
docker build -t gpu-worker:latest ./services/gpu_worker
# Run integration tests
docker-compose -f docker-compose.test.yml up --abort-on-container-exit
# Deploy to staging
kubectl apply -f k8s/staging/
# Deploy to production (after approval)
kubectl apply -f k8s/production/
```
### Monitoring Commands
```bash
# Check queue depth
redis-cli llen generation_queue
# Check worker health
curl http://api-gateway:8000/health
# View metrics
kubectl get hpa
kubectl top pods
```
---
## Quality Assurance Checklist
- [ ] All business requirements have traceable architectural provisions
- [ ] Non-functional requirements are addressed with specific design decisions
- [ ] Component boundaries are justified with bounded context analysis
- [ ] Resilience patterns are specified for all inter-service communication
- [ ] Technology selections include justification and alternative analysis
- [ ] Implementation roadmap has clear phases, dependencies, and MVP definition
- [ ] Risk analysis covers technical, operational, and organizational risks
## Risk Analysis
### Technical Risks
- **High**: GPU instance availability during peak demand
- **Mitigation**: Maintain buffer capacity, implement spot instance fallback
- **Medium**: Model inference time variability
- **Mitigation**: Implement adaptive queue prioritization, timeout monitoring
- **Low**: Data corruption in S3
- **Mitigation**: Versioning enabled, cross-region replication
### Operational Risks
- **High**: GPU cost overruns
- **Mitigation**: Implement cost monitoring, auto-shutdown for idle pools
- **Medium**: Team learning curve for Kubernetes
- **Mitigation**: Start with Docker Compose, migrate to K8s in phase 2
- **Low**: Vendor lock-in with AWS
- **Mitigation**: Use containerization, abstract cloud services
### Organizational Risks
- **Medium**: Scope creep during MVP phase
- **Mitigation**: Strict MVP definition, feature freeze after 2 months
- **Low**: Team capacity constraints
- **Mitigation**: Prioritize critical path, consider outsourcing non-core components
---
## Implementation Roadmap
### Phase 1: MVP (Months 1-3)
- **Month 1**: API Gateway, Redis queue, basic GPU worker
- **Month 2**: Result storage, user management, basic monitoring
- **Month 3**: Integration testing, load testing, production deployment
### Phase 2: Enhanced (Months 4-6)
- **Month 4**: Model registry, batch processing
- **Month 5**: Analytics service, advanced monitoring
- **Month 6**: Performance optimization, feature completion
### Post-MVP Enhancements
- Multi-region deployment
- Advanced model management (fine-tuning support)
- Cost optimization algorithms
- User-facing analytics dashboard
Melde dich an, um den vollständigen Prompt zu sehen
Weiter mit:
Mit der Anmeldung akzeptierst du unsere Nutzungsbedingungen und Datenschutz
Verwendung
Dieser Prompt ist für die Verwendung mit coding gedacht. Kopiere den Inhalt oben und füge ihn in dein bevorzugtes KI-Tool ein.
Für beste Ergebnisse passe die Platzhalter (eckige Klammern oder Großbuchstaben) an deine Anforderungen an.
Diskussion
0 Kommentare