PYTHON

ELEGANCKI. ELASTYCZNY. POTĘŻNY.

JAKIE BĘDZIE ZWIERZĘ
TOTEM TWOJEGO
BACKENDU?

Budujemy solidne systemy backendowe – bezpieczne, skalowalne i zaprojektowane z myślą o wydajności.

RUST

BEZPIECZNY. SZYBKI. WSPÓŁBIEŻNY.

01 Dwa języki. Nie pięć.

Jeden stos, wybrany celowo.

Agencje wielojęzyczne brzmią świetnie w prezentacji. W praktyce oznaczają trzy systemy kompilacji, cztery odmiany wartości null i cmentarzysko usług utrzymywanych tylko w połowie. Wybraliśmy dwa języki, które pokrywają 95% rzeczywistych obciążeń — i staliśmy się w nich bardzo, bardzo dobrzy.

Ścieżka krytyczna · systemy · bezpieczeństwo

Rust

9,6 wewnętrzny wskaźnik dopasowania

Bezpieczne dla pamięci bez modułu czyszczącego pamięć. Wolne od wyścigów o dane już w czasie kompilacji. Najsurowszy recenzent kodu, jakiego kiedykolwiek spotkasz — a gdy już cię przepuści, twoja usługa nie będzie budzić cię w niedzielę.

Kiedy po to sięgamy

  • Systemy płatności i wszystko, co dotyczy pieniędzy lub danych osobowych
  • Popularne bramy API z umowami SLA na poziomie 99,999%
  • Silniki dopasowujące o niskim opóźnieniu, handel, działanie w czasie rzeczywistym
  • Moduły WebAssembly dostarczane do przeglądarki
  • Narzędzia CLI i demony, które muszą uruchamiać się w ciągu milisekund

Kompromisy, których nie będziemy udawać, że nie istnieją

  • Wdrożenie nowych pracowników: ~2–4 tygodnie do osiągnięcia pełnej wydajności
  • Czas kompilacji w ogromnych obszarach roboczych (rozwiązujemy to za pomocą sccache)
  • Ekosystem młodszy niż Java — dojrzały tam, gdzie to ma znaczenie
Spoiwo · dane · ML · prędkość

Python

9,3 wewnętrzny wskaźnik dopasowania

Najszybsza droga od tablicy do działającego systemu. Najbogatszy ekosystem na świecie dla danych, uczenia maszynowego i automatyzacji. Nowoczesny Python — 3.12, uv, ruff, pydantic, FastAPI — to precyzyjny, typowany i wystarczająco szybki język do większości Twoich potrzeb.

Kiedy po to sięgamy

  • Narzędzia wewnętrzne, pulpity nawigacyjne, panele administracyjne
  • ETL, potoki danych, Airflow / Dagster / Prefect
  • ML — szkolenie, obsługa, ocena
  • Automatyzacje i integracje z interfejsami API dostawców
  • Produkty MVP, które trafią na rynek w tym kwartale, a nie w przyszłym roku

Kompromisy, których nie będziemy udawać, że nie istnieją

  • Przepustowość pojedynczego rdzenia jest 20–50 razy wolniejsza niż w Rust
  • Większe zużycie pamięci na żądanie — fatalne dla niektórych obciążeń
  • Typowanie dynamiczne sprawia kłopoty bez ścisłego mypy / pydantic
Rust, gdzie błędy są kosztowne. Python, gdzie opóźnienia w dostawie są kosztowne. Jeden zespół. Zero dogmatów.
02 Od → Do

Co się zmienia podczas migracji.

Wybierz język źródłowy. Obserwuj wpływ przejścia na Rust lub Python. Liczby to mediany z naszych ostatnich 40 projektów migracji — bez marketingowego lansu.

Rust vs Python vs C / C++

Realne wyniki inżynieryjne porównane z wybranym stosem źródłowym.

Rust Python C / C++ baseline

Sygnały na poziomie stosu

