Slide 1

Slide 1 text

Firebase Firestore Find obile m S a a B s ackend ervice

Slide 2

Slide 2 text

C N D J P 2 @nnao45 CyberAgent Inc. Infra/ServerSide Engineer ✔ Naoya Yokoyama Tech Advisor Startup Company ✔ Zsh,BGP,Go,Rust,MySQL,K8S,AWS,Ansible ✔ Vtuber,Game,Tennis ✔ サーバレスでエンジニアに愛を・・・! 冪等性を保つべきかどうかの指標が欲しい ぶいちゅーばー友達募集! ポケモン発売まで意識飛ばしたい勢 Rustのwebフレームワーク作成中... @nnao45,[email protected] ✔ サンフランシスコのセブン最高

Slide 3

Slide 3 text

Agenda Firebase introduction Learn Firestore Arch mBaaS with CloudNative ✔ ✔ ✔

Slide 4

Slide 4 text

Firebase?

Slide 5

Slide 5 text

Firebase is… NoSQL? Push Notification? Serverless?

Slide 6

Slide 6 text

Firebase is… NoSQL? Push Notification? Serverless? ✔ ✔ ✔

Slide 7

Slide 7 text

DEPLOY MOBILE APP IS HARD WAY Database? Mongo,MySQL,Postgres,Oracle...etc Auth? Basic,Digest,JWT,PubKey...etc Async Logic? WebRTC,Quic,CustomProto…etc Hosting API? S3 Hosting,EC2,GAE…etc

Slide 8

Slide 8 text

DEPLOY MOBILE APP IS HARD WAY Database! Auth! Async Logic! Hosting API! NoSQL Authentication SDK and WebRTC Hosting Front

Slide 9

Slide 9 text

is mobile backend as a service https://firebase.google.com/?hl=ja

Slide 10

Slide 10 text

CAN DEPLOY MOBILE APP USING ONLY FIREBASE WITH SERVERLESS ARCH hoge.firebaseapp.com Hosting NoSQL Authentication Cloudfunction Storage Push Notification Front

Slide 11

Slide 11 text

CAN DEPLOY MOBILE APP USING ONLY FIREBASE WITH SERVERLESS ARCH mBaaS Self-Hosted Server NO NEED

Slide 12

Slide 12 text

FOR EXAMPLE… MOBILE APP SEND MESSAGE Hosting api.hogame.link/api/v1/login Credential OK Credential Auth Authentication Call Privider host with like app

Slide 13

Slide 13 text

FOR EXAMPLE… MOBILE APP SEND MESSAGE Hosting api.hogame.link/api/v1/message POST Message OK Firestore Cloudfunction SAVE Message Format Message SAVE for Analy Object Storage Storage SAVE Image DWH Analytics Tools

Slide 14

Slide 14 text

FOR EXAMPLE… MOBILE APP SEND MESSAGE Hosting Firebase Apple Push iOS Push Message Notification Service Push Message Cloud Messaging api.hogame.link If you want to send push...

Slide 15

Slide 15 text

FOR EXAMPLE… MOBILE APP SEND MESSAGE Hosting api.hogame.link/api/v1/message GET Message Firestore GET Message Storage GET Image Realtime Via SDK on WebRTC

Slide 16

Slide 16 text

AND… Self-Hosted API Server I WANT TO USE API SEVER WITH FIRESTORE

Slide 17

Slide 17 text

AND… Self-Hosted API Server I WANT TO USE API SEVER WITH FIRESTORE

Slide 18

Slide 18 text

Can use serverside firestore sdk for some lang. https://cloud.google.com/firestore/docs/apis

Slide 19

Slide 19 text

Firebase is mBaaS, I know! And want to study Firestore

Slide 20

Slide 20 text

Firestore is… NoSQL, Base Document DB Awesome Realtime Communication ✔ ✔

Slide 21

Slide 21 text

Firestore Introduction

Slide 22

Slide 22 text

Firestore Introduction https://firebase.google.com/docs/firestore/?hl=ja

Slide 23

Slide 23 text

Database Table Data Collection Document Data MySQL Firestore Firestore Introduction

Slide 24

Slide 24 text

GET Message Realtime Via SDK on WebRTC Having Feature P/Sub Firestore Introduction

Slide 25

Slide 25 text

Demo https://codelabs.developers.google.com/codelabs/ firebase-web/index.html Firestore Introduction

