Alle drei Runtimes (Quarkus JVM, Quarkus Native, Node.js 22) implementieren exakt dieselbe Logik. Abweichungen verfaelschen den Benchmark.
{
"id": "string, UUID v4",
"payload": "string, beliebig grosser Text (1 KB / 100 KB / 1 MB)"
}Jede Runtime fuehrt in dieser Reihenfolge aus:
- Parse: Eingabe als JSON deserialisieren
- Validate:
idmuss UUID-Format haben,payloaddarf nicht leer sein. Bei Fehler400zurueckgeben - Modify: Felder berechnen
processedAt: aktueller Zeitstempel ISO-8601payloadSize: Bytelaenge vonpayload(UTF-8)payloadHash: SHA-256 Hex-Digest vonpayloadruntime: einer vonjava-jvm,java-native,node
- Write: PutItem in DynamoDB-Tabelle
BenchTable - Read: GetItem mit demselben
idzurueck ausBenchTable - Respond: gelesenes Item als JSON zurueckgeben
{
"id": "string (PK)",
"processedAt": "string ISO-8601",
"payloadSize": "number",
"payloadHash": "string, 64 hex chars",
"runtime": "string"
}Wichtig: Das Original-payload wird nicht in DynamoDB geschrieben. Grund: 400 KB Item-Limit kollidiert mit dem 1 MB Test-Case. Die Runtime macht trotzdem die volle Arbeit (Parse, UTF-8-Bytelaenge, SHA-256 ueber den ganzen Payload), nur DynamoDB-I/O bleibt fuer alle Payload-Groessen konstant. Damit isolieren wir Runtime-Overhead von DynamoDB-Latenz-Varianz.
Bei Erfolg, HTTP 200 aequivalent:
{
"id": "...",
"processedAt": "...",
"payloadSize": 1024,
"payloadHash": "...",
"runtime": "java-jvm"
}Bei Validierungsfehler, HTTP 400 aequivalent:
{
"error": "string"
}- Name:
BenchTable(ueber Env-VarBENCH_TABLEkonfigurierbar) - Partition Key:
id(String) - Kein Sort Key
- On-Demand Billing
- Region:
eu-central-2(per Env-VarAWS_REGIONaus Lambda-Runtime)
- Keine Caching-Optimierungen, die nur eine Runtime kennt
- Kein DynamoDB-Connection-Pooling-Tuning, das untypisch waere
- Kein Logging im Hot-Path (verfaelscht Messung)
- Keine externen HTTP-Calls
- Kein VPC-Lambda (anderes Cold-Start-Profil)
- Keine Provisioned Concurrency, kein SnapStart fuer Java