Feature flags là gì

Đó, bây giờ Azure có cho phép chúng ta làm chiện này luôn nè…

  • Ghê zị? Ủa rồi tính năng đó ở đâu?
  • Nó ở trong Azure App Configuration á…
  • Ủa mà Azure App Configuration là gì?
  • Hừmmm… Azure App Configuration cho phép chúng ta lưu trữ, thực thi và quản lý quyền truy cập vào tất cả thiết lập ứng dụng. Nó cung cấp khả năng chỉnh sửa thay đổi các thiết lập mà không cần phải deploy lại.

Triển khai nó cũng đơn giản lắm… Bây giờ các bạn thực hiện theo mình nha…

Bước 1: Tạo Azure App Configuration

Chúng ta vào Create a resource -> App Configuration -> chọn Create

Rồi sau đó lần lượt nhập vào các thông tin -> chọn Review + Create -> chọn Create

Bước 2: Tạo feature flags

Sau khi tạo xong, chúng ta vào resource đã tạo, ở cột bên trái, chúng ta vào phần Feature manager nằm trong mục Operations.

Nhấn nút Add để bắt đầu tạo một cờ tính năng mới [feature flag] rồi nhập tên, label và description cho nó. Sau đó nhấn nút Apply để tạo.

Bước 3: Tích hợp vào app

Trong bài này mình sẽ ví dụ bằng việc gắn vào ứng dụng angular. Giả sử web của mình đang có tính năng “Counter” đang được hiện ra ở menu như hình bên dưới.

Giờ mình bắt đầu tích hợp Azure App Configuration vào app của mình. Mình sẽ cài 2 thư viện: @azure/app-configuration và @azure/identity

Sau đó mình vào file ts của component nav-menu, bỏ đoạn code này vào.

counterFeature = this.ShowCounter[]; async ShowCounter[] { const connectionString = 'Endpoint=//thaotest.azconfig.io;Id=SapI-la-s0:VnC8TUNG22AlpF+a3a79;Secret=68VylgjpCb8o9eJIWe9e1OtjF8LpqG6YvyVswO2vBYA='; const client = new AppConfigurationClient[connectionString]; const setting = await client.getConfigurationSetting[{ key: ".appconfig.featureflag/ShowCounter" }]; return JSON.parse[setting.value].enabled; }

Với Connection String được lấy từ Access keys trong phần Settings

Sau đó chúng ta sẽ qua file html, ở tag menu của Counter, mình sẽ thêm thiết lập sự ẩn hiện của nó thông qua attribute style.visibility.

[style.visibility]="[counterFeature | async] ? 'visible' : 'hidden'"

Hồi nãy lúc tạo feature flag ShowCounter, mình ko có enable nó lên nên expect lúc này khi chạy web lên mình sẽ ko thấy tính năng đó ở trên menu nữa. Để xem thế nào nha….

Vầng… và kết quả đã như ý, mình đã không thấy tính năng đó ở trên menu nữa rồi.

Giả sử mình muốn bật tính năng đó lên thì mình chỉ việc vào Azure App Configuration rồi enable nó lên là xong. Hỏng cần phải deploy lại web gì hết. Quá khoẻ….

Còn về mặt backend trong .NET, chúng ta sẽ dùng FeatureGate attribute

[FeatureGate[MyFeatureFlags.ShowCounter]]

Cụ thể các bạn có thể tham khảo thêm tại đây

.NET | Javascript | Typescript | Azure Xem tất cả bài viết bởi Thao Tran

Có rất nhiều câu trả lời tuyệt vời ở đây, tất cả đều lái xe theo định nghĩa cơ bản, quan trọng phổ biến trong bài đăng của Martin Fowler :

Chúng là các đoạn mã "[cho phép] các nhóm sửa đổi hành vi hệ thống mà không thay đổi mã."

Vì vậy, trong lịch sử chúng tôi đã nghĩ về chúng như được đại diện bởi mã giả:

