
Kad sam prošle godine pregledao Firebase, požalio sam se da nije bio potpuno bez poslužitelja. Node poslužitelj i dalje je bio potreban za uobičajene funkcije, poput slanja e-pošte ili stvaranja sličica.
Firebase Cloud Funkcije najavljene su nekoliko mjeseci kasnije. Usluga je još uvijek u beta verziji, ali koristim je već nekoliko mjeseci u proizvodnji.
Da vidimo kako je.
Što su Firebase Cloud funkcije?
Ako nikada prije niste čuli za funkcije u oblaku, koncept je sasvim jednostavan. Postavite sažetu logiku na poslužitelj u obliku funkcija i neke marljive vilenjake možete čarobno pozvati iz limba da naprave zadatak za vas. Sve to bez brige o infrastrukturi i plaćanja samo za izvršne resurse.
U mnogim slučajevima ova nova paradigma može pojednostaviti pisanje, održavanje i izvođenje pozadinskog koda.
Funkcije Firebase Cloud-a posebno su poput Lego blokova koje možete povezati s bilo kojom Firebase uslugom. Na primjer, funkcija se može pokrenuti kada se slika prenese u Firebase Storage za stvaranje minijature ili možda očisti neke korisničke podatke kada se čvor izbriše u bazi podataka u stvarnom vremenu. Gotovo sve što vas zanima što se dogodi u Firebaseu može pokrenuti funkciju.
Ako to nije dovoljno, HTTP možete koristiti i za pokretanje funkcija pomoću GET, POST itd. Pogledajte ovaj nevjerojatan video o tome kako kombinirati Firebase hosting s funkcijama u oblaku kako biste stvorili cjelovitu Express aplikaciju:
Veliki
Infrastruktura nije ništa lakša od ove
Infrastruktura je potpuno apstraktna od vas, slično kao i ostatak Firebasea. Svaki put kad se funkcija pokrene, novi virtualni poslužitelj oživi, odradi svoj posao i vrati se u neizvjesnost. Magija Google Cloud-a automatski će automatski pokretati vaše funkcije i infrastrukturu u skladu s radnim opterećenjem.
Cijene
Cloud funkcije općenito su vrlo isplative. Teško je uspoređivati cijene davatelja usluga u oblaku, ali mogu reći da su na temelju mog iskustva Firebase Cloud Functions smiješno jeftine. Teško je vjerovati da Google na ovome zarađuje.
Jednostavan za korištenje
Kao i obično s Firebaseom i Googleom, dokumenti su izvrsni i nećete imati mentalnih akrobacija da biste ih dobili . Na Githubu također postoje tone uzoraka za početak. Autonomom implementacije upravlja Firebase CLI, pa je pokretanje zdravog svijeta doslovno:
firebase init functionsfirebase deploy
Mislim da je jednostavnost korištenja Firebasea i Google Cloud-a općenito nevjerojatna, posebno u usporedbi s konkurencijom.
Fleksibilno
Kao što sam već napisao, ove funkcije mogu pokrenuti svakakvi događaji. Kladim se da vam neće nedostajati ideja o tome kako ih integrirati sa svojim Firebase projektom ili čak ostatkom svog hrpe.
Evo nekoliko problema koje smo riješili pomoću Firebase Cloud Functions:
- Stvorite PDF-ove za internetsku uslugu fakturiranja pomoću Phantom.js i potpišite te račune nekom državnom službom
- Povežite Go uslugu s nezavisnim davateljem SOAP-a (ugh)
- Šaljite e-poštu putem HTTP-a s bilo kojeg mjesta u našem stogu
Meh
Hladni startovi
Skalabilnost je sjajna, ali vrijeme izvođenja može jako varirati. Jednostavnoj funkciji hello world za obavljanje posla treba 3 ms ili 100 ms.
functions.https.onRequest((request, response) => { response.send(“Hello from Firebase!”);});

