Introduction
Xuất phát từ mong muốn hỗ trợ giao diện trên nhiều nền tảng thì ở phía backend tạo ra các API genneric để dễ dàng tích hợp sau này, ở phía góc độ người triển khai thấy rằng điều đó sẽ làm tiết kiệm thời gian và giảm đi chi phí triển khai hỗ trợ nền tảng mới.
Nhưng càng phát triển thì chúng ta càng nhồi nhét nhiều thứ vào một nơi. Vì lúc này hệ thống đòi hỏi phải hỗ trợ được nhiều nền tảng hơn, mà mỗi nền tảng lại yêu cầu đặc điểm dữ liệu trả về có những yêu cầu cụ thể Ví dụ: Trên thiết bị di động không cần thiết trả về nhiều dữ liệu giống như trên nền tảng web desktop vì điều đó đơn giản là tài nguyên trên thiết bị di động không có nhiều giống như trên desktop.
Backend For Fontend pattern(BFF)
Thông thường ý tưởng của người phát triển ban đầu sẽ xuất phát sử dụng “A genneral purpose API backend”
Đối với những hệ thống được xác định từ trước với những nền tảng sẽ hỗ trợ thì cách tiếp cận này cũng sẽ thành công bởi vì
- Thứ nhất: Tách riêng backend và đưa phần xử lý đặt tại đó làm cho phần hiển thị trở nên nhẹ và tốn ít tài nguyên hơn. Ở phía giao diện chỉ có nhiệm vụ là hiện thị dữ liệu và thu thập tương tác của người dùng.
- Thứ hai: Tiết kiệm được thời gian và chi phí phát triển những chức năng sử dụng chung cho các nền tảng thay vì tách riêng và sẽ bị trùng lặp “hight coupling“.
- Thứ ba: Cách tiếp cận này có thể định tuyến các yêu cầu của ứng dụng khách(client) và xử lý xuyên suốt (bảo mật, auth, cached) điều này có thể làm giảm độ trễ và tài nguyên máy chủ(server).
Tuy nhiên từng nền tảng giao diện(User Interface) thì rất khác chưa kể logic được thiết kế riêng cho từng giao diện mà không phải chỉ đơn thuần là sắp xếp và trả về dữ liệu thông thường. Như tôi đã đề cập trước đó, ví dụ như đối với thiết bị di động sẽ rất khác về kích thước màn hình hiện thị, giới hạn hiện thị, dung lượng pin, bộ nhớ. Các khác biệt sẽ diện ra thường xuyên dẫn tới người phát triển cần cập nhật thay đổi đó trong khi vẫn phải giữ không làm ảnh hưởng tới nhưng giao diện khác.
Thông thường thì người phát triển sẽ cố gắng điều chỉnh những yêu câu cụ thể từ phía giao diện bằng cách tạo ra những đoạn code đặc biệt để xử lý. Nhưng cách này làm vấn đề càng thêm nghiêm trọng hơn bởi lúc này hệ thống sẽ cần phải cân bằng cả những ưu tiên cho những yêu cầu đặc biết và những yêu cầu chung từ các giao diện. Thêm vào đó các service phía dưới cũng sẽ bị ảnh hưởng theo để đáp ứng được những logic đặc biệt.
Một vấn đề khác mà “genneral purpose backedn server-side” sẽ gặp phải đó là sẽ xảy ra hiện tượng thắt cổ trai “bottleneck” khi có quá nhiều yêu cầu trên cùng một cấu trúc hạ tầng.
Một giải pháp cho những vấn đề trên mà hiện được sử dụng bởi SoundCloud thay “genneral purpose backedn server-side” đó là Backend For Frontend(BFF)(2)