Przejdź do treści
HexaTransfer
Wróć do bloga
Zagadnienia techniczne

Serverless Prześlij plików: Architecture i Design

Zbuduj serverless plik transfer systems z AWS Lambda, Azure Functions, or Google Cloud Functions. Cost-effective i auto-scaling designs.

Serverless system transferu plików pozwala uruchomić serwis produkcyjny bez zarządzania serwerami, płacąc tylko za wolumen żądań i czas wykonania funkcji. AWS Lambda, Azure Functions i Google Cloud Functions obsługują obliczenia; S3, Blob Storage lub GCS obsługują pliki; a presigned URL pozwalają klientom uploadować bezpośrednio do storage, więc Lambda nigdy nie dotyka bajtów. Dla usług transferu o niskim do średniego ruchu miesięczny rachunek może utrzymywać się poniżej $50, automatycznie skalując do obsługi skoków. Poniżej przejrzysty projekt unikający typowych pułapek serverless — pułapek, które CSIRT NASK wymienia wśród wektorów kosztowych ataków na infrastrukturę chmurową.

Dlaczego serverless dobrze pasuje do transferu plików

Transfer plików jest wybuchowy. Użytkownik trafia na upload, przez kilka minut pojawia się seria żądań, potem cisza. Utrzymywanie całodobowej floty maszyn wirtualnych dla tego wzorca marnuje pieniądze. Lambda startuje na żądanie, nalicza za 100 ms wykonania i skaluje do tysięcy równoczesnych wywołań bez ręcznej konfiguracji. Co kluczowe, rzeczywiste bajty pliku idą bezpośrednio od klienta do S3 przez presigned URL, więc Lambda nie obsługuje ładunku 10 GB — obsługuje tylko metadane i sprawdzenia autoryzacji. To utrzymuje czas wykonania Lambda poniżej 500 ms i koszty znikome nawet przy milionach transferów miesięcznie.

Podstawowe komponenty i ich odpowiedzialności

Minimalna architektura serverless: API Gateway (lub CloudFront Functions dla auth na krawędzi) przyjmuje żądania HTTPS; Lambda Functions do inicjalizacji uploadu, CRUD metadanych i autoryzacji pobierania; S3 jako faktyczny magazyn plików; DynamoDB lub RDS Aurora Serverless v2 dla metadanych transferów; SES lub SNS do wysyłania powiadomień e-mail; EventBridge do routingu zdarzeń asynchronicznych. Dziewięć usług, zero serwerów. Terraform lub AWS CDK provisionuje stos. Wynikiem jest usługa transferu z auto-skalowaniem, wysoką dostępnością między strefami AZ i brakiem aktualizacji systemu operacyjnego do martwienia się.

Bezpośrednie uploady do S3 przez presigned URL

Wzorzec czyniący serverless ekonomicznym: klient wywołuje Lambda, Lambda generuje presigned POST lub PUT URL ważny przez 15 minut, Lambda zwraca URL, klient uploaduje bezpośrednio do S3. Lambda działała przez ~100 ms i naliczyła może $0,0000002. Upload 10 GB idzie przez pasmo S3, naliczane po standardowych stawkach niezależnie od tego, czy Lambda jest zaangażowana. Dla multipart uploadów, Lambda generuje presigned URL dla każdej części, klient uploaduje części równolegle, a końcowa Lambda kończy upload przez CompleteMultipartUpload. Architektura jest praktycznie darmowa dla małych serwisów.

Post-processing sterowany zdarzeniami

Gdy S3 kończy upload obiektu, uruchamia zdarzenie. S3 Event Notifications lub EventBridge kieruje do funkcji Lambda dla post-processingu: uruchomienie ClamAV przez Lambda container image (aktualizacja bazy AV to trudna część; gotowe kontenery pomagają), generowanie miniatur przez ImageMagick lub Ghostscript w warstwach Lambda, aktualizacja statusu transferu w DynamoDB, wysyłanie e-maili z powiadomieniami przez SES. Każdy krok działa tylko gdy jest potrzebny, nie w pętli pollingu. Kolejki dead-letter wyłapują awarie, by nie znikały po cichu.

Cold starty i jak je łagodzić

Cold starty Lambda to stały zarzut. Node.js Lambda typowo zimno startuje w 200 do 500 ms; Python podobnie; Java lub .NET Lambda może zająć 1 do 3 sekund. Dla usługi transferu, inicjalizacja uploadu widoczna dla użytkownika powinna unikać cold startów. Provisioned Concurrency utrzymuje ciepłą pulę za $0,0000041667 za GB-sekundę, zazwyczaj tanim kosztem. Pisanie gorącościeżkowych funkcji w Go lub Rust z minimalnymi zależnościami rutynowo cold startuje poniżej 100 ms. Dla Lambda w tle (skanowanie po uploadzie, powiadomienia), cold starty zazwyczaj nie mają znaczenia, bo praca jest asynchroniczna.