Te su fluktuacije uzrokovane vremenima pokretanja virtualnog poslužitelja. Ako je virtualni poslužitelj koji izvodi vašu funkciju budan, funkcija će se odmah aktivirati. Ali ako se poslužitelj mora podizati iz neizvjesnosti, očito će mu trebati više vremena da počne raditi. U žargonu funkcija oblaka, to se naziva toplim i hladnim započinjanjem.
U praksi se ne možete pouzdati u dosljedna vremena odziva ako ne pohranjujete podatke u predmemoriju, kao što je opisano u prethodnom videozapisu, ili ako ne koristite hakere da biste održali svoje funkcije toplim.
Nažalost, hladni pokreti nezaobilazni su aspekt rada s funkcijama u oblaku (bilo kojeg pružatelja usluga). To ćete morati uzeti u obzir kada odlučite koristiti funkciju oblaka za rješavanje nečega.
Nema planera (cron)
Funkcije u oblaku savršene su za obavljanje zadataka s malim prometom, poput generiranja izvješća ili povremenih sigurnosnih kopija u 2 sata ujutro, ali s Firebaseom ili Google Cloudom ne postoji jednostavan način za pokretanje vaših funkcija na temelju rasporeda.
Firebase tim preporučuje izradu projekta App Engine za organiziranje ovih okidača. Usluga zaista moli za nešto poput Heroku Schedulera.
Samo JavaScript
Ma, dobro sam s JavaScriptom, ali i Azure i AWS podržavaju mnogo više jezika. Ironično je da Google ne podržava Go u svojoj usluzi funkcija u oblaku, ali AWS podržava.
Čvor 6
Opet, konkurencija ide bolje. I funkcije AWS Lambda i Azure već se izvode na čvoru 8. Najveći nedostatak ovdje je povratak na obećanja bez asinkronizacije / čekanja ili konfiguriranja Babela na vašem projektu.
Ružno
Tok rada za razvojne programere
Osim funkcija koje pokreće HTTP, funkcije ne možete pokretati lokalno. Funkcije koje pokreće Firebase usluga moraju se rasporediti u oblak.
To ima mnogo ružnih implikacija:
- Male pogreške na kraju koštaju puno vremena jer novim funkcijama treba nekoliko minuta da počnu raditi.
- Postavljene funkcije nemaju očite verzije. Čini se da su svi zapisnici iste funkcije iz iste verzije. Nikad nije jasno kada nove funkcije zapravo rade, pa je vaš jedini izbor ručno aktivirati funkcije i vidjeti što se događa ™.
- Nema povratka
Okruženja
Povrh prethodnih točaka, upravljanje okruženjima je ... komplicirano.
Možete dodati varijable okruženja u svoje funkcije pomoću Firebase CLI-ja, ali, kao i drugi aspekti Firebasea, ovo je naivan pristup koji se ne prilagođava dobro.
Trebat će vam vjerodajnice za pristup gotovo bilo čemu izvan Firebaseovog pješčanika. Za ostale usluge Google Cloud ove vjerodajnice dolaze u obliku .json
datoteka. Pomnožite to sa svim okruženjima (razvoj, produkcija, uprizorenje) i možete završiti s kraljevskim neredom.
Na kraju sam ručno preimenovao datoteke vjerodajnica prije postavljanja, ili još gore, postavljanja svih vjerodajnica i odabira odgovarajuće tijekom izvođenja. Molim vas, javite mi u komentarima ako ste pronašli način da se to zaobiđe.
Volio bih vidjeti karticu Okoliš u Firebase Consoleu gdje bih mogao lako upravljati tim postavkama za cijeli Firebase projekt. Prebacivanje između okolina trebalo bi biti jednostavno kao firebase use production
.
Zaključak
Osim nekih trenja tijekom razvojne faze, moje iskustvo s Firebase Cloud Functions je pozitivno. Jednom postavljene, ove su stvari pouzdane i zahtijevaju nula održavanja kao što je obećano. Tako da, Firebase je napokon potpuno bez poslužitelja. Ura!
Ako već koristite Firebase, to vam zapravo nije nimalo pametno. Firebase Cloud Functions izvrstan su dodatak vašem projektu, čak i ako je usluga još uvijek u beta verziji.
S druge strane, pošteno je reći da konkurencija ima zreliji proizvod. Ako niste uloženi u Firebase ili Google Cloud, a razmišljate o upotrebi funkcija oblaka u svom stogu, vjerojatno biste trebali razmotriti i mogućnosti AWS-a ili Azure-a.
Da budem potpuno iskren, pomalo me brine što je usluga još uvijek u beta verziji. Prošlo je više od godinu dana otkako je najavljen, a napredak se osjeća bolno spor. Čini se da je konkurencija mnogo predanija svojim proizvodima u oblaku, čak i ako je, prema Diane Greene, izvršnoj direktorici Googleovih tvrtki u oblaku, Google Cloud "najbrže rastući oblak".
To je sve.
Napomena: U prethodnoj verziji ovog članka tvrdio sam da nije moguće napisati testove za funkcije koje nisu HTTP. To je pogrešno, a evo i dokumenata kako to učiniti.