Workload транспортных этикеток в одном абзаце
Каждый заказ создает один PDF, каждый PDF один раз печатается на thermal printer, а отказ при медленной генерации — это не «страница грузится медленно», а «складская отгрузка стоит в очереди за вашим label-rendering API». В доставке p99 latency — главная продуктовая метрика. Deterministic output важен, потому что reprints на складе обычное дело. А качество штрихкода — измеренное GS1 X-dimension tolerances, а не пикселями — решает, прочитает ли scanner этикетку с первого прохода.
PDF-стекам на headless browser трудно одновременно закрыть все три фактора: cold-start cost накапливается при spike, raster barcodes теряют качество на маленьких thermal labels, а font rasterisation дрейфует между версиями Chromium, поэтому byte-identical reprint становится невозможным.
Почему gPdf подходит
4×6 thermal label невелика (576 × 864 pixels при 203 dpi), содержит мало элементов (text blocks + 1–2 barcodes + optional carrier logo) и генерируется в большом объеме. Средний 3PL рендерит 50 000–500 000 таких этикеток в день. Это именно тот workload, под который сделан gPdf. Renderer:
- Компилирует layout один раз — page coordinates, font cascades и barcode geometry resolve at request time, а не через browser layout engine.
- Векторизует каждый barcode — modules рисуются прямо в PDF stream, поэтому 30 mm-wide GS1-128 читается cleanly при 203 dpi или 600 dpi без DPI-aware rasterisation logic на вашей стороне.
- Встраивает NotoSans CJK + Latin — один и тот же payload корректно рендерит Chinese carrier-name без provisioned fonts на render container.
p99 остается ровным — 8 ms на нашем reference workload (1 000 invocations примерa выше в EU-WEST), независимо от того, отрендерил один isolate одну этикетку или 10 000 этикеток.
Расчет объема и стоимости
Типичный средний 3PL работает примерно с 50 000 labels/day, то есть около 1,5 млн labels/month. На Basic plan (5 USD/month за 100 000 pages, 0,00005 USD за страницу overage) получается:
1,5 млн страниц × 0,00005 USD = 75,00 USD overage
+ Basic plan base = 5,00 USD
──────────────────────────────────────────
total = 80,00 USD/month
Тот же workload на Puppeteer-on-Lambda при типичных Lambda concurrency settings попадает в диапазон 200–400 USD/month еще до учета cold-start tax во время peak.
Black Friday: расчетный пример
Пиковый всплеск — это workload, где edge rendering особенно явно окупается. Retail customer, который в первый час Black Friday выходит на 200% обычного объема этикеток — например, 100 000 labels за 60 minutes, в среднем 1,7K labels/minute и до 5K/minute в burst, — укладывается в один Cloudflare Workers region pool без cold-start tax. Тот же workload на Puppeteer warm pool, рассчитанном под average traffic, дает 1,5–2,5 s cold-starts на burst-spawned containers, и пункт отгрузки на складе чувствует каждую такую задержку.
Что читать дальше
- JSON Render API описывает каждое поле из примера label выше.
- Более глубокая история о barcode geometry — в статье о точности GS1-128.
- Заменяете iText label pipeline? Смотрите gPdf vs iText для logistics labels или полный разбор TCO shipping labels при 100K → 100M страниц/месяц.
- Для сравнения с Chromium-based stack смотрите gPdf vs Puppeteer.