Jakościowe czynniki inżynieryjne, które mają znaczenie poza liczbami wydajności.

Szara przerywana linia pokazuje wybrany stos źródłowy. Rust i Python są mierzone względem tej linii bazowej — nie względem siebie nawzajem.

Jak mierzymy te liczby

Mediany z 40 ukończonych migracji w latach 2023–2026. Przepustowość mierzona na warstwie aplikacyjnej (end-to-end p50 pod realistycznym obciążeniem, nie mikrobenchmarki). Pamięć to RSS w stanie ustalonym. Koszt to miesięczne obliczenia na żądanie na AWS/GCP, przy pozostałych parametrach równych. Wyniki poszczególnych projektów się różnią — na żądanie publikujemy też te, które nie poszły zgodnie z planem.

03 Liczby bez gwiazdek

Żądań na sekundę pod prawdziwym obciążeniem.

Identyczne obciążenie — walidacja JSON → zapytanie do Postgres → renderowanie — zmierzone na jednej maszynie AMD Ryzen 7. To nie są mikrobenchmarki. Źródło & metodologia ↓

  1. 1 Rust · Axum
    21,030 req/s
  2. 2 C# .NET · ASP.NET Core
    14,707 req/s
  3. 3 Node.js · Fastify
    9,340 req/s
  4. 4 C++ · Drogon
    7,200 req/s
  5. 5 Go · Gin
    3,546 req/s
  6. 6 Python · FastAPI (Uvicorn)
    1,185 req/s
  7. 7 PHP · Laravel
    299 req/s

Czytaj to właściwie: Python jest blisko dna tego wykresu — i to jest w porządku. Nie używamy FastAPI na gorącej ścieżce. Używamy go tam, gdzie 1 185 żądań/s to już ~10× więcej niż potrzeba, a godziny inżynierów są cenniejsze niż cykle procesora. Metodologia: AMD Ryzen 7, Linux, Docker, jedna instancja, jeden popularny framework na język. Liczby to średnie z wielu przebiegów.

05 Rzeczywisty koszt wadliwego kodu

Ile faktycznie kosztuje Cię awaria.

„Pięć dziewiątek” to nie marketing. Poniżej przedstawiono koszty jednej godziny nieplanowanego przestoju w poszczególnych branżach — wraz ze źródłami. Tworzymy Rust w oparciu o te liczby.

Koszt naliczony od momentu otwarcia tej sekcji
Finanse / opieka zdrowotna 0 ~83 tys. USD/min · 5 mln USD/godz.
Motoryzacja 0 ~38 tys. USD/min · 2,3 mln USD/godz.
Duże przedsiębiorstwa 0 23 750 USD/min · 1,4 mln USD/godz.
Średnie przedsiębiorstwo 0 ~5 tys. USD/min · 300 tys. USD/godz.
Finanse i opieka zdrowotna 5 mln USD+ / godz.

Branże o najwyższej stawce. Platformy transakcyjne, systemy rozliczeniowe i systemy kliniczne mogą przekraczać 5 mln USD na godzinę podczas poważnej awarii — jeszcze przed uwzględnieniem kosztów regulacyjnych lub kosztów postępowania sądowego.

Źródło: Badanie Gartner 2024 dotyczące listy Fortune 500; ITIC 2024 – Godzinowy koszt przestoju.
Produkcja samochodów 2,3 mln USD / godz.

Zatrzymana linia produkcyjna generuje straty rzędu około 640 dolarów na sekundę. Awaria CrowdStrike w lipcu 2024 r. kosztowała samą linię lotniczą Delta Air Lines 380 mln dolarów w ciągu pięciu dni.

Źródło: Podział branżowy Erwood Group 2025; analiza po awarii CrowdStrike przeprowadzona przez Antithesis.
Duże przedsiębiorstwo (średnio) 1,4 mln USD / godz.