Slide 26

Slide 26 text

Firestore is NoSQL

Slide 27

Slide 27 text

Firestore is NoSQL No Schema Support Transaction Support Query Like SQL ORDER BY WHERE LIMIT

Slide 28

Slide 28 text

Firestore is NoSQL users/ user_1/ user_2/ user_3/ created: 1555302970 role: admin status: active created: 1555302960 role: admin status: active created: 1555302931 role: admin status: deactive

Slide 29

Slide 29 text

Firestore is NoSQL users/ user_1/ user_2/ user_3/ role: admin status: active role: admin status: active role: admin status: deactive follows: [2,3] follows: [4,10] follows: [42,3] docData .put(“follows”, Arrays.asList(2,3)); created: 1555302970 created: 1555302960 created: 1555302931 Insert into data

Slide 30

Slide 30 text

Firestore is NoSQL users/ user_1/ role: admin status: active follows: [2,3] Message.put(“from”, “Jobana”); Messages created: 1555302970 messages/ message_1: from: Giorno msg: Golden Message.put(“msg”, “Experience”); .put(“message_2”, Message); message_2: from: Jobana msg: Experience Insert into subcol

Slide 31

Slide 31 text

Firestore is NoSQL users/ user_1/ user_2/ role: admin status: active role: admin status: active follows: [2,3] follows: [4,10] docDataRef .where(“status”, “==”, “active”); created: 1555302970 created: 1555302960 Get match data

Slide 32

Slide 32 text

Firestore is NoSQL users/ user_1/ role: admin status: active follows: [2,3] docDataRef .where(“crated”, “>”, “1555302965”); created: 1555302970 Get match data

Slide 33

Slide 33 text

Firestore is NoSQL users/ user_1/ user_2/ user_3/ role: admin status: active role: admin status: active role: admin status: deactive follows: [2,3] follows: [4,10] follows: [42,3] docDataRef .where(“role”, “==”, “admin”) created: 1555302970 created: 1555302960 created: 1555302931 .orderBy(“created”, “asc”); Get match sort data

Slide 34

Slide 34 text

Firestore is NoSQL users/ user_1/ user_2/ role: admin status: active role: admin status: active follows: [2,3] follows: [4,10] docDataRef .where(“role”, “==”, “admin”) created: 1555302970 created: 1555302960 .orderBy(“created”, “asc”) .startAt(user_2); Get match sort snap

Slide 35

Slide 35 text

Caution of Firestore

Slide 36

Slide 36 text

Caution of Firestore 1 WRITE IN 1 DOCMENT PER 1 second https://firebase.google.com/docs/firestore/quotas?hl=ja 500 WRITE IN 1 COLLECTION PER 1 second 1 DOCUMENT MAX SIZE IS 1 MiB

Slide 37

Slide 37 text

1 DATA UPDATE IN 1 DOCMENT PER 1 second like_counter/ counter: 222 CANNOT USING“COUNT” STATEMENT https://firebase.google.com/docs/firestore/solutions/counters?hl=ja Caution of Firestore

Slide 38

Slide 38 text

1 DATA UPDATE IN 1 DOCMENT PER 1 second like_counter_1/ counter: 22 → SOLVE: Distributed Sharding like_counter_2/ counter: 34 like_counter_3/ counter: 22 like_counter_4/ counter: 19 97 like_counter: https://firebase.google.com/docs/firestore/solutions/counters?hl=ja Caution of Firestore

Slide 39

Slide 39 text

Imple Realtime Update SDK for Go? https://firebase.google.com/docs/firestore/query-data/listen?hl=ja https://firebase.google.com/docs/firestore/query-data/listen?hl=ja Caution of Firestore

Slide 40

Slide 40 text

https://firebase.google.com/docs/firestore/query-data/listen?hl=ja https://github.com/googleapis/google-cloud-go/releases/tag/v0.21.0 Caution of Firestore Imple Realtime Update SDK for Go?

Slide 41

Slide 41 text

https://firebase.google.com/docs/firestore/query-data/listen?hl=ja https://soichisumi.net/2018/12/firestore-realtime-update-go-sdk/ snapIter := client.Collection("users") .Doc("docID") .Snapshots(ctx) defer snapIter.Stop() for{ data, err := snapIter.Next() if err != nil { log.Fatalln(err) } fmt.Println(data) } Caution of Firestore Imple Realtime Update SDK for Go?