if[app_settings["beta-mode"] == "true"] showAwesomeNewGui[]; else sameOldSnoozeFeset[];

Đó là một cách hoàn toàn chính xác để nghĩ về nó, và cả Matt và Adil đều mở rộng nó một cách độc đáo với nhiều trường hợp sử dụng chiến thuật cho cờ tính năng.

Nhưng tôi muốn đưa ra một định nghĩa sửa đổi phản ánh thực tế đã phát triển như thế nào trong sáu năm và thay đổi kể từ khi dotnetdev hỏi câu hỏi ban đầu. Tôi làm việc cho Rollout.io , một nền tảng cờ tính năng, vì vậy tôi đã có một hàng ghế đầu cho sự phát triển này.

Nói một cách đơn giản, cờ tính năng không còn là một cách để bật và tắt các chức năng trong ứng dụng của bạn. Điều đó giống như trả lời "mục hàng hóa đơn là gì" bằng cách nói "đó là mô tả và số lượng tiền tệ." Đúng, nhưng nó không lái xe ở điểm rộng hơn của chính hóa đơn.

Cờ tính năng là các bit chiến thuật của một giải pháp chiến lược bao quát trong phần mềm hiện đại. Chúng là phương tiện để bạn trì hoãn logic quyết định quan trọng trong mã của mình cho đến khi thực thi khi bạn có thêm thông tin. Và, có lẽ quan trọng nhất, chúng không còn xảy ra trong sự cô lập nữa, với một kiểm tra duy nhất để xem số phiên bản có lớn hơn 2.7 hay không; các tổ chức sử dụng chúng thường bao gồm chúng như một phần của cách tiếp cận toàn diện, toàn hệ thống sản phẩm.

Như những người khác đã đề cập, Facebook và LinkedIn đã tiên phong trong việc này, nhưng năm 2018, toàn bộ rất nhiều tổ chức đang làm điều đó. Họ đang trì hoãn các câu hỏi logic quyết định cho thời gian chạy như một phần của chiến lược phát triển, chiến lược hoạt động [hoặc chiến lược DevOps, nếu bạn muốn] và chiến lược sản phẩm. Dưới đây là ví dụ về những câu hỏi như vậy.

  • Ai nên xem màn hình quản trị mới mà chúng tôi sắp ra mắt và khi nào?
  • Cấp độ thành viên nào là bắt buộc để mở khóa quả trứng Phục sinh này?
  • Khi nào chúng ta nên chuyển sang cơ sở dữ liệu mới?
  • Chúng ta có nên đặt hình ảnh của một con báo hay đại bàng trên nút thanh toán để tăng cường chuyển đổi?

Để có một ứng dụng trì hoãn một số lượng đáng kể các quyết định như vậy cho đến khi chạy, bạn không thể ném cờ tính năng vào ứng dụng của mình theo cách đặc biệt hoặc bạn sẽ vùi mình vào nợ kỹ thuật. Ngày nay, bạn cần có một chiến lược quản lý cờ tính năng toàn diện, bao gồm một vài thành phần khác nhau.

  • Điểm chuyển đổi được sử dụng để chuyển đổi hành vi cho các tính năng mới.
  • Nhiều điểm chuyển đổi kết hợp với nhau để tạo thành một bộ định tuyến chuyển đổi . Một bộ định tuyến chuyển đổi xác định trạng thái của một tính năng.
  • Chuyển đổi ngữ cảnh cung cấp cho bộ định tuyến chuyển đổi thông tin theo ngữ cảnh cần thiết [ví dụ: người dùng cụ thể].
  • Cấu hình Toggle cung cấp thông tin bộ định tuyến chuyển đổi về môi trường.

Vì vậy, cuối cùng, cờ tính năng là gì?

Chà, chúng là một phần quan trọng trong chiến lược rộng lớn hơn để có một ứng dụng phù hợp với cả nhu cầu kỹ thuật và thị trường.

Video liên quan

Chủ Đề