- service can be deployed in a sensible default configuration in an existing k8s cluster or locally (for testing
purposes) using:
helm installjust run-kind
- service supports client connections using sockets, sse, and http long polling
- service can scale horizontally sufficiently to handle 1M messages/second across 100M clients
- service exposes prometheus metrics
- service chart relies on the prometheus-adapter for scaling metrics
- blast radius of any one service being temporarily unavailable for less than 10 minutes does not include data loss
- for the purpose of the above, failure to generate data is not considered data loss
- backing services incl.
kafkaandgarnet (redis)can be deployed to k8s using manifest bundles or plugged in using environment variables
just lintjust buildjust testjust releasejust docker-build-alljust run-kindjust shutdown-kindjust build-d2-diagrams
- just
- docker or a compatible image builder (with buildkit support)
- cargo
- rustc
- clippy
- gcc or another C compiler
The receiver service is responsible for ensuring that:
- received notifications messages are shaped correctly
- any possible logical validations are performed to reject messages early
- logically valid and well-shaped notification messages are pushed to kafka
The director service is responsible for ensuring that:
- consumed messages from kafka are sent to the distributor(s) holding the connection(s) to the receiving client(s)
- consumed messages that fail to reach their intended destination are retried
- consumed messages that fail after an appropriate number of retries are stored for retrieval in redis
The distributor service is responsible for ensuring that:
- the client connection list in redis remains up to date
- forwarding messages received from the director service to the appropriate client(s)
- retrieving messages from redis and sending them to clients in the order received when a connection is established BEFORE sending any new messages