Multi Step Processes hard
How does CDC (reading the database transaction log) solve the 'Dual Write' problem better than the Application-level Outbox pattern?
- A CDC is synchronous.
- B CDC uses less CPU.
- C Application Outbox requires the app to modify its code. CDC guarantees that *every* committed DB change yields an event via the WAL, even if the app crashes immediately after commit.
- D CDC replaces the database entirely.
Answer: C. Application Outbox requires the app to modify its code. CDC guarantees that *every* committed DB change yields an event via the WAL, even if the app crashes immediately after commit.
CDC (like Debezium) hooks into the source of truth (the Write Ahead Log). If the database says it happened, the event *will* be generated. It eliminates bugs where the app code commits to DB but fails to write the event.
One system design question a day, with spaced repetition so the ones you miss come back.
Get the appRelated questions
- A user registration process involves two steps: inserting a row into the 'Users' database table and inserting a row into the 'Profiles' table. If the first insert succeeds but the second fails, the database is left in an inconsistent state. What mechanism prevents this?
- In a multi-step workflow across different services (Order Service -> Payment Service), you cannot use a single database transaction. If the Payment fails after the Order was created, how do you fix the Order state?
- You are writing a script to process 10,000 images. The script runs on a server that might restart unexpectedly. To ensure you don't have to start over from image #1 after a crash, what should you implement?
- A client app sends a 'Pay $50' request to your API. The server processes the payment but the network response is lost. The client automatically retries the request. What prevents the user from being charged $100?
- A user uploads a large video file that needs to be transcoded (converted), which takes 5 minutes. Why is it bad practice to keep the HTTP connection open while the server processes the video?
- A user reports an error in a process that spans 3 different microservices. The logs are scattered across different servers. What is the standard way to link these logs together?