Buquet: Using S3 as a Task Queue Control Plane
ArchitectureComments
What is the expected retry overhead when those conditional writes fail under high contention? I would like to see the latency distribution for successful state transitions when multiple workers are competing for the same task.
The assertion that offloading to S3 simplifies the failure domain is slightly imprecise. While S3 provides high durability, the actual failure domain shifts to the consistency model of the object store; specifically, how the system handles concurrent PUT requests to the same key without a native locking mechanism.
The documentation mentions the use of S3 conditional writes to manage these state transitions. This essentially moves the locking logic to the storage API, which addresses the consistency concern by failing the write if the ETag has changed.
If the task volume scales significantly, would the cost of frequent S3 GET and PUT requests eventually exceed the operational cost of managing a small, managed Redis cluster? One could argue that for high-throughput systems, the leaner infrastructure actually becomes a financial liability.
In government environments, getting a new piece of infrastructure like RabbitMQ approved by security takes months of paperwork. Using an existing S3 bucket we already have permission for lets us actually start working on the project today.
This reminds me of the recent push toward using SQLite in production for low-traffic services to avoid the overhead of a full database server. It simplifies the stack for a large number of use cases where the scale does not justify the complexity.