Views
1 month ago

Dijkstra Tap1 2018Apr11

Bạn sẽ làm gì khi

Bạn sẽ làm gì khi muốn triển khai 1 tính năng đến 1 nhóm nhỏ người dùng thay vì toàn bộ người dùng trong hệ thống? | HUY NGUYỄN Feature Toggle (hay Feature Flags) và Feature Rollout là một kĩ thuật phổ biến giúp bạn có thể quản lý được hành vi của phần mềm của mình mà không cần phải đổi code & deploy lại. Trong bài viết này mình sẽ đi qua 1 vài tính năng từ cơ bản đến nâng cao, đồng thời chia sẽ cách tiếp cận để design và implement một hệ thống Feature Toggle/Feature Rollout nhỏ. Một vài ứng dụng trong thực tế của kỹ thuật này: Feature Control: tắt/bật tính năng cho toàn bộ hệ thống, hoặc một vài khách hàng cụ thể Feature Rollout: một tính năng từ từ cho tập người dùng của mình, có thể trước mắt cho 1 vài người dùng cụ thể, rồi sau đó bật tiếp cho những người dùng trong một nước/khu vực nào đó. BẬT/TẮT TOÀN CỤC Trường hợp cơ bản nhất của Feature Toggle là giúp bạn bật/tắt 1 tính năng mà không cần phải deploy lại code. Ví dụ, chúng ta có tính năng XYZ như sau: Lúc này, bạn có thể code & deploy tính năng xyz đó trước, sau đó chọn thời điểm thích hợp để bật nó lên cho toàn bộ hệ thống. Hoặc ngược lại, khi bạn phát hiện ra lỗi, hoặc hệ thống quá tải, bạn có thể tắt bớt 1 vài tính năng phụ chỉ với 1 vài cú click chuột. 28 DIJSKTRA

Thiết kế đằng sau đơn giản là một bảng trong cơ sở dữ liệu chứa các tính năng của bạn, cùng với 1 biến cờ quy định trạng thái bật/tắt của tính năng. BẬT/TẮT CHO KHÁCH HÀNG CỤ THỂ người dùng vào 1 tập từ 1-100, và so sánh với giá trị rollout_percent của mình… Bây giờ mình thảo luận đến một vài trường hợp phức tạp hơn khi mà bạn: 1. Chỉ muốn bật tính năng cho 1 vài khách hàng thử nghiệm (hoặc là khách hàng cao cấp) 2. Muốn bật cho toàn bộ hệ thống, nhưng tắt cho 1 vài khách hàng đặc biệt (khách hàng chưa đăng ký sử dụng tính năng này) Có thể nhận ra rằng 2 trường hợp trên giống như 2 mệnh đề đảo ngược nhau, lúc đó, bạn có thể cải thiện hệ thống bằng cách thêm vào 1 cột exception_list để chứa tập khách hàng đặc biệt này: Lúc này thì: toggled = false, exception_list = [1, 2]: tắt toàn bộ, vào bật cho khách hàng ID 1 và 2. toggled = true, exception_list = [1, 2]: bật cho toàn bộ khách hàng, chỉ tắt cho khách hàng ID 1 và 2. LÚC NÀO THÌ LÀM GÌ? Nếu để ý kĩ các ví dụ trên, thì không phải lúc nào bạn cũng cần hết những tính năng nói trên: Trường hợp bật/tắt cho khách hàng cụ thể sẽ phù hợp với các ứng dụng B2B (ví dụ: Intercom, Hubspot), khi mà người xài thuộc các tài khoản công ty khác nhau. Trường hợp triên khai theo % của user sẽ phù hợp hơn với các ứng dụng B2C (ví dụ Quora, Facebook, Kipalog) khi mỗi người xài là 1 user độc lập. Nói vậy để thấy là tuy cũng chỉ là cơ chế feature toggle, feature rollout, nhưng mỗi doanh nghiệp khi thiết kế sẽ có nhiều bài toán con khác nhau, ảnh hưởng đến cách bạn thiết kế tính năng này. CẢI THIỆN TỐC ĐỘ (PERFORMANCE IMPROVEMENT) Ở trên ta dùng database để lưu các toggles, như vậy mỗi lần gọi hệ thống phải query vào database. Với những hệ thống có nhiều người dùng, việc này sẽ làm chậm hệ thống lại rất nhiều và trở nên không thực tế. Nhận thấy việc dữ liệu toggles ở trên không thường xuyên thay đổi nhiều (chỉ đổi khi admin vào sửa nội dung), nên ta có thể dùng caching (như Redis, hoặc lưu thẳng vào memory) để tránh việc phải có nhiều database calls. Và ta chỉ cần làm mới bộ đệm khi mà ai đó vào admin để cập nhật lại toggle settings. Một cách triển khai khác là ta hoàn toàn có thể hiện trực tiếp bằng Redis mà không cần phải thông qua SQL database. Lúc này ta phải coi như dữ liệu trong Redis của bạn là persistent data và có cơ chế backup thích hợp. Trong ảnh: UI features toggles của Holistics (dựa trên nền ActiveAdmin). TOGGLE CHO % TẬP NGƯỜI DÙNG (HAY LÀ FEATURE ROLLOUT) Giả sử bây giờ, bạn vừa deploy 1 tính năng mới và muốn release thử nghiệm cho 5% người dùng của mình thôi thì phải thiết kế như thế nào? Một cách đơn giản là thêm vào 1 cột rollout_percent, và dùng nó để kiểm tra: Lúc đó, với mỗi user_id, ta sẽ dùng 1 hàm hash để đẩy KẾT LUẬN Ở trên mình đã giới thiệu các bạn hướng tiếp cận và giải quyết bài toán Feature Toggle / Feature Rollout. Tuy nhìn đơn giản nhưng khi đi sâu vào nó có những yêu cầu đặc thù khác nhau, cho nên mỗi công ty sẽ có cách tiếp cận/ thực thi khác nhau. Link đến forum thảo luận về nội dung bài viết: DIJSKTRA 29

Nghiên cứu tổng quan về cuộc sống người dân Việt ... - Vinaresearch
TS. Ngô Văn Thanh, - Viện Vật lý
2. Sách hướng dẫn quản lý thực hiện dự án của ngân hàng ADB
Xem báo cáo chi tiết về Internet và du lịch trong nước - Vinaresearch
Cóc sống - Đại học FPT
THÔNG TIN NỘI BỘ - Tín Nghĩa
Texas đang phát triển.
Cuộc bình chọn Báo cáo thường niên năm
nhiệt độ - Mientayvn.com
1. Giới Thiệu Giám Hộ và Tín Nhân Công - Public Guardian and ...
Phần 1 - VN.NET
Texas đang phát triển.
Nói Chuyện Cờ Bạc - National Center for Responsible Gaming
Hội nhập người nước ngoài với môi trường sống trong khu vực Plzeň
THÔNG TIN NỘI BỘ - Tín Nghĩa
Giáo viên - Bà Đào Như Trang - VVOB
Mùa hè xanh 2016 | Tình nguyện Sông Mã
Texas đang phát triển.
Phần 1 - VN.NET
Download - Đại học FPT
Mô hình vật lý .pdf - Khoa Kỹ thuật Biển