Dane BigPanda z 2024 r. dotyczące dużych przedsiębiorstw: 23 750 USD na minutę. ITIC podaje, że 41% dużych przedsiębiorstw traci od 1 mln do 5 mln USD na godzinę przestoju.

Źródło: Badanie BigPanda 2024; 11. coroczny raport ITIC dotyczący godzinowych kosztów przestojów.
Global 2000 (Oxford Economics) 400 mld USD rocznie

Łączny ukryty koszt nieplanowanych przestojów w 2000 największych firmach na świecie, według badania Oxford Economics z 2024 r. — średnio 200 mln USD wpływu na firmę po zsumowaniu przychodów, produktywności i kosztów naprawy.

Źródło: Oxford Economics 2024, „The Hidden Costs of Downtime”.
Średnie i duże przedsiębiorstwa (typowa godzina) 300 000 USD+ / godz.

Badanie ITIC z 2024 r.: ponad 90% średnich i dużych przedsiębiorstw szacuje koszt jednej godziny nieplanowanego przestoju powyżej tej kwoty — nie uwzględniając kar prawnych, cywilnych ani regulacyjnych.

Źródło: Raport ITIC z 2024 r. dotyczący godzinowego kosztu przestoju.
Małe i średnie przedsiębiorstwa (SMB) 25 000–150 000 USD / godz.

Wspólne badanie ITIC / Calyptix z 2025 r. wykazało, że wiele małych i średnich przedsiębiorstw traci tyle na godzinę; Siemens informuje, że straty MŚP dotkniętych przestojami mogą sięgać nawet 150 000 USD/godz. Średni czas trwania przestoju wynosi 87 minut.

Źródło: ITIC + Calyptix 2025; Siemens „True Cost of Downtime” 2024.
06 Wybrane projekty

Trzy projekty. Trzy różne wyzwania.

