Slide 1

Slide 1 text

Firebase Realtime Database in Production

Slide 2

Slide 2 text

Name @brn (ꫬꅿ⨳ⵃ) Occupation ؿٗٝزؒٝسؒٝآص،٥ط؎ذ؍ـؒٝآص، Company Cyberagent ،سذؙأةآؔ AI Messenger OSS Contributor of V8 About http://info.b6n.ch

Slide 3

Slide 3 text

Agenda •  About AI Messenger •  What is Firebase •  Why choose Firebase Realtime Database •  Architecture of AI Messenger •  Dealing with problems •  How to manage incidents •  Future works

Slide 4

Slide 4 text

About AI Messenger

Slide 5

Slide 5 text

About AI Messenger

Slide 6

Slide 6 text

AI ًحإٝآٍ٦ הְֲ؟؎غ٦ؒ٦آؑٝزך✲噟鿇 ⚺חB2Bぢֽثٍحز؟٦ؽأך䲿⣘٥盖椚٥麊欽׾遤ֲ ثٍحزنحز׮䲿⣘׃גֶ׶ծ荈搫鎉铂Ⳣ椚׾ろ׭גׅץג荈 爡醡 ת׋尣篖חثٍحزؔلٖ٦ة٦׮䫴ִגְ׷ About AI Messenger

Slide 7

Slide 7 text

What is Firebase

Slide 8

Slide 8 text

Firebase Google爡ָ2014/10ח顠 ׃׋BaaS NoSQLغحؙؒٝسהծ׉׸׵הٔ،ٕة؎يדאזָ׷ Web٥iOS٥AndroidぢֽךSDK׾䲿⣘ 剑鵚כFunctionsװhosting瘝ך؟٦ؽأ׮䲿⣘׃גֶ׶ծ 醱さ涸ז،فٔ؛٦ءّٝ؎ٝؿٓך䲿⣘؟٦ؽأהז׶אא֮ ׷ ➙㔐כ⚺חRealtime Databaseך鑧 What is Firebase

Slide 9

Slide 9 text

What is Firebase https://www.freeiconspng.com/img/1035 Write {message: 'hello pc!'} Synced {message: 'hello pc!'} Synced {message: 'hello pc!'}

Slide 10

Slide 10 text

Why choose Firebase

Slide 11

Slide 11 text

Manage WebSocket Firebase Realtime DBך㣐ֹזًٔحزה׃ג WebSocketך؝طؙءّٝ盖椚׾⟣ׇ׵׸׷הְֲ挿ָ֮׷ ثٍحز،فٔ؛٦ءّٝ׾麊欽ׅ׷♳דֿך؝طؙءّٝ盖椚 כꬊ䌢ח㣐ֹז㉏겗חז׶ֲ׷׋׭ Firebaseח♧⟣ׅ׷ֿהח׃׋ Why choose Firebase

Slide 12

Slide 12 text

Architecture of AI Messenger

Slide 13

Slide 13 text

4 Architecture of AI Messenger PubSub Web Chat Cloud Load Balancer Operator Console Container Container Cloud BigTable Listening Firebase Listening Firebase Double Write to BigTable Write to Firebase Write new message Write new message Process message 1 3 5 AI 2 Immediately respond 202 Stack Driver

Slide 14

Slide 14 text

Write Message(1) 剅ֹ鴥׫כFirebaseפ湫䱸遤׻זְ GKEד盖椚ׁ׸גְ׷API׾穗歋ׅ׷ ؙٓ؎،ٝز⩎כ铣׫鴥׫ך׫חⵖꣲ׃׋ Architecture of AI Messenger

Slide 15

Slide 15 text

Write Message(1) ؟٦غכ⽯202 Accepted׾鵤ׅ Architecture of AI Messenger

Slide 16

Slide 16 text

Write chatbot message(2) نحزח״׷荈⹛鵤⥋ך㜥さכծ ًحإ٦آ׾「ֽ《׏׋؝ٝذشָAIך؝ٝذشפًحإ٦آ׾ 鷏׶穠卓׾「ֽ《׷ Architecture of AI Messenger

Slide 17

Slide 17 text

Send to Stackdriver(3) APIָ「ֽ《׏׋ًحإ٦آכׅץגStackDriverחؚٗה׃ג⳿ ⸂ׅ׷ Architecture of AI Messenger

Slide 18

Slide 18 text

Write to Realtime DB(4,5) ぐ؝ٝذشכ「ֽ《׏׋ًحإ٦آ׾Ⳣ椚׃ג PubSub穗歋דFirebaseפ剅ֹ鴥׬ ׉ךꥷחCloud BigTable瘝פتـٕٓ؎ز׃גֶֻ Architecture of AI Messenger

