Rakenduste mootor vs Firebase - Tere tulemast Bizzaro maailma

Käes on peaaegu 2018 ja te otsite uue aasta resolutsiooni. Siin on mõned head:

  • Tunnistan, et kasutaja mandaate ei saa mulle usaldada
  • Lõpetan oma kasutajate autentimisvoogude kirjutamise

Kasutajate volitused on nüüd nii suured, et kui teil pole pühendunud meeskonda, kes analüüsib teie autentimissüsteeme, haldab identiteete ja jälgib võimalikke rikkumisi reaalajas, siis asute te purjetama avamerel lekkesse. lihtsalt ootamas suurt lainet, et sind unustuse hõlma purustada.

Nagu enamik teist, pean ka mina tegelema olemasolevate süsteemidega, kus on mandaadid ja jeada, mida te kavatsete teha. Kuid mida ma teha saan, on selle halvenemise lõpetamine.

Autentimine - kas keegi teine ​​ei saa seda teha?

Kas keegi teine ​​ei saa seda teha?

Google, Facebook, Twitter, Github, seal on palju avalikke autentimispakkujaid. Neid kõiki toetada on keeruline, kuid selleks võite kasutada kolmanda osapoole teenuseid nagu Auth0.

App Engine'i projektide puhul on meil Google Cloud Platvormis suurepärane sisseehitatud võimalus.

Või noh, peaaegu Google Cloud Platvormis. See asub Bizarro maailma pilveplatvormis, mida muidu nimetatakse Firebase'iks.

Firebase - Bizarro rakenduste mootor

Miks on teil midagi sellist, kui teil on kaks või enam peenelt kokkusobimatut varianti? Google armastab seda teha koos opsüsteemide, sotsiaalsete ja vestlusrakendustega, miks mitte pilveplatvormidega?

Need teist, kes on App Engine'iga tuttavad, on harjunud seda kasutama tavalisel kliendi-serveri viisil, st: platvorm kui teenus:

Rakenduste mootor, platvorm kui teenus (PAAS)

Firebase, nagu Google Cloud Platform, on täis keerukate tarkvarasüsteemide pilveteenuseid. Kuid erinevalt tavalisest GCP-st (ja eriti rakendusest App Engine) on selle juured sama tagapõhi kui teenus, mis väljub mobiilsest maailmast ja teenindab mobiilsidearendajate erilist vastumeelsust taustsüsteemide kirjutamisel. Arhitektuur näeb välja selline:

Firebase, taustprogramm kui teenus (BaaS)

Pange tähele, et kliendid vestlevad Firebase'i teenustega otse, kasutades spetsiaalseid SDK-sid veebi- ja mobiilikeskkondade jaoks, teie javascripti pilvefunktsioonide koodiga (boo! Mis saab korralikust keelest!), Mille käivitavad need teenused, tuginedes teistes teenustes toimuvatele sündmustele ; kliendid ei helista kunagi teie koodile, siis ei saa te API-sid luua.

See on vastupidiselt rakendusele App Engine, kus peate oma klientide helistamiseks kirjutama API ja seejärel vestlema kliendi nimel teiste GCP-teenustega.

Firebase veidra maailmaarhitektuuri puhul on tõeliselt positiivne see, et see teeb mõnda asja paremini. Minu jaoks on tähelepanuväärsemad autentimine ja muudatuste teatamine (vastavalt Firebase autentimise ja reaalaja andmebaasi kaudu).

Firebase + App Engine - kassi koera arhitektuur

Keeruline on see, et kuigi App Engine ja Firebase ei võitle tegelikult nagu Superman ja Bizzaro, ei õmble nad ka omavahel eriti hõlpsalt. See on natuke kassi-koer. Vaatame arhitektuuri:

Firebase + AppEngine - kassi koer teenusena (CDaaS)

See on põhiarhitektuur, mida täiendan järgmistes paaris artiklis koodiga. Põhitõed on järgmised:

