Feature flag trong web/app: bật tắt tính năng an toàn mà không phải deploy lại

12 lượt xem · 1 trả lời

1. 05:19 06/08/2026
Trong phát triển web/app, không phải lúc nào một tính năng mới cũng nên được bật cho toàn bộ người dùng ngay sau khi deploy. Có những tính năng cần thử nghiệm nội bộ, mở dần theo nhóm người dùng, hoặc cần tắt nhanh nếu phát sinh lỗi. Đây là lúc feature flag trở nên rất hữu ích. Feature flag là gì? Feature flag, hay còn gọi là feature toggle, là cơ chế cho phép bật hoặc tắt một phần chức năng của hệ thống thông qua cấu hình, thay vì phải sửa code rồi deploy lại. Nói đơn giản, code của tính năng đã có sẵn trong hệ thống, nhưng việc người dùng có nhìn thấy hoặc sử dụng được hay không sẽ phụ thuộc vào một điều kiện cấu hình. Ví dụ: bạn đang xây dựng giao diện thanh toán mới. Thay vì thay thế ngay giao diện cũ cho toàn bộ người dùng, bạn có thể dùng feature flag: - Chỉ bật cho tài khoản nội bộ của công ty - Sau đó bật cho 5% người dùng thật - Nếu ổn định, tăng dần lên 25%, 50%, rồi 100% - Nếu phát hiện lỗi, tắt flag để quay lại giao diện cũ mà không cần rollback toàn bộ bản deploy Vì sao feature flag hữu ích? 1. Giảm rủi ro khi phát hành tính năng Deploy code và release tính năng là hai việc nên được tách riêng. Deploy là đưa code lên môi trường chạy thật. Release là cho người dùng sử dụng tính năng đó. Feature flag giúp bạn deploy trước, kiểm tra trước, rồi mới mở dần tính năng. Điều này đặc biệt hữu ích với các tính năng quan trọng như thanh toán, đặt hàng, đăng ký tài khoản, thay đổi giao diện chính hoặc logic tính phí. 2. Dễ thử nghiệm với nhóm người dùng nhỏ Thay vì hỏi “tính năng này có hoạt động tốt không?” sau khi đã mở cho tất cả mọi người, bạn có thể quan sát trên một nhóm nhỏ trước. Nếu có lỗi về hiệu năng, trải nghiệm hoặc dữ liệu, phạm vi ảnh hưởng sẽ nhỏ hơn nhiều. Ví dụ thực tế: một ứng dụng đặt lịch muốn thử luồng đặt lịch mới. Nhóm phát triển có thể bật flag cho nhân viên nội bộ, sau đó cho một nhóm khách hàng thân thiết. Khi đã chắc chắn luồng mới không làm giảm tỷ lệ hoàn tất đặt lịch, mới mở rộng dần. 3. Hỗ trợ xử lý sự cố nhanh Không phải sự cố nào cũng cần rollback toàn bộ phiên bản. Nếu lỗi chỉ nằm trong một tính năng đang được kiểm soát bằng flag, bạn có thể tắt tính năng đó trước để giảm ảnh hưởng, rồi điều tra sau. Ví dụ: tính năng gợi ý sản phẩm mới làm database bị tải cao. Nếu có feature flag, bạn có thể tắt phần gợi ý trong vài giây hoặc vài phút, thay vì vội vàng rollback cả ứng dụng. Một cách triển khai đơn giản Ở mức cơ bản, feature flag có thể là một bản ghi trong database hoặc một giá trị cấu hình: - new_checkout_enabled = true/false - enable_recommendation_for_user_ids = danh sách user được bật - new_profile_ui_rollout_percent = 10 Khi xử lý request, ứng dụng kiểm tra flag để quyết định chạy logic cũ hay logic mới. Ví dụ về tư duy xử lý: - Nếu người dùng thuộc nhóm được bật giao diện mới, hiển thị giao diện mới - Nếu không, tiếp tục hiển thị giao diện cũ - Nếu flag bị tắt hoàn toàn, mọi người đều quay lại luồng cũ Với dự án nhỏ, lưu flag trong database hoặc file cấu hình có thể đủ dùng. Với dự án lớn hơn, có thể cần giao diện quản trị để bật/tắt flag, phân quyền người được thay đổi, ghi lại lịch sử thay đổi và hỗ trợ rollout theo phần trăm. Những lỗi thường gặp khi dùng feature flag 1. Để flag tồn tại quá lâu Feature flag rất tiện, nhưng nếu không dọn dẹp, codebase sẽ nhanh chóng đầy các nhánh điều kiện kiểu “nếu flag A thì làm cách mới, nếu không thì làm cách cũ”. Sau vài tháng, không ai còn chắc flag nào đang dùng, flag nào có thể xóa. Lời khuyên: mỗi flag nên có mục đích rõ ràng, người phụ trách và thời điểm dự kiến dọn dẹp. Khi tính năng đã ổn định và bật cho 100% người dùng, hãy xóa nhánh code cũ. 2. Dùng flag cho mọi thứ Không phải cấu hình nào cũng là feature flag. Nếu lạm dụng, hệ thống sẽ khó kiểm soát. Feature flag nên dùng cho những thay đổi có rủi ro, cần bật/tắt linh hoạt, cần rollout từng phần hoặc cần thử nghiệm. 3. Không ghi log khi thay đổi flag Việc bật/tắt flag có thể ảnh hưởng trực tiếp đến hành vi của hệ thống. Nếu không có lịch sử thay đổi, khi có lỗi xảy ra, đội kỹ thuật rất khó biết nguyên nhân có phải do ai đó vừa bật một tính năng hay không. Tối thiểu nên lưu lại: - Ai thay đổi flag - Thay đổi lúc nào - Giá trị cũ và giá trị mới - Lý do thay đổi nếu có 4. Không kiểm thử cả hai nhánh cũ và mới Khi dùng feature flag, hệ thống thường có ít nhất hai đường chạy: tính năng cũ và tính năng mới. Nếu chỉ kiểm thử một bên, bạn có thể gặp lỗi khi tắt flag hoặc khi một nhóm người dùng vẫn còn ở luồng cũ. Lời khuyên có thể áp dụng ngay - Đặt tên flag rõ nghĩa, ví dụ: enable_new_checkout thay vì flag1 - Có mô tả ngắn cho mỗi flag: dùng để làm gì, ảnh hưởng khu vực nào - Chỉ cho người có trách nhiệm thay đổi flag trên môi trường thật - Ghi log mọi thay đổi quan trọng - Dọn dẹp flag sau khi rollout hoàn tất - Tránh để logic nghiệp vụ quan trọng trở nên rối vì quá nhiều điều kiện flag lồng nhau Kết luận Feature flag là một kỹ thuật nhỏ nhưng rất thực tế trong phát triển web/app. Nó giúp đội phát triển phát hành tính năng an toàn hơn, thử nghiệm có kiểm soát hơn và phản ứng nhanh hơn khi có sự cố. Tuy nhiên, feature flag không nên được xem là chỗ “giấu tạm” mọi thay đổi. Nếu dùng có kỷ luật, đặt tên rõ ràng, ghi log đầy đủ và dọn dẹp định kỳ, đây sẽ là một công cụ mạnh giúp dự án vận hành ổn định hơn khi liên tục phát triển tính năng mới.
0 Facebook
2. 17:54 26/10/2026
Trả lời Quản Trị Viên Trong phát triển web/app, không phải lúc nào một tính năng mới cũng nên được bật cho toàn bộ người dùng ngay sau khi dep…
Bài viết rất sát thực tế, nhất là phần tách deploy và release. Mình muốn bổ sung một điểm nhỏ: nếu flag được đọc từ database trong mỗi request thì nên cache ngắn và có cơ chế invalidate rõ ràng, tránh biến feature flag thành điểm nghẽn hiệu năng. Với rollout theo phần trăm, nên hash user_id ổn định để cùng một người dùng luôn vào cùng nhánh, tránh trải nghiệm bị nhảy qua lại giữa giao diện cũ và mới. Ngoài ra, các tính năng rủi ro cao như thanh toán nên có kill switch riêng, chỉ cần tắt là quay về luồng cũ ngay, không phụ thuộc vào việc rollback cả bản deploy. Khi dọn flag, nên xóa cả nhánh code cũ lẫn cấu hình flag trong cùng một đợt để tránh sót điều kiện. Hiện bên bạn đang lưu flag ở database, file cấu hình hay dịch vụ quản lý flag riêng, và đã có giao diện quản trị cho người không phải dev bật tắt chưa?
0
Vui lòng đăng nhập để tham gia trả lời chủ đề này.
Điều hướng nhanh

Bạn muốn khám phá điều gì?

Tìm chủ đề, bài viết hoặc đi thẳng đến một khu vực của cộng đồng.

Esc để đóng Ctrl K để mở lại