Building A Python Web Service With Ray
Building A Python Web Service With Ray
Philipp Moritz
September 30, 2020
What this talk is about
What this talk is about
Flask server
aiohttp server
fastAPI server
Web logic
Traditional Python web service architecture
Redis
Flask server
Celery
Redis Queue
aiohttp server Multiprocessing
Flask server
Celery
Redis Queue
aiohttp server Multiprocessing Blob store
Flask server
Celery
Redis Queue
aiohttp server Multiprocessing Blob store
Flask server
Celery
Redis Queue
aiohttp server Multiprocessing Blob store
Actor Actor
fastAPI server Task
Actor Actor
fastAPI server Task
Actor Actor
fastAPI server Task
Actor Actor
fastAPI server Task
/api/v2/session/start
Session 1
Session 2
Scaling up with Ray tasks
/api/v2/session/1/execute
/api/v2/session/1/execute
/api/v2/session/1/execute Session 1
Session 2
Scaling up with Ray tasks
/api/v2/session/1/execute
/api/v2/session/1/execute Session 1
/api/v2/session/2/execute
Session 2
Managing state with Ray actors
Update
fastAPI server Sessions Notifications
Actor Actor
Task
Update
Web logic Business logic
/api/v2/session/start
Session
Writing an API server with fastAPI
@router.get(“/{command_id}/execution_logs”)
Response[LogOutput]:
Ray asyncio support
Object Reference
Ray object references are awaitable!
async def get_execution_logs(session_record, session_command_id, log_params):
session_record["id"],
session_command_id,
logs_params
)
Ray asyncio support
Object Reference
Ray object references are awaitable!
async def get_execution_logs(session_record, session_command_id, log_params):
self.create_cluster_stats = metrics.Histogram(
"second",
["step"],
Metrics and Monitoring
self.create_cluster_stats = metrics.Histogram(
"second",
["step"],
Tracing
We use OpenTelemetry for tracing
Can generate detailed traces for a number of Python libraries, including database
clients, web frameworks. requirements.txt:
opentelemetry-api
opentelemetry-sdk
opentelemetry-ext-asgi
Automatic tracing for Ray tasks and actors
opentelemetry-ext-asyncpg
opentelemetry-ext-botocore
opentelemetry-instrumentatio
Can also add custom traces: n-starlette
Tracing
We use OpenTelemetry for tracing
● Development
● Staging,
● Production