1 - klient autentib Firebase'i autentimise kaudu.

2 - sel on autentimisluba, mida kasutada App Mootoriga rääkimisel.

3 - Kui App Engine'is leiavad aset olulised sündmused, millest soovime, et klient teaks, sisestame selle teabe Firebase'i reaalajas andmebaasi.

4 - Firebase reaalajas andmebaas viib muudatused kliendi ette. Klient saab soovi korral päringuid ka reaalaja andmebaasist.

Võite märgata, et olen pilvefunktsioonid kustutanud; me ei kasuta neid siin. Ma soovin, et see häälestus tunneks end endiselt lihtsa Pythoni põhise rakenduse App Engine abil, nii et ärgem laskugem JavaScripti kirjutada saidil node.js.

Pange tähele ka seda, et me ei panda palju reaalaja andmebaasi; see on kallis (5 dollarit / GB!). Kasutame seda lihtsalt muudatuste märguannete jaoks ja sisestame tõelised andmed Cloud Datastore'i.

Mis järgmiseks?

Järgmises artiklis käsitleme tegelikku koodi, kui tegelen ülaltoodud 1. ja 2. toiminguga, kasutades FirebaseUI. Lõpuks on kasulik skelett, mis tegeleb sisselogimise ja väljalogimisega Firebase autentimise abil ühelehelises veebirakenduses, rääkides tõenäoliselt Python Flaski tagaotsaga.

Postiskript: kuidas on pilverestoraniga?

Ma ei jätnud uut kuumust, Cloud Firestore'i. Ehkki olen sellest huvitatud, ei suuda ma selle kasutamist täpselt välja mõelda.

Firebase'i Cloud Firestore on GCP Cloud Datastore (st: Megastore) koos mõne väga laheda muudatusega:

  • See on lihtsam; puuduvad kaarekujulised võtmestruktuurid, klassid, lihtsalt lihtne kollektsioon + üksuse struktuurid
  • Sellel on klientide jaoks reaalajas teatisi, näiteks Firebase reaalajas andmebaas
  • See skaleerub nagu Cloud Datastore.

Kahjuks on sellel ka mõned puudused:

  • Sellel puudub osa Cloud Datastore'i tehingute võimsusest.
  • Kui kasutate rakenduses App Engine pilverestorani, ei saa te seda kasutada
  • Kohandamine eeldab pilvefunktsioonide kasutamist (ja isegi siis pole neil näiteks ndb-klassi mudeliklassi eelvalmistaja). Võiksite kirjutada üldise pilvefunktsiooni, mis lihtsalt läbib minu arvatavasti python appengiinirakenduse.

Kuid minu jaoks on suurim puudus see, et kuna see on osa Firebase'ist, näeb arhitektuur välja selline:

Minu probleem sellega on, et ta soovib, et ma paneksin oma andmebaasi väliste helistajate ja tagumise lõppkoodi vahele. Mis on minu arvates tõeliselt cockamamie arhitektuur.

Ma saan aru, miks ta tahab niimoodi töötada; Sel moel saate teha klientide jaoks reaalajas muudatuste teatisi õigesti ja integreerimine ülejäänud Firebase'iga on parem. Kuid ma lihtsalt ei näe, kuidas ehitate selle konfiguratsiooni jaoks tõeliselt tõsise tagarakenduse ja kui te ei soovi midagi tõsist üles ehitada, kuidas te siis hakkate kasutama megastoreil põhinevat lahendust (mis on vägevalt võimas, kuid nõuab hoolikat käsitsemist)?

Dokumentides on selge, et veebi (brauseri külje javascript), Androidi ja iOS-i teegid on esmaklassilised kodanikud ning serveripoolsed keskkonnad on teise klassi kodanikud. Python nõuab App Engine'i käivitamiseks Firebase-admin teeki, mis on natuke jabur (kuigi see on probleem ka teiste firebase teenuste puhul).