Firebase คืออะไร?
Firebase คือ Cloud service ที่ให้บริการ Backend หลังบ้าน ผู้พัฒนาจะพัฒนาแค่ Mobile application หรือ Single Page Application ด้วย Angular, React หรือ Vue แค่นั้น
Firebase พยายามลดขั้นตอนการพัฒนา Web และ Mobile application ให้สั้นลง โดยพยายามนำงานที่ต้องทำซ้ำๆกันมาเป็นบริการที่เราสามารถเรียกใช้ได้ทันที ซึ่งจะช่วยให้ developer focus กับการพัฒนา application ให้ตอบโจทย์ทางธุรกิจมากขึ้น
Firebase มี services อะไรบ้าง?
Firebase มี service ที่ให้บริการอยู่หลายตัวมากๆ ซึ่งบริการหลักๆของ Firebase ประกอบด้วย
Authentication
ในทุกๆ application จำเป็นต้องมีการ authentication แน่นอน ดังนั้น Firebase จึงนำ authentication มาเป็นส่วนหนึ่งใน Firebase ซึ่งถ้าเราจะทำการ Authen Firebase ได้เตรียมทางเลือกไว้ 2 วิธีด้วยกันคือ
1. Firebase UI
Firebase จะเตรียมหน้า Authentication Workflow มาให้ดังนั้นเราแค่นำ FirebaseUI เข้าไปใส่ใน application Firebase จะทำหน้าที่จัดการเรื่อง authentication ให้เราเอง วิธีนี้จะเรียกว่า Drop-in authentication ซึ่งตอนนี้จะ support แค่ iOS, Android และ Web เท่านั้น
2. Firebase SDK
แต่ถ้าต้องการให้ application ของเราจัดการเรื่อง authentication เองทั้งหมดให้ ใช้ Firebase SDK ซึ่งจะแยกวิธีการ authentication ได้หลายแบบดังนี้
- Email และ Password
- เบอร์โทรศัพท์
- Federated identity provider เราสามารถ authen ด้วย account ของ identity provider เหล่านี้ Google ,Apple ,Facebook ,Twitter ,Github
- Anonymous account วิธีนี้ user ไม่จำเป็นต้อง sign-in ในครั้งแรก และ user สามารถ upgrade ไปเป็น user แบบปกติหลังได้
- Custom auth system integration สามารถเชื่อมกับ sign-in ที่เรามีอยู่แล้วก็ได้
การใช้ Firebase SDK นั้น support ทั้ง iOS, Android, Web, C++ และ Unity
ราคาของ Authentication
เราสามารถใช้งาน Firebase Authentication ได้ฟรีโดยที่มีข้อจำกัดดังนี้
- สามารถส่ง SMS ได้ 10 SMS/วัน
- authen ได้ 50,000 ครั้ง/เดือน
- สำหรับ Single Sign-On(SAML และ OIDC) ได้ 50 ครั้ง/เดือน
Realtime database
ฐานข้อมูลก็เป็นอีกหนึ่งหัวใจของการใช้ Firebase เนื่องจาก database ของ Firebase ทำงานแบบ realtime ดังนั้น solution ที่เหมาะกับ Firebase คือ Application ที่ต้องการความเป็น realtime เช่น การ booking ตั๋ว หรือ realtime monitoring
ฐานข้อมูลของ Firebase จะเป็น NoSQL โดยจะเก็บข้อมูลเป็น JSON Tree เมื่อมีการเปลี่ยนแปลงใดๆเกิดขึ้นกับ database ตัว client ที่ connect กับ database นี้ทุกๆตัวจะได้รับการเปลี่ยนแปลงนี้ทันที(realtime)
ราคาของ Realtime Database
เราสามารถใช้งาน Realtime Database ได้ฟรีโดยมีข้อจำกัดดังนี้
- จำกัดที่ 100 connections
- ขนาดของ Database ไม่เกิน 1 GB
- อ่านข้อมูลได้ไม่เกิน 10 GB/เดือน
- 1 Project มี database ได้ 1 database เท่านั้น
Hosting
เราสามารถนำไฟล์ HTML,CSS,JavaScript และอื่นๆ ขึ้นไปไว้บน Firebase hosting ได้เหมือนกับ web server ที่เราใช้บริการ แต่จะไม่รองรับภาษาฝั่ง server-side ทั้งหลาย นั่นคือถ้าเรามี content ที่เป็น static เราสามารถนำไป host อยู่บน Firebase Hosting ได้
ข้อดี ของการใช้ Firebase Hosting คือเราจะมี CDN และ SSL ให้ใช้แบบฟรี และไม่ต้องปวดหัวกับการ scale
ราคาของ Firebase Hosting
เราสามารถใช้บริการของ Firebase Hosting ได้ฟรีโดยมีข้อจำกัดดังนี้
- ใช้ Storage ได้ 10 GB
- สามารถ Upload/Download ได้ 360 Mb/วัน
- SSL และ Custom domain ได้ฟรี
- 1 Project สามารถมีได้หลาย Site
Cloud Functions
เป็นบริการแบบ Funtion as a Service(FaaS) ซึ่งจะคิดราคาตามปริมาณการ execute functions นั้น(ถ้าไม่มีการใช้งานก็ไม่ต้องจ่าย)
ซึ่งใน Firebase เราจะต้องใช้ Cloud Functions ใน 2 กรณีคือ
- เมื่อเราต้่องการสร้าง Logic อยู่บนฝั่ง server เนื่องจาก Mobile Application สามารถทำ Reverse Engineering ได้
- เมื่อเราต้องการให้เปลี่ยนแปลง Function แล้วมีผลกับทุกๆ Client(เราไม่สามารถบังคับให้ user ทุกคน update Mobile App ได้)
- สร้าง Triggers เพื่อทำงานอัตโนมัติ ซึ่งจะเหมือนกับที่เราใช้ trigger ใน database ทั่วไป ส่วนใหญ่เราต้องสร้าง Cloud Functions เพื่อรักษาความถูกต้องของข้อมูล
ตัวอย่างการใช้งาน Cloud Functions
- เมื่อ user login เข้ามาในระบบให้ส่ง email ไปหา user คนนั้นโดยอัตโนมัติ
- เมื่อ user upload รูปภาพเข้าไปใน Storage ให้ทำการ resize รูปภาพโดยอัตโนมัติ
- เมื่อมีการ update ข้อมูลใน realtime database ให้ทำการ update ที่เก็บอยู่หลายๆจุดให้ตรงกัน
- เราสามารถใช้ Cloud Functions ในการส่ง message ผ่านทาง Firebase Cloud Messaging
- เราสามารถสร้าง API เพื่อให้บริการ user หรือระบบภายนอก
ราคาของ Cloud Functions
เราไม่สามารถใช้ Cloud Functions ด้วย Spark plan(Free plan) ได้เราต้องใช้ Blaze Plan(คิดค่าใช้จ่ายตามปริมาณการใช้งาน) ด้วยความที่เป็น Function as a service(FaaS) เราจึงจ่ายเมื่อใช้งาน functions นี้เกิน 2 ล้านครั้ง/เดือน หลังจากนั้นคิด 0.4 usd หรือประมาณ 15 บาท/ 1 ล้าน executions
และนอกจากนี้ Google ยังคิดค่า Compute ระหว่างที่ Cloud Functions ทำงาน โดยจะคิดตามขนาดของ CPU และ Memory ที่ใช้ ถ้าใช้หน่วยประมวลผลเยอะและกิน memory เยอะราคาก็จะแพง ดูตารางราคาได้ที่นี่
Cloud Storage for Firebase
คือบริการพื้นที่สำหรับเก็บข้อมูลสำหรับเก็บไฟล์รูปภาพ, ไฟล์เสียง, video และอื่นๆ ซึ่ง Cloud storage จะถูกจำกัดสิทธิของการอ่านเขียนตาม user ที่ authen เข้ามาทาง Firebase Authentication และ Firebase ยังดูแลเรื่องของ
- Secured connection
- Auto resume ในกรณีที่เกิด connection error Firebase จะกลับมาส่ง file ต่อโดยอัตโนมัติ
- Auto scale เมื่อมี user upload ไฟล์เข้ามาในปริมาณมากๆ
Cloud Firestore
Cloud Firestore เป็น Database as a Service(DaaS) คือเราสามารถสร้าง database server ขึ้นมาใช้งานได้โดยที่เราไม่ต้องดูแล infrastructure
ซึ่งมีคุณสมบัติของ Cloud Firestore มีดังนี้
-
เป็น NoSQL ที่เก็บข้อมุลเป็น JSON
-
เป็น Documents database เหมือทน MongoDB
-
จัดเก็บข้อมูลเป็น document เล็กๆ
-
เราสามารถเลือก subscribe การเปลี่ยนแปลงของ database ได้(เมื่อเพิ่มข้อมูลลง database ฝั่ง application ก็จะ update ข้อมูลทันที)
-
จำกัดสิทธิการเข้าถึงได้ด้วย Security Rules
-
Firestore เป็น database ที่ Firebase แนะนำให้ใช้ เนื่องจาก Firestore มีข้อดีดังต่อไปนี้
- client จะ subscribe การเปลี่ยนแปลง data ไม่ต้องมี overhead ในการ sync
- Firestore จะ query ได้เร็วกว่า realtime database
- Firestore จะรองรับการ query ที่ซับซ้อนกว่า realtime database
- Firestore จะเก็บเป็น JSON ซึ่งจะทำให้เราทำ denormalize น้อยลง
ราคาของ Cloud Firestore
เราสามารถใช้งาน Cloud Firestore ได้ฟรีโดยมีข้อจำกัดดังนี้
- เก็บข้อมูลได้สูงสุด 1 GiB
- ส่งข้อมูลออกไปนอก network ได้ 10 GiB/เดือน
- เขียนข่้อมูลลง database ได้ 20,000 ครั้ง/วัน
- อ่านข้อมูลจาก database ได้ 50,000 ครั้ง/วัน
- ลบข้อมูลออกจาก database ได้ 20,000 ครั้ง/วัน
Firebase ML
เป็นเครื่องมือที่ช่วยให้เราสร้าง Machine Learning(ML) ได้ง่ายขึ้น ซึ่ง service ที่ให้บริการจะเป็น Machine Learning แบบสำเร็จรูปเราสามารถ upload data ขึ้นไปใน Firebase ML เพื่อให้ Firebase ML สร้าง Model ขึ้นมาให้เรา โดยที่เราไม่จำเป็นต้องรู้จัก Deep Learning หรือ Neural Networks เลย
และไม่ใช่แค่มือใหม่เท่านั้นสำหรับคนที่มี Tensor Flow Lite Model อยู่แล้วก็สามารถ upload ขึ้นไปใช้งานบน Firebase ML ได้เช่นเดียวกัน
ราคาของ Firebase ML
เราสามารถ Upload Tensor Flow Model ขึ้นไปใช้งานบน Firebase ML ได้__ฟรี__
แต่ถ้าต้องการใช้งาน Cloud Vision API เราต้่องใช้ Blaze plan(คิดค่าใช้จ่ายตามปริมาณการใช้งาน) เท่านั้น ซึ่งถ้าเราใช้่ Blaze plan เราจะสามารถใช้ Cloud Vision API ได้ 1000 ครั้ง/เดือน
ข้อดีและข้อเสียของ Firebase
จากที่เรารู้จักกับ services ต่างๆของ Firebase แล้ว ลองมาดูข้อดีและข้อเสียของการใช้งาน Firebase กันบ้าง
ข้อดีของ Firebase
- เราสามารถสร้าง backend ได้อย่างรวดเร็ว
- สามารถ Focus เฉพาะการทำงานของ Front-end อย่างเดียว
- ไม่ต้องเรียนรู้ภาษาหรือ Framework ฝั่ง server-side
- ใช้ Realtime database เพื่อตอบโจทย์ application ที่ต้องการข้อมูลแบบ realtime
- รองรับการ scale แบบอัตโนมัติ(Firebase เป็น Serverless)
- สามารถเลือกวิธีการ Authentication ได้หลายแบบ
- มี Crashlytics ที่ช่วยแจ้งเตือนเมื่อ service ของเราไม่ทำงาน
- มี Test Lab สำหรับทดสอบการทำงานร่วมกับ Mobile Application
- มี Firebase Cloud Messaging(FCB) สำหรับทำ Push notification บน Mobile
- มี Google Analytics สำหรับ Monitor ปริมาณการใช้งานของ user
- มี Firebase Performance สำหรับการ Monitor การทำงานของ service ที่เราสร้างขึ้น
- มี Firebase A/B Testing เพื่อดูผลกระทบที่เกิดขึ้นจากการ update version ได้ โดยเราสามารถ define กลุ่มของ user ขึ้นมาแต่ละกลุ่มจะเห็น application คนละ versions หลังจากนั้นเราจะใช้ข้อมูลจาก Google Analytics มาเปรียบเทียบว่า version ไหนดีกว่ากัน
ข้อเสียของ Firebase
หลังจาก list ข้อดีของ Firebase มาอย่างมากมาย เราลองมาดูข้อเสียของ Firebase กันบ้าง
- เราไม่สามารถย้าย data ออกไปยัง database อื่นๆได้
- เราไม่สามารถสร้าง query ที่ซับซ้อนมากๆได้
- เหมาะกับงานที่ไม่ได้ซับซ้อนมากนัก
- การพัฒนาด้วย Firebase SDK จะยึดติดกับ Firebase มากๆ(เปลี่ยน backend ไม่ได้)
- Support Android มากกว่า iOS
- ไป integrate กับ Business Intelligence(BI) ได้ยาก
- Firebase เป็น NoSQL ดังนั้นเราต้องจัดการเรื่อง transactions และความถูกต้องของข้อมูลเอง
- ไม่รองรับ Microservices Architecture
- ค่าใช้จ่ายจะสูงเมื่อ Application มีขนาดใหญ่ขึ้น
วิธีใช้ Firebase
การทำงานกับ Firebase คุณต้องรู้จักกับ Firebase SDK
Firebase SDK
เราสามารถใช้ Firebase SDK ในการคุยกับ Firebase ซึ่ง Firebase SDK มีให้เลือกหลายทางเลือกดังนี้
ตัวอย่างของการใช้ Firebase JavaScript SDK มีขั้นตอนในการนำไปใช้งาน ดังนี้
-
ติดตั้ง firebase sdk
$ npm i --save firebase
-
import firestore module เข้าไปก่อน
import { initializeApp } from 'firebase/app';
-
Setup configuratin
const firebaseConfig = { apiKey: 'FIREBASE API KEY', authDomain: 'FIREBASE AUTH DOMAIN', projectId: 'CLOUD FIRESTORE PROJECT ID' }; const app = initializeApp(firebaseConfig);
เริ่มต้นสร้าง Project ใน Firebase
ก่อนอื่นเราต้องเข้าไป Sign-in ด้วย Google account เพื่อเข้าใช้งาน Firebase โดยเข้าไปที่ https://console.firebase.google.com
หลังจากนั้นเราจะเข้าสู่หน้าแรกของ Firebase สร้าง Project ขึ้นมาใหม่ โดยจะมีขั้นตอนต่างๆ ดังนี้
เราต้อง Enable Google Analytics เพื่อให้ส่งพฤติกรรมการใช้งาน Firebase Application เข้าไปเพื่อวิเคราะห์พฤติกรรมของ User
หลังจากนั้นเราจะเข้าสู่หน้า console ซึ่งจะมี services ต่างของ firebase ให้เราเลือกใช้บริการ