Wybory bazy danych przy skali serverless

Aurora Serverless v2 skaluje obliczenia od 0,5 do 128 ACU na żądanie, co czyni go opłacalnym dla wybuchowych obciążeń. DynamoDB On-Demand nalicza za żądanie, idealny gdy ruch jest nieprzewidywalny. RDS Proxy pomaga przy wyczerpaniu połączeń Lambda-do-RDS, ponieważ każda instancja Lambda otwierająca połączenie Postgres może przeciążyć małą instancję RDS podczas skoków ruchu. Dla prostych metadanych transferu, DynamoDB jest często prostszy: single-table design z kluczem partycji transfer_id obsługuje cały CRUD w jednocyfrowych milisekundach. Koszt to ułamek centa za 1 000 odczytów.

API Gateway, HTTP API i opcje krawędzi

AWS oferuje trzy frontowe drzwi API. REST API Gateway jest bogatszy w funkcje, ale droższy po $3,50 za milion żądań. HTTP API jest nowszy, tańszy po $1,00 za milion i wystarczający dla większości Lambda-backed API. CloudFront Functions i Lambda@Edge działają na krawędzi dla ultra-niskiego opóźnienia auth lub logiki redirect. Dla usługi transferu plików, HTTP API w najbliższym regionie użytkownika plus CloudFront dla cachowania zasobów balansuje koszt i wydajność. Azure API Management i API Gateway Google oferują analogiczne opcje w podobnych punktach cenowych.

Wzorce autentykacji

Tokeny JWT wydane przez Cognito, Auth0 lub własny Lambda authorizer walidują przy każdym żądaniu. API Gateway obsługuje authorizers JWT natywnie, weryfikując tokeny zanim Lambda uruchomi, więc nieprawidłowe żądania nie ponoszą kosztów Lambda. Dla anonimowego udostępniania plików (model HexaTransfer), losowy 256-bitowy token osadzony w fragmencie URL służy zarówno jako identyfikator, jak i klucz deszyfrowania; Lambda waliduje tylko identyfikator, podczas gdy klucz pozostaje po stronie klienta. Ograniczanie szybkości przez plany użycia API Gateway zapobiega nadużyciom, z 1 000 żądaniami na sekundę typowymi dla darmowych tierów.

Struktura kosztów i niespodzianki przy skalowaniu

Ekonomia serverless odwraca tradycyjny obraz. Niski ruch to praktycznie zero; wysoki ruch może zaskoczyć. Przy 10 milionach transferów miesięcznie typowe koszty: wywołania Lambda $2 do $20, API Gateway $10 do $35, DynamoDB $20 do $100, storage S3 znacznie zmienny z retencją, egress S3 często największa pozycja chyba że CDN frontuje pobierania. Uwaga na pętle: błąd powodujący nieskończone ponowne próby Lambda na throttle DynamoDB może wygenerować $500 w godzinę. Ustaw alerty rozliczeniowe CloudWatch i limity współbieżności dla każdej Lambda, by ograniczyć zasięg katastrofy.

Monitorowanie i debugowanie systemów serverless

CloudWatch Logs przechwytuje każde wywołanie Lambda; strukturalne logowanie w JSON z ID korelacji sprawia, że wyszukiwanie jest trywialne. X-Ray śledzi ścieżkę Lambda-do-DynamoDB-do-S3 z czasami. Lambda Insights dostarcza metryki pamięci i CPU na funkcję. Kluczowe metryki do śledzenia: opóźnienie p99 na funkcję, wskaźnik błędów, wskaźnik throttle i procent cold startów. Gdy serverless staje się złym wyborem: przy konsekwentnie wysokim wolumenie transferów (miliony trwających równoczesnych uploadów, całodobowe nasycenie), dedykowana flota EC2 lub Fargate może być tańsza. Jeśli wymagana jest zgodność z izolowanym wdrożeniem (air-gapped), serverless nie wchodzi w grę.

Wypróbuj bezpłatnie na hexatransfer.com — bez konta, maksymalnie 10 GB.

Wysyłaj duże pliki bezpiecznie z szyfrowaniem end-to-end

Przesyłaj pliki do 10 GB za darmo z szyfrowaniem end-to-end. Bez rejestracji. Twoje pliki są szyfrowane w przeglądarce przed przesłaniem — nikt inny nie może ich odczytać.

Wyślij plik