intermediate
R2
S3-совместимое object storage на edge с учётом consistency, модели egress, signed URL и lifecycle.
R2 — S3-совместимое object storage на edge без платы за egress в сервисы Cloudflare — удобно для user uploads, статики и бэкапов через Workers или CDN. AWS SDK или R2 binding в Workers: buckets, keys, опциональный public access через custom domains.
await env.MEDIA.put(`uploads/${userId}/${fileId}`, stream, {
httpMetadata: { contentType: 'image/webp' },
});
const object = await env.MEDIA.get(key);
| Тема | Деталь | |------|--------| | Consistency | Read-after-write для новых keys; list eventual | | Access | Private buckets + signed URLs или Worker gate | | Lifecycle | Правила expiration и tiering | | Egress | Без CF egress; внешний egress тарифицируется |
Связывайте R2 с Workers для auth uploads вместо открытых public buckets.
На интервью: R2 vs S3 по cost model, presigned upload flows, ожидания consistency, раздача через CDN и миграция с S3.
Типовые ошибки: public buckets с предсказуемыми keys; нет проверки размера или типа файла; синхронный list больших prefix; сильная listing consistency для UI pagination.
Компромисс — экономичное edge-adjacent storage против меньшего набора инструментов, чем у S3, и стоимости внешнего egress.
Чеклист:
- Аутентификация upload в Worker или API.
- Lifecycle для temp и log blobs.
- Public assets через CDN с cache headers.
- Ранний тест restore и соглашений по именам keys.