- Cloudflare Flagship là dịch vụ feature flag của Cloudflare, dùng để kiểm soát việc bật hiển thị tính năng của ứng dụng mà không cần triển khai lại mã
- Các flag được định nghĩa bằng quy tắc nhắm mục tiêu và rollout theo tỷ lệ, có thể được đánh giá trực tiếp từ binding gốc của Workers
- Tương thích với OpenFeature và có thể dùng SDK @cloudflare/flagship để đánh giá flag trên Workers, Node.js và trình duyệt
- Việc nhắm mục tiêu hỗ trợ thuộc tính người dùng, 11 toán tử so sánh, nhóm AND/OR, đánh giá tuần tự và duy trì giá trị bằng consistent hashing
- Biến thể hỗ trợ boolean, chuỗi, số và đối tượng JSON, được tạo, sửa, xóa theo từng ứng dụng trong bảng điều khiển Cloudflare
Tính năng chính
-
Binding cho Workers
- Binding reference
- Đánh giá flag bằng binding gốc của Workers
- Cung cấp các phương thức an toàn kiểu dữ liệu và tự động fallback về giá trị mặc định
-
SDK OpenFeature
- View SDK docs
- Có thể dùng provider OpenFeature @cloudflare/flagship để đánh giá flag trên Workers, Node.js và trình duyệt
- Khi chuyển từ nhà cung cấp flag khác sang, chỉ cần đổi một dòng cấu hình
-
Quy tắc nhắm mục tiêu
- Learn about targeting
- Cung cấp các giá trị flag khác nhau tùy theo thuộc tính người dùng
- Quy tắc hỗ trợ 11 toán tử so sánh, nhóm logic AND/OR và đánh giá tuần tự
-
Rollout theo tỷ lệ
- Learn about rollouts
- Có thể phát hành tính năng dần dần theo tỷ lệ người dùng
- Consistent hashing đảm bảo cùng một người dùng luôn nhận cùng một giá trị flag
-
Biến thể đa kiểu
- Use Multi-type variations
- Biến thể của flag có thể là boolean, chuỗi, số hoặc đối tượng JSON có cấu trúc
- Dùng biến thể đối tượng để truyền cả một khối cấu hình chỉ với một flag
-
Quản lý flag
- Use Flag management
- Có thể tạo, cập nhật và xóa flag trong bảng điều khiển Cloudflare
- Tổ chức flag theo các app được ánh xạ tới dự án hoặc dịch vụ
- Có thể tạo feature flag đầu tiên trong Get started guide
Các dịch vụ Cloudflare liên quan
- Workers: Xây dựng ứng dụng serverless trên mạng lưới toàn cầu của Cloudflare; Flagship được tích hợp gốc với Workers thông qua binding
- KV: Lưu trữ dữ liệu key-value trên toàn bộ mạng lưới toàn cầu của Cloudflare; Flagship sử dụng hạ tầng này để phân phối cấu hình flag
1 bình luận
Ý kiến trên Hacker News
Không nên đánh giá thấp một lớp trừu tượng có 0 lần round-trip mạng. Trên
f(feature_name, context), phần context có thể được tinh chỉnh rất chi tiết tới mức hiển thị theo tồn kho cụ thể, nhà cung cấp cụ thể, người dùng cụ thể của một khách hàng B2B cụ thể, một phân loại phụ cụ thể của mô hình kinh doanh, thậm chí cả khung giờ cụ thểNếu có thể viết logic trực tiếp và chạy nó như hằng số trong tight loop với tốc độ cao, độ linh hoạt của doanh nghiệp sẽ tăng lên đáng kể. Nếu nghĩ rằng câu chữ có thể thay đổi với một số khách hàng, chỉ cần biến nó thành mã có thể cấu hình được, rồi test và cờ cũng sẽ tự nhiên đi kèm
Tuy vậy, kiểu cấu hình 0-hop này cần một client execution engine tinh vi, và có vẻ Cloudflare không triển khai phần đó ở đây. Với Workers bị giới hạn bộ nhớ thì có thể hiểu được, nhưng với hạ tầng truyền thống thì kém thuyết phục hơn
Tôi khá thích cách làm của Statsig: đây là hướng tiếp cận kiểu “Server SDKs hold the entire ruleset of your project in memory...”
https://docs.statsig.com/sdks/how-evaluation-works
Cũng có thể tự xây. Chỉ cần đồng bộ tập quy tắc vào một vài cấu trúc dữ liệu trong một background thread mỗi vài giây rồi thay thế tham chiếu một cách nguyên tử. Sau đó chỉ cần một giao diện CRUD cho chiều của các quy tắc áp dụng
Tuy nhiên, nhất định phải có governance về việc ai được đụng vào những ứng viên hằng số nào. Quyền lực lớn đi kèm trách nhiệm lớn
Theo tôi, feature flag gần với mục đích dùng cùng phát triển theo trunk để bật tính năng trong môi trường QA, chưa đưa ra production, đồng thời cho phép PO/PM kiểm thử. Trunk-based development giúp DevOps nhanh và đơn giản mà không cần chiến lược branch phức tạp
Trong khi đó, cấu hình ứng dụng là một phần của chính ứng dụng, thuộc lĩnh vực tùy biến app theo bối cảnh kinh doanh. Tôi không biết có framework hay công cụ phù hợp nào cho việc đó không, nhưng hai thứ này cần được tách bạch rõ ràng
Chính tổ hợp modulo + số ngẫu nhiên đó là lý do các công cụ như LaunchDarkly phải cung cấp SDK cho nhiều ngôn ngữ, và các SDK tôi từng phải đụng tới đều hoàn toàn không hợp với ngôn ngữ tương ứng. Vì đẩy việc đánh giá ra edge mà cả hệ thống trở nên phức tạp hơn mức cần thiết
Thực tế chỉ cần thỉnh thoảng lấy lại bảng flag hiện tại “cho khách hàng này” là đủ, và đỡ phiền hơn nhiều. May là có Flipper nên giờ không còn phải tự xử lý chuyện này nữa
https://www.stigg.io/blog-posts/entitlements-untangled-the-m...
Việc tính phí theo số ghế trong hợp đồng hơi chát một chút nhưng vẫn ở mức chấp nhận được
Trông như Boolean-as-a-service được mạ vàng
Nếu đơn giản hóa theo kiểu đó thì mọi dịch vụ trên đời đều có thể bị quy về bits-as-a-service. Thực tế, những thứ này có giá trị kinh doanh chính đáng và việc cung cấp chúng cũng có độ phức tạp riêng
Bất kỳ công cụ SaaS nào cũng có thể bị gọi là “excel-as-a-service”, và đó là kiểu diễn đạt hầu như chẳng mang lại tác dụng gì
Trong tài liệu JS SDK có cảnh báo như sau: “Client provider requires an API token in order to fetch flag values. This token is not scoped to a single app, so anyone with the token could evaluate flags for every app in your account. Use caution in public applications”
https://developers.cloudflare.com/flagship/sdk/client-provid...
Tôi thắc mắc vì sao một client SDK được thiết kế để triển khai lên trình duyệt lại cần cảnh báo như vậy. Có phải điều đó có nghĩa là bất kỳ client nào cũng có thể gửi request với
targetingKeymới để quan sát flag của người dùng khác không?Dù flag không nên chứa thông tin nhạy cảm, đây vẫn có vẻ là một lựa chọn thiết kế thú vị
Khó tin là 6 tháng trước Cloudflare đã thực sự nghiêm túc quyết định làm một đối thủ của LaunchDarkly
Cái này thì tốt, nhưng trớ trêu là có lẽ tôi vẫn đang chờ chính tính năng này, thứ có thể sẽ được cung cấp thông qua Flagship, ra mắt
https://blog.cloudflare.com/enterprise-grade-features-for-al...
Có vẻ đến giờ vẫn chưa có trường hợp nào mà tính năng chỉ dành cho Enterprise được đưa xuống các gói trả phí thấp hơn
Thứ tôi đặc biệt quan tâm là cái này:
https://developers.cloudflare.com/speed/optimization/content...
Dạo này Cloudflare làm khá tốt, nhưng vẫn thiếu quản lý quyền chi tiết. Tôi vẫn phải tạo một tài khoản hoàn toàn riêng cho môi trường production, và vì một domain chỉ có thể gắn với một tài khoản nên SSO bị rối tung
Gửi email thì tôi vẫn đang dùng AWS, nên sẽ rất tốt nếu Cloudflare có thứ gì đó ở mảng này
Tôi mới biết đến OpenFeature và thấy nó khá hay. Có ai đã từng tích hợp nó chưa? https://openfeature.dev
Nói rõ để minh bạch thì tôi là CTO của Flagsmith. Trong vài năm qua tôi đã thấy xu hướng áp dụng OpenFeature tăng lên rất rõ. Trước đây chúng tôi phải khuyên khách hàng thử dùng, còn bây giờ chính khách hàng mang OpenFeature đến như một yêu cầu
Giờ mức độ hỗ trợ từ các vendor cũng đã khá trưởng thành và bao phủ gần như mọi ngôn ngữ. Nếu bạn đang tích hợp feature flag vào một dịch vụ mới, hoặc chuyển từ hệ thống tự xây sang giải pháp bên thứ ba, tôi khuyên dùng OpenFeature
Chúng tôi mất khoảng 2 tuần để làm một backend tùy chỉnh hoàn chỉnh. SDK cho nhiều ngôn ngữ đều hoạt động ổn. Tôi có tìm ra một lỗi, nhưng sau khi báo thì nó được sửa ngay trong ngày
Tôi không thực sự hiểu rõ feature flag. Nó khác gì về bản chất so với một giá trị Boolean trong cơ sở dữ liệu?
Những đội tự xây thường sẽ thấy vấn đề phình ra rất nhanh khi phía quản lý sản phẩm, marketing và sales muốn nhắm mục tiêu bằng các quy tắc ngày càng phức tạp hơn
Xét về độ khó tổng thể thì đây không phải bài toán đặc biệt hóc búa, nhưng quy mô của nó lớn. Có rất nhiều thứ cần thiết mà ban đầu không nhìn ra
Về bản chất, feature flag có thể xem là khá gần với một hệ thống phân quyền. Nó cho phép chỉ một số người dùng nhất định truy cập một số tính năng nhất định, và ai từng làm hệ thống phân quyền đều biết membership theo nhóm, nhóm phân cấp, vai trò, ACL, v.v. có thể trở nên phức tạp đến mức nào. Những yếu tố đó tương tự với các quy tắc nhắm mục tiêu khác nhau trong hệ thống feature flag
Cloudflare cũng dùng nội bộ theo cách tung tính năng mới hoặc bản build mới cho khách hàng miễn phí trước, rồi sau một thời gian ổn định mới mở rộng dần sang các khách hàng lớn hơn
Feature flag cũng có thể được bật ngẫu nhiên như một dạng fuzz test. Đừng chỉ nghĩ đến “thứ mới”, nó cũng có thể là “thay đổi hành vi”
Bạn có thể xem nó như một Boolean nằm phía trên mọi client, nhưng thông thường nó không được triển khai theo cách đó
Điểm hấp dẫn chính của feature flag là nó cho phép các tính năng lớn, vốn cần nhiều tháng và rất nhiều commit, vẫn có thể được phát triển ngay trên nhánh chính. Với tôi, điều đó tạo ra một quy trình phát triển nhẹ hơn và lặp nhanh hơn
Nó trái ngược với việc phải duy trì các nhánh riêng, thậm chí có cả mục tiêu triển khai riêng cho tính năng đang được phát triển lớn
Feature flag thường hay bị thiết kế quá mức
Chỉ cần kiểm tra giá trị cấu hình, giá trị trong cơ sở dữ liệu hoặc biến môi trường, rồi động chuyển sang nhánh này hay nhánh kia
Vậy là đủ. Bạn nên làm tính năng nhỏ lại, hoặc refactor mã để có thể chuyển đổi dễ dàng ở mức cao hơn
Nếu điều đó không dễ làm, thì một hệ thống feature flag phức tạp có thể hữu ích để điều phối việc kích hoạt tính năng giữa các microservice
Nếu có nhiều tính năng, một dashboard cũng có thể hữu ích
Nhưng tôi xem cả hai điều đó đều là tín hiệu mạnh cho thấy nên tránh feature flag. Feature flag phù hợp hơn với các thay đổi cục bộ và tạm thời; nếu không, độ phức tạp sẽ chồng chất và khiến việc quản lý, bảo trì trở nên khó khăn
Tất nhiên bạn sẽ không muốn người dùng mất tính năng chỉ vì họ vượt ngưỡng doanh thu hoặc đi qua biên giới, nên sẽ cần một kiểu triển khai theo dõi nào đó. Phân tích và theo dõi lỗi cũng phải giao tiếp với dịch vụ feature flag
Nó không phải khoa học tên lửa, nhưng chắc chắn phức tạp hơn biến môi trường
Luôn thấy hào hứng khi Cloudflare bắt đầu cung cấp những thứ mà trước đây phải dùng nhà cung cấp khác. Có niềm tin rằng nó sẽ rất vững chắc
Ở Function thì đã dùng Statsig. Ban đầu chỉ có hai người trong một sản phẩm bắt đầu dùng, nhưng trong vòng 12 tháng, phần lớn câu chữ trong sản phẩm và việc rollout đã được vận hành bằng Statsig
Statsig có đánh giá phía client, nên có thể viết quy tắc và rollout dựa trên các khái niệm nội bộ mà không cần máy chủ Statsig xử lý dữ liệu người dùng
Mong Cloudflare sẽ tạo ra một sản phẩm tinh vi ở đây để sau này không cần dùng sản phẩm khác nữa
Tôi chỉ là người dùng bình thường, không rành chi tiết kỹ thuật, nhưng cảm thấy Cloudflare tương đối dễ dùng. Mong họ tiếp tục làm tốt