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
✔
✔
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?
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