boulder/core
Samantha 055f620c4b
Initial implementation of key-value rate limits (#6947)
This design seeks to reduce read-pressure on our DB by moving rate limit
tabulation to a key-value datastore. This PR provides the following:

- (README.md) a short guide to the schemas, formats, and concepts
introduced in this PR
- (source.go) an interface for storing, retrieving, and resetting a
subscriber bucket
- (name.go) an enumeration of all defined rate limits
- (limit.go) a schema for defining default limits and per-subscriber
overrides
- (limiter.go) a high-level API for interacting with key-value rate
limits
- (gcra.go) an implementation of the Generic Cell Rate Algorithm, a
leaky bucket-style scheduling algorithm, used to calculate the present
or future capacity of a subscriber bucket using spend and refund
operations

Note: the included source implementation is test-only and currently
accomplished using a simple in-memory map protected by a mutex,
implementations using Redis and potentially other data stores will
follow.

Part of #5545
2023-07-21 12:57:18 -04:00
..
proto Deprecate ROCSPStage6 feature flag (#6770) 2023-04-04 15:41:51 -07:00
challenges.go RA: Simplify FinalizeOrder flow (#6588) 2023-01-25 17:59:54 -08:00
challenges_test.go Make authz2 the default storage format (#4476) 2019-10-21 15:29:15 -04:00
core_test.go dependencies: Replace square/go-jose.v2 with go-jose/go-jose.v2 (#6598) 2023-01-24 12:08:30 -05:00
interfaces.go RA: Simplify FinalizeOrder flow (#6588) 2023-01-25 17:59:54 -08:00
objects.go SA: Don't store HTTP-01 hostname and port in database validationrecord (#6863) 2023-05-23 15:36:17 -04:00
objects_test.go RA: Simplify FinalizeOrder flow (#6588) 2023-01-25 17:59:54 -08:00
util.go Initial implementation of key-value rate limits (#6947) 2023-07-21 12:57:18 -04:00
util_test.go Initial implementation of key-value rate limits (#6947) 2023-07-21 12:57:18 -04:00