Obciążenie etykiet wysyłkowych w jednym akapicie
Każde zamówienie tworzy jeden PDF, każdy PDF jest drukowany raz na drukarce termicznej, a tryb awarii przy zbyt wolnym systemie nie brzmi “strona ładuje się powoli” — tylko “odbiór w magazynie czeka za API renderującym etykiety”. Wysyłka to obszar, w którym opóźnienie p99 jest kluczową metryką produktu, deterministyczny wynik ma znaczenie, bo ponowne wydruki są rutyną, a jakość kodów kreskowych — mierzona tolerancjami GS1 X-dimension, a nie pikselami — decyduje, czy skanery odczytają etykietę za pierwszym razem.
Stosy PDF oparte na headless browserach mają problem z tymi trzema wymaganiami naraz: koszt cold start narasta w szczycie, rastrowe kody kreskowe tracą jakość na małych etykietach termicznych, a rasteryzacja fontów zmienia się między wersjami Chromium, więc “bajtowo identyczny ponowny wydruk” staje się niemożliwy.
Dlaczego gPdf pasuje
Termiczna etykieta 4×6 jest mała (576 × 864 piksele przy 203 dpi), ma niewiele elementów (bloki tekstu + 1-2 kody kreskowe + opcjonalne logo przewoźnika) i duży wolumen (średniej wielkości 3PL renderuje 50 000-500 000 dziennie). To właśnie obciążenie, dla którego zbudowano gPdf. Silnik renderowania:
- Kompiluje układ raz — współrzędne strony, kaskady fontów i geometria kodów kreskowych są rozwiązywane w czasie żądania, nie przez silnik układu przeglądarki.
- Wektoryzuje każdy kod kreskowy — moduły są rysowane bezpośrednio w strumieniu PDF, więc GS1-128 o szerokości 30 mm czyta się czysto przy 203 dpi albo 600 dpi bez logiki rasteryzacji zależnej od DPI po Twojej stronie.
- Osadza NotoSans CJK + Latin — te same dane wejściowe poprawnie renderują chińską nazwę przewoźnika bez dostarczania fontów do kontenera renderującego.
p99 pozostaje płaskie na poziomie 8 ms w naszym obciążeniu referencyjnym (1000 wywołań powyższej próbki w EU-WEST), niezależnie od tego, czy pojedynczy izolat wyrenderował jedną etykietę, czy 10 000 etykiet.
Matematyka wolumenu i kosztu
Typowy średniej wielkości 3PL działa w okolicach 50 000 etykiet dziennie, czyli około 1,5 mln miesięcznie. W planie Basic (5 USD/mies. za 100 000 stron, 0,00005 USD za stronę nadwyżki) oznacza to:
1,5 mln stron × 0,00005 USD = 75,00 USD nadwyżki
+ podstawa planu Basic = 5,00 USD
─────────────────────────────────────
razem = 80,00 USD / mies.
To samo obciążenie na Puppeteer-on-Lambda mieści się zwykle w przedziale 200-400 USD/mies. przy typowych ustawieniach współbieżności Lambda, zanim doliczysz koszt cold start w szczycie.
Black Friday: przykład roboczy
Szczytowe spiętrzenie to obciążenie, w którym renderowanie na edge najszybciej pokazuje swoją wartość. Klient retailowy osiągający 200% normalnego wolumenu etykiet w pierwszej godzinie Black Friday — powiedzmy 100 000 etykiet w 60 minut, średnio 1700 etykiet/minutę i piki 5000/minutę — kończy pracę w ramach jednej puli regionu Cloudflare Workers bez kosztu cold start. To samo obciążenie na ciepłej puli Puppeteer dobranej do średniego ruchu powoduje cold start 1,5-2,5 s na kontenerach uruchamianych dla burstów, a stanowisko odbioru w magazynie odczuwa każdy taki przypadek.
Gdzie spojrzeć dalej
- JSON Render API opisuje każde pole użyte w powyższej próbce etykiety.
- Głębsze omówienie geometrii kodów kreskowych znajdziesz w artykule o precyzji GS1-128.
- Zastępujesz pipeline etykiet oparty na iText? Zobacz gPdf kontra iText dla etykiet logistycznych albo pełne rozbicie TCO etykiet wysyłkowych przy 100K → 100M stron/mies..
- Aby porównać ze stosem opartym na Chromium, zobacz gPdf kontra Puppeteer.