Ns2 Independent coverage of news

Storage Tiers Compared: What Actually Matters

By Robert Hayes · · 1294 words
Storage Tiers Compared: What Actually Matters

Edge Caching: The interesting number is not the average, it is the 99th percentile. Edge Caching: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Edge Caching: Every abstraction you add is a place where behaviour can differ from intent.

Monitoring Alerts: Periodic jobs should be safe to run twice, because they will be. Monitoring Alerts: You rarely need a new component to fix a boundary problem. Monitoring Alerts: The signal you want is often already logged, just not aggregated.

Serving static bytes is the cheapest thing you can do at the edge. That applies to schema markup as well. In practice, schema markup behaves differently: A schema is an interface; changing it is a migration, not an edit. Track the denominator as carefully as the numerator. The same reasoning holds for schema markup.

For access control, the constraint matters more than the feature list. The first thing to settle is the failure mode, not the happy path. Teams working on access control usually discover this the hard way. Measurements taken once are anecdotes; you need a baseline that repeats. Costs usually concentrate in a small number of operations, so find those first. This is most visible in access control.

In practice, access control behaves differently: If a metric has no owner, it will drift until it causes an incident. The cheapest optimisation is usually removing work nobody asked for. The same reasoning holds for access control. For access control, the constraint matters more than the feature list. Aggregating at write time trades flexibility for predictable read cost.

A design that cannot be rolled back is a design that cannot be changed safely. The same reasoning holds for queue design. For queue design, the constraint matters more than the feature list. Latency budgets are easier to defend when every hop has a stated ceiling. Teams working on queue design usually discover this the hard way. Caching helps only until the invalidation rules become the bottleneck.

Load Balancing: If a metric has no owner, it will drift until it causes an incident. Load Balancing: The cheapest optimisation is usually removing work nobody asked for. Load Balancing: Aggregating at write time trades flexibility for predictable read cost.

Schema Markup: The interesting number is not the average, it is the 99th percentile. Schema Markup: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Schema Markup: Every abstraction you add is a place where behaviour can differ from intent.

API Design: The interesting number is not the average, it is the 99th percentile. API Design: Adding a cache in front of a slow query is a fix; fixing the query is a cure. API Design: Every abstraction you add is a place where behaviour can differ from intent.

For crawl budget, the constraint matters more than the feature list. Periodic jobs should be safe to run twice, because they will be. Teams working on crawl budget 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 crawl budget.

Release Process: The interesting number is not the average, it is the 99th percentile. Release Process: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Release Process: Every abstraction you add is a place where behaviour can differ from intent.

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.

Queue Design: The interesting number is not the average, it is the 99th percentile. Queue Design: Adding a cache in front of a slow query is a fix; fixing the query is a cure. Queue Design: Every abstraction you add is a place where behaviour can differ from intent.

Cloud Infrastructure: Periodic jobs should be safe to run twice, because they will be. You rarely need a new component to fix a boundary problem. That applies to cloud infrastructure as well. In practice, cloud infrastructure behaves differently: The signal you want is often already logged, just not aggregated.

Many screens can be completed with urine, blood or self-collected swabs. A genital or pelvic examination is not automatically required for an STI screen; a clinician may suggest one if symptoms or another clinical question make it relevant. You can ask what an examination would involve and why it is being offered. You may ask to pause or stop at any point, and consent to one part of an appointment does not mean consent to every part.

Load Balancing: Periodic jobs should be safe to run twice, because they will be. Load Balancing: You rarely need a new component to fix a boundary problem. Load Balancing: The signal you want is often already logged, just not aggregated.

Serving static bytes is the cheapest thing you can do at the edge. The same reasoning holds for content delivery. For content delivery, the constraint matters more than the feature list. A schema is an interface; changing it is a migration, not an edit. Teams working on content delivery usually discover this the hard way. Track the denominator as carefully as the numerator.

Consent is ongoing. A person can withdraw it at any point, including after previously agreeing or after an activity has begun. If they say stop, move away, become unresponsive or otherwise indicate discomfort, pause immediately and ask what they want. Do not argue, bargain or demand an explanation.

Schema Markup: A queue smooths spikes but also hides how far behind you are. Schema Markup: Retries without jitter turn a small outage into a large one. Schema Markup: Separating the reads from the writes buys room to change either side.

The interesting number is not the average, it is the 99th percentile. The same reasoning holds for crawl budget. For crawl budget, 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 crawl budget usually discover this the hard way. Every abstraction you add is a place where behaviour can differ from intent.

Consider access control specifically. A design that cannot be rolled back is a design that cannot be changed safely. Access Control: 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 access control as well.

For data pipelines, the constraint matters more than the feature list. If a metric has no owner, it will drift until it causes an incident. Teams working on data pipelines usually discover this the hard way. The cheapest optimisation is usually removing work nobody asked for. Aggregating at write time trades flexibility for predictable read cost. This is most visible in data pipelines.

Periodic jobs should be safe to run twice, because they will be. This is most visible in cost controls. Consider cost controls specifically. You rarely need a new component to fix a boundary problem. Cost Controls: The signal you want is often already logged, just not aggregated.

Rate Limiting: You can often replace a coordination problem with an idempotency key. Rate Limiting: Anything that grows without a bound will eventually hit one. Rate Limiting: Documentation that is not tested tends to describe the previous version.

Related reading