Slide 42

Slide 42 text

BILLING PER Document Bill Read 0.1 Million Doc Write 0.1 Million Doc Delete 0.1 Million Doc $0.06 $0.18 $0.02 https://firebase.google.com/docs/firestore/pricing?hl=ja Caution of Firestore

Slide 43

Slide 43 text

Collection BILLING PER 1 Document Document Document Document READ 100 documents Caution of Firestore

Slide 44

Slide 44 text

Collection BILLING PER 1 Document Document Document Document READ 100 documents READ 100 documents Your Bill is Caution of Firestore

Slide 45

Slide 45 text

Collection BILLING PER 1 Document Document Document Document READ 100 documents SubCollection Document Document Document AND 55 subdocuments Caution of Firestore

Slide 46

Slide 46 text

Collection BILLING PER 1 Document Document Document Document READ 100 documents SubCollection Document Document Document AND 55 subdocuments READ 155 documents Your Bill is Caution of Firestore

Slide 47

Slide 47 text

And More... See Offical Document https://firebase.google.com/docs/ firestore/solutions/?hl=ja Google Cloud Next’19 Firestore Session https://youtu.be/ah5tQ7yOh2s Caution of Firestore

Slide 48

Slide 48 text

mBaaS with CloudNative

Slide 49

Slide 49 text

PUSH NORTIFICATION IS HARD WAY API Firebase Push Message Cloud Messaging REQUEST REQUEST REQUEST

Slide 50

Slide 50 text

PUSH NORTIFICATION IS HARD WAY API Firebase Push Message Cloud Messaging REQUEST REQUEST HTTP REQUEST IS SLOW RESPOMSE IS SLOW

Slide 51

Slide 51 text

PUSH NORTIFICATION IS HARD WAY API Firebase Push Message Cloud Messaging REQUEST REQUEST I'am New User

Slide 52

Slide 52 text

PUSH NORTIFICATION IS HARD WAY API Firebase Push Message Cloud Messaging REQUEST REQUEST I'am Influencer

Slide 53

Slide 53 text

API Firebase Cloud Messaging REQUEST REQUEST PUSH NORTIFICATION IS HARD WAY ...PREDICTION IS HARD REQUEST Apple Push Notification Service

Slide 54

Slide 54 text

PUSH NORTIFICATION IS HARD WAY https://tech.mercari.com/entry/2016/11/08/170343

Slide 55

Slide 55 text

PUSH NORTIFICATION IS HARD WAY https://tech.mercari.com/entry/2016/11/08/170343

Slide 56

Slide 56 text

PUSH NORTIFICATION IS HARD WAY https://github.com/appleboy/gorush#run-gorush-in-kubernetes

Slide 57

Slide 57 text

PUSH NORTIFICATION IS HARD WAY https://github.com/appleboy/gorush#run-gorush-in-kubernetes

Slide 58

Slide 58 text

PUSH NORTIFICATION IS HARD WAY https://github.com/appleboy/gorush#run-gorush-in-kubernetes Pod Pod Pod

Slide 59

Slide 59 text

PUSH NORTIFICATION IS HARD WAY And My Use Case...

Slide 60

Slide 60 text

PUSH NORTIFICATION IS HARD WAY Database /a-service /b-service API a-queue-0/ Format Data b-queue-0/ Format Data a-queue-1/ Format Data

Slide 61

Slide 61 text

PUSH NORTIFICATION IS HARD WAY BATCH BATCH BATCH BATCH Push Server x-queue-n: datas/ a-queue-0 a-queue-1 b-queue-0 b-queue-1 statefulset statefulset statefulset statefulset Database

Slide 62

Slide 62 text

PUSH NORTIFICATION IS HARD WAY IF ALL QUEUE TOO BUSY... a-queue-0 a-queue-1 a-queue-2 a-queue-3 a-queue-4 DEPLOY DEPLOY DEPLOY statefulset statefulset statefulset statefulset statefulset API KICK JOB REQUEST Database

Slide 63

Slide 63 text

FIN. PixelMplus(ピクセル・エムプラス) ‥ 8bitビットマップふうフリーフォント http://itouhiro.hatenablog.com/entry/20130602/font 這いよれ!ニャル子さん AAセット1 | AsciiArt*AsciiArt http://aa.en.utf8art.com/node/4146