freno
Cooperative, highly available throttler service: clients use freno to throttle writes to a resource.
Current implementation can throttle writes to (multiple) MySQL clusters, based on replication status for those clusters. freno will throttle cooperative clients when replication lag exceeds a pre-defined threshold.
freno dynamically adapts to changes in server inventory; it can further be controlled by the user to force throttling of certain apps.
freno is highly available and uses raft consensus protocol to decide leadership and to pass user events between member nodes.
Cooperative
freno collects data from backend stores (at this time MySQL only) and has the logic to answer the question "may I write to the backend store?"
Clients (application, scripts, jobs) are expected to consult with freno . freno is not a proxy between the client and the backend store. It merely observes the store and states "you're good to write" or "you should stop writing". Clients are expected to consult with freno and respect its recommendation.
Stores and apps
freno collects data per data store. E.g. when probing MySQL clusters it will collect replication lag per cluster, independently. Backend store metrics are collected automatically and represent absolute truths.
... continue reading