Zanonimizowane tam, gdzie wymaga tego umowa o zachowaniu poufności, konkretne tam, gdzie wymagają tego wyniki. To są zlecenia, które w pierwszej kolejności pokazalibyśmy nabywcy rozwiązań technicznych.

  1. Przypadek 01 Python Baza danych Kryptowaluty RODO

    Magazyn danych fintech: 4× mniejszy, 5,5× szybszy, zgodny z globalnymi standardami.

    Klient posiadał klaster Postgres o wielkości 1,8 TB, przeładowany przestarzałymi kolumnami, nieaktywnymi indeksami i zaszyfrowanymi w linii obiektami BLOB, który rozrósł się przez siedem lat. Kryptografia działała na przestarzałej bibliotece, na którą zwrócono uwagę w trzech oddzielnych audytach. Ryzyko naruszenia przepisów było realne; audytorzy krążyli wokół.

    Co zrobiliśmy

    • Pełny audyt schematu i wykorzystania, usunięcie nieużywanych kolumn i indeksów, wprowadzenie odpowiedniego partycjonowania.
    • Migracja potoku kryptograficznego ze starszej biblioteki do nowoczesnego, audytowanego stosu AEAD z rotacją kluczy.
    • Konwersja szyfrowania BLOB-inline na szyfrowanie typu referenced envelope + dedykowany KMS.
    • Dostosowanie procesów przechowywania danych i dostępu użytkowników do przepisów RODO, CCPA i APPI.
    Wynik

    Te same dane, jedna czwarta kosztów przechowywania, 5,5-krotny wzrost przepustowości i czyste konto przed kolejnym organem regulacyjnym, który zapuka do naszych drzwi.

  2. Przypadek 02 Rust C++ → Rust Bezpieczeństwo Przechowywanie

    Usługa napisana w C++ przepisana w Rust: ponad 100 błędów klasy CVE usuniętych w ciągu 9 tygodni.

    Usługa przetwarzania plików dla użytkowników w C++, ulegająca awarii co 4–5 dni i za każdym razem łatana na miejscu. Nasz audyt ujawnił ponad 100 rzeczywistych błędów: ścieżki odmowy usługi , przepełnienia bufora, nieograniczone przetwarzanie żądań. Błędy 503 w godzinach szczytu były cotygodniowym rytuałem. Po stronie pamięci masowej pliki przesyłane przez użytkowników zgromadziły się w morzu duplikatów , które pochłaniały miejsce w zasobniku.

    Co zrobiliśmy

    • Całkowite przepisanie w Rust (axum + tokio) ze ścisłą walidacją danych wejściowych i ograniczonymi limitami zasobów.
    • Testy oparte na właściwościach + cargo-fuzz dla każdego parsera i granicy formatu transmisji.
    • Warstwa pamięci masowej adresowanej według treści z deduplikacją w momencie zapisu.
    • Wdrażanie metodą blue-green w ramach 4-godzinnego okna integracyjnego, bez przestojów.
    Wynik

    Usługa przeszła od stanu „niestabilnej i co tydzień łatanie” do „przestaliśmy patrzeć na pager”. Koszty pamięci masowej spadły dzięki deduplikacji, zgłoszenia do pomocy technicznej dotyczące błędów i kodów 503 wygasły, a przepisanie zwróciło się w ciągu kwartału.

  3. Przypadek 03 Rust Python eBPF / XDP CRM · 4 tys. użytkowników

    Przebudowa korporacyjnego systemu CRM: 18 serwerów → 5, redukcja kosztów o ponad 60%.

    Wewnętrzny system CRM obsługujący ponad 4000 użytkowników w obszarach IAM, SOC, scentralizowanego logowania, czatu, udostępniania plików, VoIP oraz danych szyfrowanych od początku do końca. Osiemnaście serwerów, Cloudflare na dodatku oraz rachunek za chmurę, który rósł niezależnie od liczby pracowników. Przebudowaliśmy ścieżkę gorącą w Rust, zachowaliśmy Python na warstwie integracji i raportowania oraz umieściliśmy filtr eBPF/XDP bezpośrednio przed wejściem.

    Co zrobiliśmy

    • Usługi Rust do uwierzytelniania (IAM), komunikacji w czasie rzeczywistym, sygnalizacji VoIP, transferu plików.
    • Python dla interfejsów administracyjnych, raportowania, korelacji zdarzeń SOC, integracji z API dostawców.
    • Filtrowanie botów i nadużyć eBPF/XDP w jądrze — zastąpiło Cloudflare w tym zakresie.
    • Przeprojektowany potok logowania strukturalnego w oparciu o schemat zero-copy.
    Wynik

    O trzynaście serwerów mniej, brak pozycji dotyczącej Cloudflare, zespół SOC widzi wyraźniejszy sygnał w potoku logowania, a dyrektor finansowy przestał zadawać niewygodne pytania dotyczące budżetu na infrastrukturę.

07 Jak faktycznie pracujemy

Zmień ustawienia. Obserwuj, jak zmienia się plan.

Każdy projekt stanowi kompromis między szybkością, kosztem i niezawodnością. Poniższa pięciostopniowa wycena jest dostosowana do median branżowych (analiza 2–6 tygodni, architektura 1–4 tygodnie, wdrożenie 4–20 tygodni, wzmocnienie bezpieczeństwa 2–8 tygodni, przekazanie 1–2 tygodnie — zgodnie z raportów z lat 2024–2026 firm NIX United, Agilie, SOLTECH, OTG Lab). Przesuń suwaki; plan zostanie na bieżąco zaktualizowany.

01

Faza odkrywcza

3 tygodnie

Przeczytaj swój kod, przeprowadź wywiad z zespołem operacyjnym, sporządź listę niewiadomych, wybierz język dla każdego komponentu.

  • Wywiady z ekspertami branżowymi i audyt kodu
  • Rejestr ryzyka i cele SLA
  • Decyzja dotycząca języka programowania dla poszczególnych usług
02

Architektura

2 tygodnie

