Tường tận về Firebase [Phần 1]
Trong thời đại này, gần như mọi thứ đều có riêng cho nó một app, từ vật dụng gia đình, các dịch vụ, cho đến, doanh nghiệp, quá trình sản xuất, hay thậm chí một app cho chính bạn.
Nhu cầu phát triển app một cách nhanh chóng, có thể là để giải quyết một vấn đề cấp thiết đặt ra cho chúng ta bài toán rút ngắn quá trình phát triển sản phẩm. Lúc này các bạn có thể sẽ cần phải biết đến Firebase - một nền tảng của Google giúp ta xây dựng, hoàn thiện, và phát triển hơn nữa app của mình.
Chỉ một dòng định nghĩa ngắn ngủi đó chắc hẳn không thể làm các bạn đang muốn tìm hiểu về Firebase có thể thõa mãn. Vì vậy hãy theo dõi tiếp những nội dung tiếp theo nhé.
Một định nghĩa chi tiết hơn
Firebase là một bộ công cụ để "xây dựng, hoàn thiện và phát triển app hơn nữa". Bộ công cụ này cho bạn tiếp cận đến nhiều cấu phần khác nhau - những thành phần mà developer (dev) thường sẽ phải làm - nhưng không muốn làm khi xây dựng một product - vì chúng ta đơn giải thích tập trung vào phát triển chức năng chính của app, về trải nghiệm người dùng.
Những thành phần (mà cụ thể là các services) mà Firebase cung cấp bao gồm: phân tích, chứng thực (authenticattion), databases, storage, push messaging và vân vân và vân vân ... Những services này tất cả đều được vận hành (host) trên cloud và được tự động mở rộng (scale) mà developer sẽ thậm chí không mất tí effort nào để làm.
Nói một cách khác, các services trên (mà nếu developer tự làm sẽ được gọi là backend) được vận hành và bảo trì bởi Google. Những SDKs dành cho client sẽ tương tác trực tiếp tới các service này. Vì vậy nó khác mô hình truyền thống rất quen thuộc, yêu cầu chúng ta phải viết code cả Frontend và Backend. Ở mô hình truyền thống, Frontend tương tác với Backend qua API, Backend sẽ làm các phần việc xử lý data. Tuy nhiên với các app sử dụng Firebase, ta sẽ không cần Backend nữa, phần việc xử lý sẽ đưa về Client - có nghĩa client sẽ chứa các code query trực tiếp Database (được cung cấp bởi Firebase)
Vậy là ta đã có thế búng tay bay màu Backend!
Nói đến đây Các bạn dev Backend đừng lo lắng nha, vì có rất nhiều lý do để trong các trường hợp ta vẫn cần phải có một Backend server. Chính vì thế mà Firebase cũng cung cấp các dịch vụ giữ vai trò như Backend. Các phần sau của bài viết sẽ nhắc đến điều này nhé.
Tổng cộng, có 17 dịch vụ khác nhau trong đại gia đình Firebase:
Firebase thích hợp với những app kiểu nào?
Thật ra không có giới hạn các kiểu app có thể ứng dụng Firebase, mà nói đúng hơn là có giới hạn những platform mà Firebase có thể được sử dụng. iOS và Android là 2 đối tượng chính của Firebase SDKs, ngoài ra Firebase đang tích cực để support nhiều hơn cho web, Flutter, Unity, và C++. Bạn có thể đã biết - Admin SDK tương thích với nhiều language và nhiều chủng backend mà bạn yêu cầu.
Dưới lớp SDKs còn có các library được gọ FirebaseUI (Android, iOS, web) hỗ trợ các dev làm việc với Firebase thuận tiện hơn nữa.
Dưới đây là ví dụ các dev đang sử dụng Firebase
Bạn Greta xây dựng mobile games với Unity:
Bạn Shawn thì phát triển một app social network:
Các hình ảnh về các developer trên đều là người thật - việc thật
Xây dựng phần cốt lõi của app
Trong đại gia đình Firebase, thì các dịch vụ sau là để phục vụ phần xây dựng
Authentication — user login và định danh Realtime Database — realtime, host trên cloud, NoSQL Cloud Firestore — realtime, host trên cloud, NoSQL Cloud Storage — storage có thể tự scale Cloud Functions — “serverless”, là một backend hướng sự kiện Firebase Hosting — dịch vụ web hosting ML Kit — SDK cho các task Machine Learning phổ biến
Firebase Authentication sẽ lo phần login và định danh cho app của bạn. Một services khác của Firebase cần bạn phải hoàn thiện phần Authentication này để có thể thiết lập chuẩn chỉnh.
Điểm đặc biệt về services này là dev có thể dễ dàng bảo mật phần login, mà nếu bình thường phải "code chay" thì sẽ rất khó nhằn
Firebase Realtime Database và Cloud Firestore cung cấp những dịch vụ về Database (DB) - là những database "realtime, host trên cloud, NoSQL ". Những DB loại này có những điểm mạnh và điểm yếu riêng. Các bạn có thể tìm hiểu thêm về điều này qua bài viết để xem loại DB nào phù hợp với nhu cầu của bạn nhé.
Bật mí: kinh nghiệm (của tác gỉa bài viết gốc này) là hãy bắt đầu với Firestore - vì dịch vụ này sinh sau - nắm rõ nhu cầu tâm lý anh em dev - biết chúng ta cần gì rồi
Một số bạn có thể nhầm lẫn giữa Firebase và Firestore, giờ thì chúng ta đã hiểu Firestore chỉ là một services realtime Databse trong Firebase mà thôi nhé! Điều nữa là Firestore là một sản phẩm chính xác là của Google Cloud. Nhưng tại sao lại list trong Firebase? Vì Firebase bổ sung SDKs để mobile client có thể sử dụng trực tiếp Firestore.
Điều tuyệt vời ở những Database này là chúng cho phép "update realtime" các data mỗi khi data này có sự thay đổi trong DB. Cách thức thực hiện, là ở các SDK (phía client) sẽ setup "listener" liên tục lắng nghe các sự kiện liên quan đến data này và sẽ phản ứng khi có sự thay đổi trong data. Điều này khiến app chúng ta ko cần F5 cũng tự động được cập nhật!
Với realtime data mà Firestore hay Realtime Database cung cấp, 2 bạn dev Greta thì có thể cập nhật liên tục điểm trong game để người chơi theo dõi, hay dev Shawn thì có thể cung cấp tính năng chat trong app của anh ấy!
Ngược dòng lịch sử: Realtime Database vốn dĩ chính là Firebase trước khi mà Firebase được mua lại bởi Google vào năm 2014. Ngày nay mọi vẫn còn nhầm lẫn hiểu Firebase là Realtime Database. Nhưng chúng ta ở đây sau bài viết này đã hiểu đó là sai rồi đúng ko!
Cloud Storage là một file storage có thể tự động scale với quy mô rất lớn. Nó cũng là sản phẩm của Google Cloud, không phải của Firebase.
Với Cloud Storage dành cho Firebase, bạn sẽ có client SDKs để app client có thể upload và download files trực tiếp đến Cloud Storage “bucket”.
Với Cloud Storage, ta không cần phải lo đến chuyện thiếu dung lượng lưu trữ? Bạn đã bao giờ nghĩ đến phương án thiết kế hệ thống để lưu đến exabytes dung lượng data? Nhưng Cloud Storage thì có thể mở rộng để lưu từng đấy đấy!
Authentication làm việc rất tốt với 3 services này (kết hợp với security rules) đó là Realtime Database, Firestore, và Cloud Storage) từ đó chúng ta có thể quản lý access với data lưu ở Storage, điều này đảm bảo rằng clients chỉ có thể access data chỉ bằng cách mà bạn đã quy định.
User sau khi login vào App với Authentication sẽ được cung cấp token, token này đã được set những security rules quy định rõ có thể làm được gì với data nào.
Đừng bao giờ mặc kệ vấn đề thông tin cá nhân "persional data". Có nghĩa là bạn có thể, nhưng chuyện này không thể chấp nhận được. Hãy sử dụng Firebase Security Rules! (Xem comic này trên XKCD)
Cloud Functions lại là một Google Cloud service khác. Nó phối hợp ăn ý với Firebase và các dịch vụ Cloud khác của Google. Sử dụng Firebase SDKs cho Cloud Functions, các bạn có thể viết và deploy code, run nó trên nền tảng "serverless". Các cloud functions sẽ được "kích hoạt" hay phản hồi lại với các sự kiện (events) mà xuất phát từ các services khác của bạn trên Firebase hoặc Google Cloud.
Khi nhắc đến "serverless", ta không nên nghĩ đó là "không có server". Với kiến trúc backend dạng "serverless", vẫn có sự tham gia của server ở đó, chỉ là chúng ta không cần phải biết/ hiểu quá nhiều về nó. Nói các khác, chúng ta không phải quản lý, bảo trì, scale hay bất kì các nghiệp vụ devOps nào khác (như mô hình kiến trúc Server truyền thống yêu cầu). Dev chỉ cần viết và deploy code, phần còn lại để Google lo (thật ra là dev phải trả thêm tiền nữa - chắc chắn rồi )
Có rất nhiều thứ bạn có thể làm với Cloud Functions — xem thêm ví dụ! Nhưng có một concept về cách ứng dụng Functions đó là: Những Firebase services Firebase products (database, storage, auth ..) phát đi các event khi mà data trong các services đó thay đổi, và code của bạn mà deploy trên Cloud Functions sẽ được "kích hoạt" để phản ứng lại các sự kiện đó.
Bạn dev Shawn của chúng ta sử dụng Cloud Functions để tự động delete data từ database và storage khi user xóa acocunt của họ.
Firebase Hosting là một global web hosting CDN (Content Delivery Network) được bảo mật. Dịch vụ này cực kì tốt cho các nội dung tĩnh (HTML, CSS, JS, images) sử dụng server tương tác trự tiếp với users. Bạn có thể setup website nhanh chóng với domain mặc định (hoặc domain bạn tự mua) với SSL được thiết lập sẵn mà không phải mất thêm phí
Firebase Hosting có một mắt xích quan trọng trong việc kết hợp với các dịch vụ khác trong hệ sinh thái Firebase, đó là Cloud Functions. Firebase Hosting cho ta tùy chính request và response đi và đến các Cloud Functions khi viết các functions kiểu HTTP, và nó còn cho phép ta cache các response từ functions. Ta có thể ứng dụng điều này để build các “RESTful” API!
ML Kit for Firebase cho phép bạn sử dụng tinh hoa Machine Learning (ML) từ các chuyên gia hàng đầu của Google mà không cần phải biết gì về ML. Một ví dụ, ML Kit có thể nhận diện được nội dung photo mà ảnh bạn đã chụp: là text, khuôn mặt hay phong cảnh. Và ML Kit có thể chạy trên mobile mà tiêu tốn một lượng điện rất ít.
Đối với các bạn có kiến thức về ML, bạn có thể upload TensorFlow model cho những trường hợp tinh vi hơn.
Và Phần 1 trong chuyên mục "Tường Tận về Firebase" chia sẻ về Firebase làm thế nào để giúp developer "xây dựng" (build) sản phẩm của mình.
Phần 2 ta sẽ cùng nhau đi tiếp về cách mà Firebase giúp ta "hoàn thiện"(improve) và "phát triển hơn nữa"(grow) sản phẩm của mình nhé.
Chia sẻ: Nguyen Van Tam via viblo.asia
Comments