Slide 19

Slide 19 text

Why write from server only? ת׆ծ⵸䲿ה׃גFirebase Realtime Databaseכ ٥嗚稊ծؿ؍ٕةؚٔٝⳢ椚ָ蕱䩛 ٥ر٦ةךو؎ؚٖ٦ءָّٝ꬗⦜ הְֲه؎ٝزָ֮׷կ Architecture of AI Messenger

Slide 20

Slide 20 text

Why write from server only? ׉ך׋׭ؿٗٝزؒٝسַ׵湫䱸剅ֹ鴥תזְֿהדծ ٥؟٦غדךSchemeָ㢌׻׏׋㜥さךر٦ةو؎ؚٖ٦ءّٝ ٥嗚稊瘝׾遤ֲꥷחتـٕٓ؎زׁ׸׋BigTable瘝ךⴽStorage ַ׵嗚稊٥ؿ؍ٕةؚٔٝדֹ׷ הְֲًٔحزָ֮׷ Architecture of AI Messenger

Slide 21

Slide 21 text

Why write from server only? ׃ַ׃ •  ر٦ةך2ꅾ盖椚 •  ر٦ةךⴓ侔 •  ꟦חAPI׾䮠׬ֿהדꥺ㹱ך然桦ָ♳ָ׷ הְֲرًٔحز׮֮׷ 荈ⴓך؟٦ؽأח嗚稊ָ䗳銲זךַծر٦ةو؎ؚٖ٦ءָّٝ 걼籕ח饯ֿ׷ךַ瘝׾ぶ㄂׃ג罋ִ׷䗳銲ָ֮׷ Architecture of AI Messenger

Slide 22

Slide 22 text

Dealing with some problems

Slide 23

Slide 23 text

Update view after sent ثٍحز،فٔדכծ鸐䌢כًحإ٦آ鷏⥋䖓ծ ⽯荈ⴓָ鷏⥋׃׋ًحإ٦آָ歗꬗♳ח邌爙ׁ׸׷ ׃ַ׃Realtime DBח剅ֹ鴥׬ך׾䖉׏גְ׷הּׅחכ邌爙ׁ ׸זְךד歗꬗⩎ד鷏⥋׃׋ًحإ٦آ׾盖椚ׅ׷䗳銲ָ֮׷ Dealing with some problems

Slide 24

Slide 24 text

Sending failure ؟٦غ⩎דRealtime DB剅ֹ鴥׫ח㣟侁ׅ׷؛٦أ Realtime DBָ刿倜ׁ׸זְ׋׭歗꬗⩎׮׻ַ׵זְ 㼎瘻ה׃ג؟٦غכ202ה涪遤׃׋ًحإ٦آID׾鵤׃ ׉ך䖓Realtime DBח剅ֹ鴥׫׾遤ֲ ؿٗٝزؒٝس⩎דة؎ي،ؐزⳢ椚׾➿椚 Dealing with some problems

Slide 25

Slide 25 text

Dealing with some problems ChatApp {"message": "hello" } 202 {"id": "afdajjje3jfd" } { "message": "hello", "id": "afdajjje3jfd" } Write Async Request Response Update view with dummy message wait 3s Replace with real value

Slide 26

Slide 26 text

Retry ؙٓ؎،ٝز⩎ד剅ֹ鴥׫APIㄎן⳿׃䖓ծ3猱꟦䖉א ׉ך꟦חRealtime DBָ刿倜ׁ׸זַ׏׋㜥さכ鷏⥋㣟侁UI׾邌 爙 ⱄ鷏⥋ׅ׷㜥さחכׅדחًحإ٦آIDָ׻ַ׏גְ׷ךדずׄ IDדⱄ鷏⥋ 剅ֹ鴥׫ָ鑥ת׏גְ׋㜥さד׮ずׄ皘䨽ָ刿倜ׁ׸׷׌ֽ Dealing with some problems

Slide 27

Slide 27 text

Dealing with some problems ChatApp {"message": "hello" } 202 {"id": "afdajjje3jfd" } { "message": "hello", "id": "afdajjje3jfd" } Update same property if value updated twice Request Response Resend message with id Now, we know message id

Slide 28

Slide 28 text