Umowy przed kodem. OpenAPI / protobuf, modele danych, topologia wdrożenia, szkielety runbooków.

  • Zapytania ofertowe dla każdej umowy publicznej
  • Model danych + plan migracji
  • Podstawa „infrastruktura jako kod”
03

Wdrożenie

8 tygodni

Małe PR-y, zielone CI od pierwszego dnia, wdrożenia przy każdym scaleniu, przegląd przez drugiego seniora.

  • Rust: axum · tonic · sqlx
  • Python: FastAPI · Pydantic · SQLAlchemy
  • Cotygodniowe prezentacje + dziennik zmian
04

Zabezpieczanie

3 tygodnie

Fuzzing, testy oparte na właściwościach, testy obciążeniowe przy realistycznym ruchu, model zagrożeń.

  • cargo-fuzz · proptest · hypothesis
  • Testy obciążeniowe k6 powiązane z SLO
  • Przegląd bezpieczeństwa i audyt zależności
05

Przekazanie

1 tydzień

Runbooki, rotacja dyżurów, procedury ADR oraz zespół, który już raz wdrożył to rozwiązanie.

  • Podręczniki operacyjne + matryca dyżurów
  • Dziennik ADR i schematy architektury
  • 30-dniowe wsparcie po uruchomieniu
08 Ten sam problem, dwa języki

Jak ten sam punkt końcowy wygląda w każdym z nich.

Pobierz użytkownika, sprawdź poprawność danych, zapisz w Postgresie, zwróć JSON. Przełączaj się między językami — oba są prawdziwym kodem, który faktycznie byśmy wdrożyli.

SQL_CREATE_USER = "insert into users(email,name) values(lower($1),$2) returning id,email,name"
Name = Annotated[str, StringConstraints(strip_whitespace=True, min_length=1, max_length=120)]

class UserIn(BaseModel):
    email: EmailStr
    name: Name

class UserOut(UserIn):
    id: int

@router.post("/users", response_model=UserOut, status_code=201)
async def create_user(u: UserIn) -> UserOut:
    try:
        row = await pool.fetchrow(SQL_CREATE_USER, str(u.email), u.name)
   except UniqueViolationError as exc:
        raise HTTPException(status_code=409, detail="adres e-mail już istnieje") from exc
    if row is None:
        raise HTTPException(status_code=500, detail="wstawianie nie powiodło się")
    return UserOut.model_validate(dict(row))
#[derive(Deserialize, Validate)]
#[serde(deny_unknown_fields)]
pub struct UserIn {
    #[validate(email)]
    pub email: String,
    #[validate(custom(function = "valid_name"))]
    pub name: String,
}

pub async fn create_user(
    State(pool): State<PgPool>,
    ValidatedJson(u): ValidatedJson<UserIn>,
) -> Result<(StatusCode, Json<UserOut>), ApiError> {
   let user = sqlx::query_as!(UserOut,
        "insert into users(email,name) values(lower($1),$2) returning id,email,name",
        u.email.as_str(),
        u.name.trim(),
    )
    .fetch_one(&pool)
    .await
    .map_err(ApiError::from_db)?;

    Ok((StatusCode::CREATED, Json(user)))
}
Liczba linii kodu
16 22
Przepustowość
1 185 żądań/s 21 030 żądań/s
Opóźnienie p50
21,0 ms 1,6 ms
Pamięć RAM w stanie spoczynku
41,2 MB 8,5 MB
Odpowiadamy w ciągu 1 dnia roboczego. Bez żartów.

Przeczytałeś całą stronę.
Zbudujmy to.

Powiedz nam, co jest nie tak z Twoim stosem technologicznym lub co chcesz zbudować od podstaw. Otrzymasz prawdziwą opinię inżynieryjną — a nie prezentację sprzedażową.

  • Żadnych młodszych inżynierów. Żadnego offshoringu.
  • Opcje stałej ceny za określony zakres prac.
  • Umowa o zachowaniu poufności podpisana, zanim o cokolwiek zapytamy.