Что такое Prisma Accelerate и какую проблему он решает для serverless/edge-деплоев?
Prisma Accelerate — глобальный connection pool и edge-кэш для Prisma Client, решающий проблему лимитов соединений и высокой латентности в serverless/edge-окружениях. Заменяет прямое соединение с БД на управляемый прокси с TTL-кэшированием результатов.
Что такое Prisma Accelerate
Prisma Accelerate — управляемый сервис от Prisma, предоставляющий два ключевых механизма:
- Глобальный connection pool — прокси-сервер, принимающий тысячи одновременных соединений от serverless-функций и мультиплексирующий их в небольшой пул реальных соединений с PostgreSQL/MySQL.
- Edge cache — встроенный кэш на уровне запросов с настраиваемым TTL и Stale-While-Revalidate стратегией.
Проблема serverless/edge
В serverless-окружениях (Vercel Functions, AWS Lambda, Cloudflare Workers) каждый холодный старт создаёт новое TCP-соединение с базой данных. При нагрузке в 500 rps это означает сотни параллельных соединений, что легко превышает лимит PostgreSQL (обычно 100–200 max_connections). Prisma Accelerate перехватывает соединения через HTTPS/WebSocket и поддерживает постоянный пул на своей стороне.
Настройка
Установите расширение и получите Accelerate URL в консоли platform.prisma.io:
npm install @prisma/extension-accelerate
import { PrismaClient } from '@prisma/client';
import { withAccelerate } from '@prisma/extension-accelerate';
const prisma = new PrismaClient().$extends(withAccelerate());
// DATABASE_URL в .env:
// prisma+postgres://accelerate.prisma-data.net/?api_key=YOUR_KEY
// Запрос с кэшированием на 60 секунд
const users = await prisma.user.findMany({
cacheStrategy: {
ttl: 60, // время жизни кэша в секундах
swr: 30, // stale-while-revalidate окно
},
});
// Запрос без кэша (по умолчанию)
const freshUser = await prisma.user.findUnique({
where: { id: 1 },
});
Как работает cacheStrategy
ttl— запросы к БД не выполняются, если кэш свежее TTL секунд.swr(Stale-While-Revalidate) — отдаёт устаревшие данные, пока фоново обновляет кэш.- Без
cacheStrategyзапрос всегда идёт в БД через connection pool Accelerate.
Cloudflare Workers — отдельный случай
Workers не поддерживают TCP-соединения напрямую. Accelerate использует HTTP/2 поверх HTTPS, что совместимо с Workers runtime. Без Accelerate Prisma в Workers не работает совсем.
// wrangler.toml
// [vars]
// DATABASE_URL = "prisma+postgres://accelerate.prisma-data.net/?api_key=..."
export default {
async fetch(request: Request, env: Env) {
const prisma = new PrismaClient({
datasourceUrl: env.DATABASE_URL,
}).$extends(withAccelerate());
const count = await prisma.post.count({
cacheStrategy: { ttl: 120 },
});
return new Response(String(count));
},
};
Подводные камни
- Accelerate не поддерживает
$transactionс интерактивными транзакциями в edge-окружениях — только batch-транзакции. - Кэш инвалидируется только по TTL, не по событиям записи — мутации не сбрасывают кэш автоматически.
cacheStrategyдоступен только для read-операций (findMany,findUnique,count,aggregate).- Accelerate URL содержит API-ключ — его утечка равносильна утечке доступа к БД через прокси.
- Бесплатный план имеет лимит 6 млн запросов/месяц и ограниченный размер кэша.
- Задержка через Accelerate выше на 5–20 мс по сравнению с прямым соединением в long-running сервисах.
- При использовании Accelerate нельзя передавать нативные PostgreSQL-параметры соединения (SSL-сертификаты, search_path и т.д.) напрямую.
Common mistakes
- Путает Prisma Client API с гарантиями базы данных: индексы, блокировки и isolation level не создаются магически.
- Не объясняет, где в lifecycle находится Prisma Accelerate.
- Не разделяет validation, authorization, business logic и persistence.
- Игнорирует ошибки, лимиты входных данных, observability и тестирование.
What the interviewer is testing
- Может объяснить Prisma Accelerate на примере кода.
- Называет ключевые API: Prisma Accelerate.
- Отделяет ORM/query builder поведение от реального поведения СУБД.
- Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.