App Engine vs Firebase - Сардэчна запрашаем у свет Bizzaro

Гэта амаль 2018 год, і вы будзеце шукаць дазвол на новы год. Вось некаторыя добрыя:

  • Я збіраюся прызнаць, што мне нельга давяраць карыстацкія дадзеныя
  • Я спыняю пісаць уласныя патокі аўтэнтыфікацыі карыстальніка

Зараз высокая тэмпература ўліковых дадзеных карыстальнікаў настолькі высокая, што, калі ў вас няма спецыяльнага будаўніцтва каманд і аналізу сістэм аўтэнтыфікацыі, кіравання ідэнтычнасцямі і маніторынгу патэнцыяльных парушэнняў у рэжыме рэальнага часу, вы адпраўляецеся ў адкрытае мора ў дзіравым канаве, проста чакае вялікая хваля, якая разбурыць цябе ў нябыт.

Як і большасць з вас, я маю справу з існуючымі сістэмамі, якія валодаюць уліковымі дадзенымі і yada yada, што вы будзеце рабіць. Але я магу перастаць пагаршаць сітуацыю.

Аўтэнтыфікацыя - не можа гэта зрабіць хто-небудзь іншы?

Не можа гэта зрабіць хто-небудзь іншы?

Google, Facebook, Twitter, Github, ёсць шмат дзяржаўных правайдэраў аўтэнтыфікацыі. Падтрымліваць іх усіх складана, але для гэтага вы можаце скарыстацца паслугамі іншых вытворцаў, як Auth0.

У выпадку праектаў App Engine, у нас ёсць выдатная ўбудаваная опцыя ў платформе Google Cloud.

Ці, добра, амаль у воблачнай платформе Google. Ён знаходзіцца ў сусветнай воблачнай платформе Bizarro, вядомай як Firebase.

Firebase - дадатак Bizarro App Engine

Чаму ёсць што-небудзь, калі ў вас ёсць два ці больш несумяшчальных варыянта? Google любіць гэта рабіць з аперацыйнымі сістэмамі, сацыяльнымі праграмамі і прыкладаннямі для чата, дык чаму б не з хмарных платформаў?

Тыя з вас, хто знаёмы з App Engine, будуць выкарыстоўваць яго ў звычайным выглядзе кліент-сервер, гэта значыць: Платформа як паслуга:

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

Firebase, як і Google Cloud Platform, поўная хмарных сэрвісаў для складаных праграмных сістэм. Аднак, у адрозненне ад стандартнага GCP (і асабліва App Engine), яго карані складаюцца з Backend, як з паслугай, якая выходзіць з свету мабільных тэлефонаў, і з асаблівай непрыязнасцю распрацоўнікаў мабільных праграм пісаць рэзервовыя сістэмы. Архітэктура выглядае так:

Firebase, Бэкенд як паслуга (BaaS)

Звярніце ўвагу, што кліенты размаўляюць непасрэдна з паслугамі ў Firebase, выкарыстоўваючы спецыяльныя SDK для вэб-і мабільных асяроддзяў, пры гэтым ваш код Cloud Functions (бу! Што пра годны мова!) Спрацоўвае ў гэтых службах на аснове падзей, якія адбываюцца ў іншых службах ; калі кліенты ніколі не называюць ваш код, вы не можаце ствараць API.

Гэта ў адрозненне ад App Engine, дзе вы павінны напісаць API для званка кліентаў, а потым пагаварыць з іншымі кліентамі GCP ад імя кліента.

Сапраўды станоўчая рэч у мудрагелістай сусветнай архітэктуры Firebase заключаецца ў тым, што яна робіць некаторыя рэчы лепш. Найбольш характэрнымі для маіх мэтаў з'яўляюцца праверка сапраўднасці і апавяшчэнне аб зменах (праз Firebase Authentication і Realtime Database адпаведна).

Firebase + App Engine - архітэктура Cat Cat

Самае складанае ў тым, што, хоць App Engine і Firebase не змагаюцца, як Superman і Bizzaro, яны таксама не злучаюцца асабліва лёгка. Гэта трохі сабака. Давайце паглядзім на архітэктуру:

Firebase + AppEngine - Сабака як служба (CDaaS)

Гэта асноўная архітэктура, якую я буду складаць з кодам у наступных парах артыкулаў. Асновы:

1 - Кліент будзе прайсці аўтэнтыфікацыю праз аўтэнтыфікацыю Firebase.

2 - Пасля гэтага будзе выкарыстаны маркер аўтэнтыфікацыі, які выкарыстоўваецца падчас размовы з App Engine.

3 - Калі ў App Engine адбудуцца значныя падзеі, пра якія мы хочам ведаць, мы перашлем інфармацыю ў базу дадзеных рэальнага часу Firebase.

4 - База дадзеных рэальнага часу Firebase падштурхне змены да кліента. Кліент таксама можа запытаць базу дадзеных у рэжыме рэальнага часу.

Вы заўважыце, што я выдаліў воблачныя функцыі з выявы; мы не будзем выкарыстоўваць іх тут. Я хачу, каб гэтая налада па-ранейшаму адчувала сябе простым дадаткам App Engine на аснове Python, таму не будзем пісаць JavaScript для node.js.

Таксама звярніце ўвагу, што мы не будзем шмат укладваць у базу дадзеных у рэжыме рэальнага часу; гэта дорага ($ 5 / ГБ!). Мы проста будзем выкарыстоўваць яго для апавяшчэнняў аб змене і змяшчаць рэальныя дадзеныя ў 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, выглядае так:

Мая праблема ў гэтым, я хачу, каб я змясціў базу дадзеных паміж маімі знешнімі абанентамі і маім заднім кодам. На мой погляд, гэта сапраўды архітэктура какамаміі.

Я разумею, чаму ён хоча працаваць так; такім чынам, вы можаце рабіць апавяшчэнні аб змене ў рэжыме рэальнага часу кліентам належным чынам, і інтэграцыя з астатнімі Firebase лепш. Але я проста не бачу, як у гэтай канфігурацыі вы ствараеце сапраўды сур'ёзнае дадатковае задняе прыкладанне, і калі вы не хочаце ствараць нешта сур'ёзнае, як вы збіраецеся скарыстацца рашэннем на базе мега-крамы (што магутна магутны, але патрабуе ўважлівага звароту)?

У дакументах зразумела, што бібліятэкі ў Інтэрнэце (на старонцы браўзэра JavaScript), Android і iOS з'яўляюцца грамадзянамі першага класа, а асяроддзі на серверы - грамадзянамі другога класа. Python патрабуе бібліятэкі адміністратара firebase, якая крыху паскудзіць, каб запусціць App Engine (хаця гэта праблема і з іншымі службамі пажарнай базы).