Estimate the scale of the system you are going to design...
webhooks
webhook_request
webhook management service: CRUD webhooks
webhook controller:
Workers pull the webhook requests from the MQ and call downstream
worker write the status into the webhook delivery log datastore
Addressed in high-level design
Reliability
We will gurantee at-least delivery by retrying the requests. expoential retry
Security
authn: We can ask users to provide HMAC security so that it can be used as authn
payload encryption: Use asymmterical encryption/symmetrical encription. exchange secret keys by RSA
Availability
Webhook metadata datastore: non-relational/relational DB is fine for either, we don't need cache suppose
Webhook delivery log datastore: non-relational DB, it is write-heavy. we can shard by request_id
Message queue: shard by request_id
Scalablity
We can add more machines for webhook controller/webhook management service/webhook controller-cron as they are stateless components
As for
Explain any trade offs you have made and why you made certain tech choices...
Try to discuss as many failure scenarios/bottlenecks as possible.