Filtering values Firebaseכ⦼ךָؙؒٔꬊ䌢ח蕱䩛ד⢪ְב׵ְ 稢ְַؿ؍ٕةؚٔٝכؙٓ؎،ٝز⩎דװ׵זְהְֽזְ זךד鏣鎘ך儗挿דؿ؍ٕةָؚٔٝ䗳銲זְծ֮׷ְכ׃װׅ ְ圓鸡חׅץֹ ת׋ر٦ة圓鸡׾⺪ろך䕎ד⡲׏גְֻהծⰻ鿇ךر٦ةָ鋵ח ⣛㶷ׅ׷׋׭➭דⱄⵃ欽ׅ׷ךָꨇ׃ֻז׷ 㢩鿇ؗ٦׾׍ׯ׿ה鏣鎘ׅ׷䗳銲ָ֮׷ Dealing with some problems

Slide 29

Slide 29 text

Dealing with some problems /messages/afj34f0kfa/0afdajjje3jfd { "message": "hello" } /messages/afj34f0kfa/1afdajjje3jfd { "message": "hello", } /archive/afj34f0kfa Move closed conversation to archives to omit filtering /conversations/afj34f0kfa Messages are stored under conversation id and ordered unique message id to sorting with key

Slide 30

Slide 30 text

Initial message ِ٦ؠ٦ָثٍحز׾Ꟛְ׋הֹח״ֲֿ׉ًحإ٦آ׾邌爙׃ ׋ְ 剑ⴱכFirebase♳חًحإ٦آ׾鷏⥋׃גְ׋ ׃ַ׃ծFirebaseפך䱸竲儗꟦ָ䠐㢩הꞿְ׋׭⽃秪חJSON ؿ؋؎ٕ׾铣׫⳿׃גⴽ鷿邌爙 Dealing with some problems

Slide 31

Slide 31 text

Query BigData Firebaseד㣐ꆀךر٦ةח㼎׃גfilter׾ַֽ׷הReadָ100% חז׏גFirebaseך铣׫剅ָֹ⨡姺ׅ׷ ׉ך״ֲז欽鷿ח⢪欽ׅץֹדכזַ׏׋ BigTableפتـٕٓ؎ز׃גְ׷ر٦ة׾《䖤ׅ׷״ֲח׃׋ Dealing with some problems

Slide 32

Slide 32 text

How to manage incidents

Slide 33

Slide 33 text

There is no perfect system ׋הִوط٦آس٥؟٦ؽأהכְִծꥺ㹱כ饯ֹ׷׮ך Firebaseדꥺ㹱ָ饯ֹ׋㜥さծثٍحزךׅץגָ堣腉♶Ⰻהז ׷ B2Bדכ곁㹏כ׉׸׾鏩㺁׃זְ How to manage incidents

Slide 34

Slide 34 text

Redundancy הכְִRealtime DB׾ⱔꞿ⻉ׅ׷ךכꨇ׃ְ 荈⵸ךWebSocketהDB׾欽䠐׃ג׃ת׏גכFirebase׾鼅䫛׃ ׋䠐㄂ָזְ 殯䌢禸כ⽃秪זRestד㹋鄲׃׋ְ How to manage incidents

Slide 35

Slide 35 text

Hello Polling ׅץגךRealtime DBر٦ةכBigTable瘝ח⥂㶷ׁ׸גְ׷ ر٦ة׾《䖤ׅ׷REST API׾Pollingׅ׷ֿהד亻⡂涸ח Realtime DB׾ⱄ植ׅ׷ How to manage incidents

Slide 36

Slide 36 text

How to manage incidents Observer Write value with 1s interval ChatApp Listening observer writing value If firebase is down, using rest. Listening message/conversation

Slide 37

Slide 37 text

Restoring Data הכְִر٦ة׾ٗأزׅ׷ֿה׮֮׶ֲ׷ 剅ֹ鴥ת׸׋ر٦ةכAPIחًحإ٦آָ䫎־׵׸׋儗挿ד StackDriverחⰋגؚٗה׃ג⳿⸂׃גֶֻ 䗁傊ָ䗳銲זر٦ةחꟼ׃גכַؚٗ׵ⱄ䏝剅ֹ鴥׬ How to manage incidents

Slide 38

Slide 38 text

Future works

Slide 39

Slide 39 text

Migrating to Firestore ת׌ك٦ة晛׌ָծ姻䒭晛ٔٔ٦أ䖓חCloud Firestoreפ獳遤׃ ׋ְ Future works

Slide 40

Slide 40 text

Double Write 植㖈ׅץגךRealtime DBפך剅ֹ鴥׫כBigTableחتـٕٓ؎ زׁ׸גְ׷ ׉ֿפFirestore׮鷄⸇׃ג倜׋זر٦ة圓鸡ד剅ֹ鴥׫ Realtime DB׾ⵃ欽ׅ׷ر٦ةָזֻז׏׋儗挿דⴖ׶剏ִ׷ Future works

Slide 41

Slide 41 text

׀幠耮֮׶ָהֲ׀ְׂת׃׋