Skip to content
Asko Kauppi edited this page May 24, 2021 · 2 revisions

Hacklab Helsinki #web-kehitys kurssi 21.4.2021 -

4. Back-end

Kuva: 1972 AMC Javelin SST burgundy, Christopher Ziemnowicz, public domain

Taustajärjestelmän tehtävät

  • Tietokannan tausta-ajot
  • Yhteydet toisiin järjestelmiin
  • Tiedostojen (kuvat, videot...) talletus

Triggerinä:

  • tiedon muutos
  • käyttäjän sisäänkirjautuminen
  • ajan kuluminen (ajastetut toiminnot)

Web-sovelluksen taustajärjestelmät ovat yhtä kiintoisia kuin teatteri esiripun takana. Eli ovat. Tai ei. Mutta ne pitää olla olemassa, jotta "show can go on"...

Cloud Functions

Tuotesivut.

💫 Scalable pay-as-you-go functions as a service (FaaS) to run your code with zero server management.

Tuote pitää kyllä lupauksensa. Se vain toimii.

Hinnoittelu:

  • vaatii Blaze-tason
0..2 milj. kutsua/kk ilmainen
+ milj. kutsua/kk $ 0,40

Lisäksi kustannuksia tulee:

  • CPU-käytöstä
  • verkkoliikenteestä
  • funktioiden valmiudessa pitämisestä (deploying)

Tarkemmin näistä on laskelmia osoitteessa https://cloud.google.com/functions/pricing.

Huomoioitavaa:

Funktioiden kylmäkäynnistys voi "serverless"-maailmassa kestää jonkin aikaa (15-20s).

Funktiot kirjoitetaan Node.js -skripteinä.

Kustannukset ovat "tier 2" -tasolla korkeammat kuin "tier 1":llä.

Ilmaispaketit eivät välttämättä päde esim. Euroopan konesaleihin, vain us-central1:een.

Katsotaan koodiin

Vilkaistaan packages/backend/functions/index.js.

.https.onCall

Helpompi tapa tehdä sovellus/tausta-rajapintoja.

Muuten kuin REST API. Vaatii, että yhteys ei katkea (tai sinun pitää itse koodata vikasietoisuus client-päähän).

.firestore.document(...).onWrite

Kutsutaan, kun joku muutti dokumenttia.

.pubsub.schedule(...).onRun

Ajastus.

Lisäksi...

  • Autentikointi, mutta vain kun uusi käyttäjätili luodaan. Ei käyttäjän kirjautuessa tai hänen käyttäjätietojen (nimi, kuva) muuttuessa.
  • GMail jne. integraatioita (GMail -> Pub/Sub -> Cloud Functions)

Trendeinä näyttää olevan:

  • Firebase sulautuu enemmän osaksi Googlen taustajärjestelmiä (esim. Pub/Sub:n merkitys kasvaa)
  • Konenäön, kielen ymmärtämisen jne. käsittely tätä kautta (ks. "tuotesivut")

Vaihtoehtoja

Cloud Functions ja Firebase web-frontti ovat naimisissa oikeastaan vain välillisesti. Jos haluaa tehdä Firestoren taustamuutoksia, se on tällä kätevää, mutta onnistuu kyllä muillakin pilvialustoilla.

Googlen GCP-konsolista haetaan "service account"-tunnus ja sille salainen avain, joka viedään halutun pilvipalvelun salaisuuksiin. No problem.

Tässä on joitain Docker-image:jen ympärille rakennettuja pilvialustoja:

  • AWS Lambda (container-tuki julkistettu helmik. 2021)
  • ...

Miksi uusien tulokkaiden tulo serverless-markkinoille voi olla vaikeaa?

Oma palvelin??

Firebase web-frontin taustalla voi toki pitää myös omaa (Rasperry Pi) -palvelinta.

Mitä hyötyä tästä olisi?

Oman palvelimen perustana voisi olla firebase-admin Node-kirjasto, aivan kuten Cloud Function:llakin. Muita vaihtoehtoja: Python, Java, Go. lähde

Cloud Firestore

Tuotesivu.

Kurssin pitäjällä tämä on se syy pitää Firebasesta. Kaikki muu tulee sen ympärillä, että "tilasta" saadaan koppi. - aito kehu

Vaihtoehtoja

  • supabase

    The Open Source Firebase Alternative

    Käyttää PostgreSQL:ää

    Kaikki avointa koodia

    Matkansa alussa. 🧳

    Hinnoittelu on ainakin toistaiseksi erilainen - ennakoitavampi - kuin Firestore:n vastaava. Kuukausipaketti. Hinnasto.

Mihin suuntaan itse toivoisit, että serverless-tietokannat kehittyvät? Huolia / toiveita?

Vertailukriteerejä:

1-5 ⭐️
dokumentointi
toimintavarmuus
hinta
käytön helppous
seurantatyökalut
koodin laatu
koodin avoimuus
tiedon siirrettävyys

Cloud Storage

Tuotesivut.

Tuttu "ämpäripalvelu" (bucket) datan tallettamiseen (kuvat, videot, muut isot tiedostot..).

Enemmän Google Cloud:in juttu, mutta näkyy Firebase:n konsolissa ja emulaattori tukee (viimein) tätä.

Vaihtoehtoja

  • AWS S3

Deklaratiivinen määrittely 🔬

Kaikille yllä oleville on yksi yhteinen asia, johon kannattaa tarkentaa.

Taustajärjestelmien toiminta, pääsyn hallinta ja konfiguraatio on määritelty versionhallinnassa.

Tämä tarkoittaa, että:

  • muutoksista jää jälki
  • aiempaan tilaan on helpompi palata

Myös Firebase:llä voi tehdä muutoksia konsolissa, versionhallinnan yli. Miksi tekisit niin? Miksi et?

Deklaratiivinen määrittely on keskeisenä esim. SRE (Service Reliability Engineering) -toimintatavassa, josta viime kerran lopuksi mainittiin. Se on mahdollistava tekijä.

Testattavuus

Ajetaan testit.

$ cd packages/backend
$ npm test

Koska Firebase:n emulaattorit toistavat pilviympäristön paikallisesti, voidaan testit laatia kuin meillä olisi oma Firebase käytettävissämme (koska meillä on!). 😀

Katsotaan hakemistot packages/backend/test-rules ja packages/backend/test-fns.

Mitä ei löydy...?

  • Reaaliaikainen viestivirta ilman talletusta (websocket, pelillinen)


Seuraavaksi: 5 CI - vähittäinen integraatio