BFF: Backends For Frontends
Trong các ứng dụng lớn và phức tạp, việc duy trì một backend duy nhất cho toàn bộ ứng dụng có thể rất khó khăn và tốn kém. Backends For Frontends (BFF) là một pattern nhằm tạo ra các backend riêng cho từng ứng dụng frontend, giúp giải quyết những vấn đề này. Pattern này được mô tả lần đầu tiên bởi Sam Newman gần 10 năm trước.
Vấn đề
Ban đầu, một ứng dụng có thể chỉ được thiết kế dành cho trình duyệt trên desktop. Thông thường, backend và frontend sẽ được phát triển song song. Tuy nhiên, nhu cầu về ứng dụng dành cho trình duyệt di động và ứng dụng di động native cũng xuất hiện. Tất cả các frontend sẽ cùng kết nối đến một backend duy nhất.
Lúc này, backend sẽ trở nên rất nặng nề vì phải đáp ứng nhu cầu của nhiều frontend khác nhau. Do đặc thù khác nhau giữa desktop và di động, giữa trình duyệt và native app, các frontend khác nhau phát sinh yêu cầu rất khác nhau đối với backend.
Những sự khác biệt này khiến backend trở nên rất phức tạp để có thể đáp ứng mọi yêu cầu. Phát triển tính năng mới và cập nhật tính năng cũ đều phải được tiến hành thận trọng. Việc tối ưu hóa hiệu suất cũng khó khăn hơn. Team backend sẽ phải làm việc vất vả hơn rất nhiều và có thể trở thành điểm tắc cổ chai trong quá trình phát triển phần mềm.
Vì phát sinh quá nhiều thứ phức tạp, việc điều phối công việc giữa các team backend và frontend cũng tốn thời gian và công sức hơn. Mỗi sự thay đổi ở phía backend cũng phải được kiểm tra kỹ càng để không làm ảnh hưởng đến toàn bộ frontend. Việc giao tiếp giữa các team phải diễn ra rất trơn tru mới đảm bảo dự án được tiến hành thuận lợi. Các team phải bỏ nhiều thời gian và công sức cho việc họp hành hơn là lập trình.
Giải pháp
BFF (Backends For Frontends) là giải pháp cho tình huống này. BFF là một lớp trung gian giữa frontend và backend chính, được thiết kế để xử lý các yêu cầu cụ thể của từng frontend. Thay vì sử dụng một backend chung cho tất cả các frontend, mỗi frontend sẽ có một backend riêng biệt, được tối ưu hóa cho nhu cầu của nó.
Lợi ích của BFF
Xây dựng backend riêng cho từng frontend tương ứng sẽ mang lại nhiều lợi ích:
- Tối ưu hóa: Mỗi backend được tùy chỉnh để phù hợp với yêu cầu cụ thể của frontend, giúp nó nhỏ gọn hơn, và có hiệu suất tốt hơn.
- Tự chủ: Các team phát triển frontend có thể kiểm soát backend của riêng họ, cho phép linh hoạt trong việc chọn ngôn ngữ lập trình, lịch phát hành, và tích hợp tính năng.
- Linh hoạt: Bằng cách tách biệt các backend, việc phát triển và bảo trì trở nên dễ dàng hơn, giảm thiểu xung đột và sự phụ thuộc giữa các team.
Vấn đề của BFF
Tuy là giải pháp để giải quyết vấn đề trên, việc triển khai BFF trong thực tế cũng gặp một số khó khăn nhất định. Dưới đây là một số vấn đề BFF sẽ gặp phải khi triển khai:
- Cần suy nghĩ cẩn thận về việc triển khai bao nhiêu backend là phù hợp.
- Nếu mọi frontend (ví dụ như web, mobile app) đều gửi request giống nhau, cần suy xét cẩn thận có nên triển khai BFF hay không hay sử dụng một backend chung cho tất cả. Việc này sẽ rất khó khăn trong những giai đoạn sớm của dự án khi cần suy nghĩ về các yêu cầu hiện tại cũng như những thay đổi tiềm tàng trong tương lai.
- Việc code lặp lại ở những backend khác nhau sẽ xảy ra thường xuyên.
- Backend được triển khai cho riêng frontend sẽ được tối ưu cho frontend đó. Do đó, những logic phức tạp và các xử lý chung cho toàn hệ thống vẫn cần phát triển và quản lý riêng biệt.
- Pattern này sẽ làm phát sinh thêm nhiều công việc hơn cho dev team khi vừa phải xây dựng backend mới trong khi vẫn phải tiếp tục cập nhật các backend hiện tại. Nó thích hợp với các dự án lớn nhiều nhân lực để có thể chia thành nhiều team nhỏ làm việc độc lập.
- Độ phức tạp trong quản lý: Mỗi backend có vòng đời, yêu cầu bảo trì và bảo mật riêng, đòi hỏi sự quản lý cẩn thận.
- Việc duy trì nhiều backend có thể tăng chi phí vận hành và yêu cầu nhiều tài nguyên hơn.
- Việc thêm một lớp trung gian có thể làm tăng độ trễ do phải thực hiện thêm một bước giao tiếp.
Khi nào nên sử dụng BFF
Những trường hợp nên dùng
- Khi các frontend có yêu cầu rất khác nhau và cần tối ưu hóa riêng biệt.
- Khi việc duy trì một backend chung trở nên quá phức tạp và tốn kém.
- Khi cần tăng tính linh hoạt và tự chủ cho các team phát triển frontend.
- Khi code backend dùng chung bắt đầu phải dùng nhiều câu lệnh rẽ nhánh để xử lý riêng cho từng client.
- Khi một/một vài backend cần sử dụng ngôn ngữ lập trình riêng biệt.
Những trường hợp không nên dùng
- Khi các frontend có yêu cầu tương tự nhau và có thể sử dụng chung một backend.
- Khi số lượng frontend ít và không đòi hỏi sự tối ưu hóa riêng biệt
Kết luận
Backends For Frontends (BFF) là một giải pháp mạnh mẽ cho việc phát triển ứng dụng đa nền tảng, nhưng cũng cần cân nhắc kỹ lưỡng trước khi triển khai để đảm bảo phù hợp với nhu cầu cụ thể của dự án.
Welcome

Đây là thế giới của manhhomienbienthuy (naa). Chào mừng đến với thế giới của tôi!
Bài viết liên quan
Bài viết mới
Chuyên mục
Lưu trữ theo năm
Thông tin liên hệ
Cảm ơn bạn đã quan tâm blog của tôi. Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.