Ваш код живёт
там, где ваши пользователи
Tessera раскладывает функцию по 312 точкам присутствия за восемь секунд. Холодный старт — 3 миллисекунды, оплата — за реальное время выполнения. Регионы, автоскейл и балансировка остаются нашей проблемой.
Три шага от файла до сети из 312 точек
Ни Dockerfile, ни выбора инстанса, ни настройки регионов. Функция — единица деплоя.
Пишете обычную функцию
JavaScript или TypeScript, стандартные Web API: fetch, Request, Response, WebCrypto, стримы. Своего SDK у нас нет — и это осознанно.
Одна команда деплоя
tessera deploy собирает бандл, проверяет лимиты и секреты, подписывает артефакт и рассылает его по сети. Средний деплой — 8,2 секунды.
Запрос попадает в ближайшую точку
Anycast выбирает точку присутствия по сети, а не по геобазе. Изолят поднимается за 3 мс и отвечает без прыжка в центральный регион.
Мозаика из мелких быстрых кусочков
Tessera собрана из одинаковых плиток: каждая точка присутствия умеет всё то же, что и остальные. Нет «главного» региона, который однажды упадёт.
Холодный старт, который не успеваешь заметить
Изолят V8 не поднимает ОС, файловую систему и сетевой стек — только контекст исполнения. Отсюда разница на два порядка.
312 точек, 87 стран
Каждая плитка — точка присутствия с полным рантаймом и локальным KV.
KV прямо на границе
Ключ-значение рядом с изолятом: чтение за 0,4 мс, репликация в фоне.
Логи без задержки
Поток событий из всех точек в одном месте — с фильтром по региону.
{"pop":"dme1","ms":11,"status":200}
{"pop":"fra1","ms":19,"status":200}
{"pop":"sin3","ms":38,"status":304}Оплата по факту
Считаем миллисекунды исполнения, а не время простоя контейнера. Простой стоит ноль.
1 млн запросов × 8 мс ≈ 26 ₽
Никакого фреймворка. Просто функция.
Экспортируете handler — получаете HTTP-эндпоинт. Всё остальное (маршруты, кеш, KV, cron) — обычные функции и объекты, а не магия конфигов.
· это рабочий сервис
export async function handler(request, env) {
const { country, pop } = request.geo;
if (country === 'RU') {
return Response.json({
currency: 'RUB',
warehouse: 'msk-1',
servedBy: pop
});
}
return Response.json({ currency: 'EUR', warehouse: 'fra-2' });
}
import { router } from 'tessera:router';
export const handler = router()
.get('/health', () => new Response('ok'))
.get('/api/price/:sku', async (req, env) => {
const price = await env.KV.get(`price:${req.params.sku}`);
return price
? Response.json(JSON.parse(price))
: new Response('not found', { status: 404 });
})
.post('/api/order', order)
.fallback(() => new Response('no route', { status: 404 }));
export async function handler(request, env, ctx) {
const key = 'rates:' + new Date().toISOString().slice(0, 13);
const hit = await env.KV.get(key, 'json');
if (hit) return Response.json(hit, { headers: { 'x-cache': 'HIT' } });
const fresh = await fetch('https://rates.internal/latest').then(r => r.json());
// запись не блокирует ответ пользователю
ctx.waitUntil(env.KV.put(key, JSON.stringify(fresh), { ttl: 3600 }));
return Response.json(fresh, { headers: { 'x-cache': 'MISS' } });
}
$ tessera deploy --prod
$ curl -s https://shop-api.tessera.dev/api/price/TS-2049 \
-H "authorization: Bearer tsr_live_••••••"
# x-tessera-pop: dme1
# x-tessera-exec: 4.1ms
# {"sku":"TS-2049","price":12490,"currency":"RUB"}
↑ показатели настоящие
Что говорят команды
Все компании и люди ниже — выдуманные. Как и цитаты.
Переехали с контейнеров за две недели. Инфраструктурный чат опустел — обсуждать стало нечего
Раньше сборка ждала CI восемь минут. Теперь деплой быстрее, чем я успеваю переключиться в браузер
Счёт за январь — 3 400 ₽. До этого мы платили за простаивающие ноды в четырёх регионах
Разверните первую функцию за восемь секунд
Хобби-тариф: 3 млн запросов в месяц, 5 функций, все 312 точек присутствия. Карта не нужна, лимиты не сюрприз.