A B Testing Workflow
patterns
This workflow models comparing two versions to see which performs better.
patterns
Cache-aside pattern with cache lookup, database fallback on miss, cache population, TTL-based expiration, and write-through invalidation.
Application { # Application
n1: circle label:"Start"
n2: rectangle label:"Request data by key"
n3: rectangle label:"Return data to caller"
n4: circle label:"End"
n1.handle(right) -> n2.handle(left)
n2.handle(bottom) -> CacheLayer.n5.handle(top) [label="Lookup"]
n3.handle(right) -> n4.handle(left)
}
CacheLayer { # Cache Layer
n5: rectangle label:"Check cache for key"
n6: diamond label:"Cache hit?"
n7: rectangle label:"Return cached value"
n8: rectangle label:"Query database"
n9: rectangle label:"Store in cache with TTL"
n5.handle(right) -> n6.handle(left)
n6.handle(right) -> n7.handle(left) [label="Yes"]
n6.handle(bottom) -> n8.handle(top) [label="No"]
n7.handle(top) -> Application.n3.handle(bottom) [label="From cache"]
n8.handle(bottom) -> Database.n10.handle(top) [label="Fetch"]
n9.handle(top) -> Application.n3.handle(bottom) [label="From DB"]
}
Database { # Database
n10: rectangle label:"Execute query"
n11: diamond label:"Data found?"
n12: rectangle label:"Return result set"
n13: rectangle label:"Return empty result"
n10.handle(right) -> n11.handle(left)
n11.handle(right) -> n12.handle(left) [label="Yes"]
n11.handle(bottom) -> n13.handle(top) [label="No"]
n12.handle(top) -> CacheLayer.n9.handle(bottom) [label="Populate cache"]
n13.handle(top) -> Application.n3.handle(bottom) [label="Not found"]
}
WriteOperation { # Write Operation
n14: rectangle label:"Update database"
n15: rectangle label:"Invalidate cache key"
n16: diamond label:"Write-through?"
n17: rectangle label:"Update cache directly"
n18: rectangle label:"Let cache expire"
n14.handle(right) -> n15.handle(left)
n15.handle(right) -> n16.handle(left)
n16.handle(right) -> n17.handle(left) [label="Yes"]
n16.handle(bottom) -> n18.handle(top) [label="No"]
n17.handle(top) -> Application.n3.handle(bottom) [label="Updated"]
n18.handle(top) -> Application.n3.handle(bottom) [label="Invalidated"]
}
patterns
This workflow models comparing two versions to see which performs better.
patterns
API Gateway pattern with request authentication, rate limiting, request routing to backend services, response aggregation, and error handling.
patterns
User authentication workflow with credential validation, MFA challenge, JWT token generation, session creation, and failed attempt tracking.
patterns
This workflow models checking user permissions before actions run.
patterns
Batch processing pattern with job scheduling, chunk-based processing, checkpoint/restart capability, error handling, and completion reporting.