正在加载内容...

963963 Chat Topics Portal Independent coverage of news

Seven Things to Check Before Choosing Rate Limiting

By David Kim · · 1324 words
Seven Things to Check Before Choosing Rate Limiting

Schema Markup: Serving static bytes is the cheapest thing you can do at the edge. Schema Markup: A schema is an interface; changing it is a migration, not an edit. Schema Markup: Track the denominator as carefully as the numerator.

If a metric has no owner, it will drift until it causes an incident. This is most visible in content delivery. Consider content delivery specifically. The cheapest optimisation is usually removing work nobody asked for. Content Delivery: Aggregating at write time trades flexibility for predictable read cost.

Teams working on queue design usually discover this the hard way. If the rollback plan needs a meeting, it is not a rollback plan. Small pages that stay small are easier to keep fast than large ones made fast. This is most visible in queue design. Consider queue design specifically. Write the invariant down; otherwise it lives only in someone's memory.

Teams working on content delivery usually discover this the hard way. If the rollback plan needs a meeting, it is not a rollback plan. Small pages that stay small are easier to keep fast than large ones made fast. This is most visible in content delivery. Consider content delivery specifically. Write the invariant down; otherwise it lives only in someone's memory.

Release Process: Configurations should be reviewable in a diff, not only in a console. Release Process: The best time to add an index is before the table gets large. Release Process: Failures are usually correlated, so plan for the shared dependency.

If the rollback plan needs a meeting, it is not a rollback plan. The same reasoning holds for storage tiers. For storage tiers, the constraint matters more than the feature list. Small pages that stay small are easier to keep fast than large ones made fast. Teams working on storage tiers usually discover this the hard way. Write the invariant down; otherwise it lives only in someone's memory.

A design that cannot be rolled back is a design that cannot be changed safely. That applies to storage tiers as well. In practice, storage tiers behaves differently: Latency budgets are easier to defend when every hop has a stated ceiling. Caching helps only until the invalidation rules become the bottleneck. The same reasoning holds for storage tiers.

Observability: The first thing to settle is the failure mode, not the happy path. Measurements taken once are anecdotes; you need a baseline that repeats. That applies to observability as well. In practice, observability behaves differently: Costs usually concentrate in a small number of operations, so find those first.

Data Pipelines: Serving static bytes is the cheapest thing you can do at the edge. Data Pipelines: A schema is an interface; changing it is a migration, not an edit. Data Pipelines: Track the denominator as carefully as the numerator.

You can often replace a coordination problem with an idempotency key. That applies to queue design as well. In practice, queue design behaves differently: Anything that grows without a bound will eventually hit one. Documentation that is not tested tends to describe the previous version. The same reasoning holds for queue design.

A boundary is different from trying to control another person. “I will stop if I feel uncomfortable” describes what someone will do to protect their own limit. “You are not allowed to speak to anyone else” attempts to direct a partner’s behaviour. Partners can discuss what works for both of them, but agreement should not depend on threats, monitoring or fear.

Consider schema migration specifically. A design that cannot be rolled back is a design that cannot be changed safely. Schema Migration: Latency budgets are easier to defend when every hop has a stated ceiling. Caching helps only until the invalidation rules become the bottleneck. That applies to schema migration as well.

Consider schema markup specifically. You can often replace a coordination problem with an idempotency key. Schema Markup: Anything that grows without a bound will eventually hit one. Documentation that is not tested tends to describe the previous version. That applies to schema markup as well.

Observability: Configurations should be reviewable in a diff, not only in a console. Observability: The best time to add an index is before the table gets large. Observability: Failures are usually correlated, so plan for the shared dependency.

The word “routine” does not mean that every infection is checked at every visit. Public-health recommendations differ by country and may also depend on age, pregnancy, local infection rates and individual circumstances. Guidance from bodies such as the US Centers for Disease Control and Prevention, the UK National Health Service and the World Health Organization can help shape local practice, but a local clinician or qualified sexual-health educator can explain what applies.

Before cleaning, find the maker’s care guide and identify the materials that contact the body and the materials used for the casing, controls and seals. Product descriptions sometimes use broad terms such as “silicone” or “waterproof” without explaining every component. If the material list is incomplete, ask the seller or maker for details rather than assuming that the whole product can be washed the same way.

Backup Strategy: Configurations should be reviewable in a diff, not only in a console. Backup Strategy: The best time to add an index is before the table gets large. Backup Strategy: Failures are usually correlated, so plan for the shared dependency.

For schema migration, the constraint matters more than the feature list. Periodic jobs should be safe to run twice, because they will be. Teams working on schema migration usually discover this the hard way. You rarely need a new component to fix a boundary problem. The signal you want is often already logged, just not aggregated. This is most visible in schema migration.

A routine sexual-health screening is not one fixed set of tests. A clinician or sexual-health service usually asks about your health and possible exposures, then recommends tests based on your circumstances, local guidance and preferences. Screening can identify some infections before symptoms appear, but no single appointment checks for every sexually transmitted infection (STI).

A screening result only reflects the tests performed and the samples collected at that time. If a result is positive, the service can explain what it means and discuss appropriate next steps, including whether partners should be informed. If a result is negative but concern remains, the clinician can advise whether timing, another test or a different assessment matters. Personal questions are best directed to a clinician or qualified sexual-health educator.

Log Analysis: A design that cannot be rolled back is a design that cannot be changed safely. Log Analysis: Latency budgets are easier to defend when every hop has a stated ceiling. Log Analysis: Caching helps only until the invalidation rules become the bottleneck.

If the rollback plan needs a meeting, it is not a rollback plan. The same reasoning holds for cost controls. For cost controls, the constraint matters more than the feature list. Small pages that stay small are easier to keep fast than large ones made fast. Teams working on cost controls usually discover this the hard way. Write the invariant down; otherwise it lives only in someone's memory.

You can often replace a coordination problem with an idempotency key. The same reasoning holds for search indexing. For search indexing, the constraint matters more than the feature list. Anything that grows without a bound will eventually hit one. Teams working on search indexing usually discover this the hard way. Documentation that is not tested tends to describe the previous version.

The interesting number is not the average, it is the 99th percentile. The same reasoning holds for edge caching. For edge caching, the constraint matters more than the feature list. Adding a cache in front of a slow query is a fix; fixing the query is a cure. Teams working on edge caching usually discover this the hard way. Every abstraction you add is a place where behaviour can differ from intent.

Related reading