A B Testing Workflow
patterns
This workflow models comparing two versions to see which performs better.
patterns
This workflow models preventing too many requests from being processed.
Client { # Client
n1: circle label:"Start"
n2: rectangle label:"Send API request"
n3: rectangle label:"Receive response"
n4: circle label:"End"
n1.handle(right) -> n2.handle(left)
n2.handle(bottom) -> RateLimiter.n5.handle(top) [label="Request"]
n3.handle(right) -> n4.handle(left)
}
RateLimiter { # Rate Limiter
n5: rectangle label:"Extract client identifier"
n6: rectangle label:"Get current window count"
n7: diamond label:"Within rate limit?"
n8: rectangle label:"Increment request count"
n9: rectangle label:"Return 429 Too Many Requests"
n10: diamond label:"Algorithm type?"
n11: rectangle label:"Token bucket check"
n12: rectangle label:"Sliding window check"
n5.handle(right) -> n6.handle(left)
n6.handle(right) -> n10.handle(left)
n10.handle(right) -> n11.handle(left) [label="Token bucket"]
n10.handle(bottom) -> n12.handle(top) [label="Sliding window"]
n11.handle(right) -> n7.handle(left)
n12.handle(right) -> n7.handle(top)
n7.handle(right) -> n8.handle(left) [label="Yes"]
n7.handle(bottom) -> n9.handle(top) [label="No"]
n8.handle(bottom) -> Backend.n13.handle(top) [label="Allow"]
n9.handle(top) -> Client.n3.handle(bottom) [label="Rejected"]
}
Backend { # Backend Service
n13: rectangle label:"Process request"
n14: rectangle label:"Execute business logic"
n15: diamond label:"Request successful?"
n16: rectangle label:"Return 200 OK"
n17: rectangle label:"Return error response"
n18: rectangle label:"Add rate limit headers"
n13.handle(right) -> n14.handle(left)
n14.handle(right) -> n15.handle(left)
n15.handle(right) -> n16.handle(left) [label="Yes"]
n15.handle(bottom) -> n17.handle(top) [label="No"]
n16.handle(right) -> n18.handle(left)
n17.handle(right) -> n18.handle(top)
n18.handle(top) -> Client.n3.handle(bottom) [label="Response"]
}
patterns
This workflow models comparing two versions to see which performs better.
patterns
This workflow models checking user permissions before actions run.
patterns
This workflow models an async operation that notifies a callback when done.
patterns
This workflow models keeping large payloads external and only passing references.
patterns
This workflow models rolling back work when a later step fails.