App Engine vs Firebase - Добре дошли в света на Bizzaro

Вече е почти 2018 г. и ще търсите резолюция за нова година. Ето някои добри:

  • Ще призная, че не мога да ми вярвам с потребителски идентификационни данни
  • Ще спра да пиша собствени потоци за удостоверяване на потребителя

Горещината на потребителските идентификационни данни сега е толкова висока, че освен ако не разполагате със специализиран екип и анализиране на вашите системи за автентификация, управление на идентичности и мониторинг на потенциални нарушения в реално време, вие тръгвате да плавате в открито море в пропусклив момент, просто чака голяма вълна, която да те смачка в забрава.

Както повечето от вас, аз трябва да се справя със съществуващите системи, които притежават идентификационни данни и yada yada, какво ще правите. Но това, което мога да направя, е да спра да го влоша.

Удостоверяване - не може ли някой друг да го направи?

Не може ли някой друг да го направи?

Google, Facebook, Twitter, Github, има много доставчици на публични удостоверявания там. Сложно е да ги поддържате всички, но за да направите това, можете да използвате услуги на трети страни като Auth0.

В случай на проекти на App Engine, ние имаме страхотна вградена опция в облачната платформа на Google.

Или, добре, почти в облачната платформа на Google. Той е в платформата на облачната платформа Bizarro, известна иначе като Firebase.

Firebase - двигателят на приложението Bizarro

Защо да имате едно от нещо, когато можете да имате две или повече несъвместими опции? Google обича да прави това с операционни системи, социални приложения и чат приложения, така че защо не с облачни платформи?

Тези от вас, които са запознати с App Engine, ще бъдат използвани да го използват по стандартен начин клиент-сървър, т.е.: Платформа като услуга:

App Engine, платформа като услуга (PAAS)

Firebase, подобно на Google Cloud Platform, е пълна с облачни услуги за сложни софтуерни системи. Въпреки това, за разлика от стандартния GCP (и по-специално App Engine), корените му са Backend като услуга, която излиза от света на мобилните устройства, както и особената неприязън на мобилните разработчици към писането на back end системи. Архитектурата изглежда така:

Firebase, Backend като услуга (BaaS)

Забележете, че клиентите разговарят директно с услугите в Firebase, използвайки специални SDK за уеб и мобилни среди, като вашият код за облачни функции на JavaScript (boo! Какво ще кажем за приличен език!) Се задейства от тези услуги въз основа на събития, възникващи в другите услуги ; клиентите никога не се обаждат на вашия код, не можете да създавате API.

Това е в контраст с App Engine, където трябва да напишете API, за да могат вашите клиенти да се обаждат и след това да говорите с други GCP услуги от името на клиента.

Наистина положителното в бизарната световна архитектура на Firebase е, че прави някои неща по-добре. Най-забележимите за целите ми са уведомяване за автентификация и промяна (съответно чрез удостоверяване на Firebase и база данни в реално време).

Firebase + App Engine - архитектурата на Cat Dog

Трудното е, че макар App Engine и Firebase да не се бият като Superman и Bizzaro, те също не се съчетават особено лесно. Това е малко котешко куче. Нека да разгледаме архитектурата:

Firebase + AppEngine - Cat Dog като услуга (CDaaS)

Това е основната архитектура, която ще очертая с код в следващите няколко статии. Основите са:

1 - Клиентът ще се удостоверява чрез Firebase Authentication.

2 - След това ще има означение за удостоверяване, което да използвате, когато говорите с App Engine.

3 - Когато в App Engine се случват значителни събития, за които искаме клиентът да знае, ще избутаме информацията в Firebase Realtime Database.

4 - Базата данни в реално време на Firebase ще промени промени към клиента. Клиентът може също да поиска база данни в реално време по желание.

Ще забележите, че съм изтрил облачните функции от снимката; няма да ги използваме тук. Искам тази настройка все още да се чувства като обикновено приложение, базирано на Python App Engine, така че нека не влизаме в писането на JavaScript за node.js.

Също така имайте предвид, че няма да влагаме много в базата данни в реално време; скъпо е ($ 5 / GB!) Просто ще го използваме за известия за промяна и ще поставим реални данни в Cloud Datastore.

Какво следва?

В следващата статия ще влезем в действителния код, тъй като се справям с стъпки 1 и 2 по-горе, използвайки FirebaseUI. Ще завършим с полезен скелет, който се занимава с влизане / излизане в уеб приложение с една страница, използвайки удостоверяване на Firebase, като говорим вероятно за задния край на Python Flask.

След скрипт: Какво ще кажете за Cloud Firestore?

Оставих новата горещина, Cloud Firestore Докато ме заинтригува, просто не мога да разбера как да го използвам.

Cloud Firestore на Firebase е облачно хранилище на данни на GCP (т.е.: Megastore), с няколко много готини промени:

  • По-просто е; няма скрити ключови структури, няма класове, просто проста колекция + структури от елементи
  • Той има известия в реално време за клиенти, като базата данни в реално време на Firebase
  • Той мащабира като Cloud Datastore.

За съжаление, има и някои недостатъци:

  • Липсва част от силата на транзакциите в Cloud Datastore.
  • Когато използвате Cloud Firestore в приложение на App Engine, не можете да използвате Cloud Datastore
  • Персонализирането изисква използване на облачни функции (и дори тогава те нямат силата на, да речем, предварително поставен манипулатор в клас на ndb модел). Бихте могли да напишете обща облачна функция, която просто преминава към приложението за приложение на Python appengine, предполагам.

Но най-големият недостатък за мен е, че тъй като тя е част от Firebase, архитектурата изглежда така:

Проблемът ми с това е, че иска да поставя моята база данни между външните си повикващи и задния ми код. Което според мен е наистина cockamamie архитектура.

Разбирам защо иска да работи по този начин; по този начин можете да правите известия за промяна в реално време на клиентите правилно и интеграцията с останалата част на Firebase е по-добра. Но просто не виждам как в тази конфигурация изграждате наистина сериозно приложение за задния край и ако не искате да изградите нещо сериозно, как ще използвате решение, базирано на мега магазини (което е силно мощен, но изисква внимателно боравене)?

В документите е ясно, че Web (страницата на JavaScript в JavaScript), Android и iOS библиотеките са граждани от първия клас, а сървърните страни са граждани от втори клас. Python изисква библиотеката за администриране на firebase, която е малко копеле, за да започне работа с App Engine (въпреки че това е проблем и при други услуги на firebase).