A/B khác blue/green ở đâu?
Blue/green thường chuyển toàn bộ traffic tại một thời điểm. A/B giữ hai phiên bản cùng phục vụ để so sánh hành vi, ví dụ 90% vào prod và 10% vào pre. Quyết định phân nhóm có thể dựa trên cookie, header, path hoặc một hash ổn định theo user.
CloudFront nằm ở edge; S3 hoặc origin phía sau chứa hai site. Terraform quản lý distribution, origin, IAM và code function. Function quyết định origin nào nhận request.
resource "aws_cloudfront_distribution" "site" {
enabled = true
origin {
domain_name = aws_s3_bucket.prod.bucket_regional_domain_name
origin_id = "prod"
}
origin {
domain_name = aws_s3_bucket.pre.bucket_regional_domain_name
origin_id = "pre"
}
default_cache_behavior {
target_origin_id = "prod"
viewer_protocol_policy = "redirect-to-https"
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
}
}
Phân nhóm phải ổn định
Nếu mỗi request random lại chọn origin khác nhau, người dùng sẽ thấy trạng thái không nhất quán. Edge function nên đọc cookie đã gán hoặc hash một identifier. Cần suy nghĩ kỹ về privacy, cache key và việc không được đưa secret vào cookie client.
Pseudo-code dễ hiểu:
const bucket = stableHash(userId) % 100;
request.headers['x-release'] = [{ key: 'X-Release', value: bucket < 10 ? 'pre' : 'prod' }];
return request;
Trong CloudFront, runtime, version publish và region triển khai function có ràng buộc riêng. Hãy test bằng staging distribution trước; propagation có thể mất thời gian và chi phí request/log tăng nhanh.
Cache là bẫy lớn nhất
Nếu cache key không bao gồm cookie/header dùng để phân nhóm, CloudFront có thể trả response của nhóm A cho nhóm B. Ngược lại, đưa quá nhiều header vào cache key làm giảm hit rate. Xác định rõ dữ liệu nào được phép cache và invalidation sau release.
Đo lường và kết thúc thử nghiệm
Gắn release label vào log/metric, theo dõi conversion, error rate, latency và rollback threshold. A/B test không có ý nghĩa nếu hai nhóm nhận traffic hoặc dữ liệu khác nhau một cách không kiểm soát.
Ma trận kiểm thử trước khi bật traffic
| Tình huống | Kết quả cần kiểm tra |
|---|---|
| Không có cookie | Người dùng được gán nhóm một lần, không nhảy nhóm |
Có cookie pre |
Request tới đúng origin pre |
| Cache hit | Response không bị chia sẻ sai giữa hai nhóm |
| Origin lỗi | Có hành vi fail/rollback đã định nghĩa |
| Purge/invalidation | Nội dung mới xuất hiện đúng thời điểm |
Hãy test bằng hai user giả lập và đọc cả response header lẫn log edge. Nếu chỉ mở trình duyệt một lần, rất dễ bỏ qua lỗi cache key. Khi kết thúc, chuyển 100% về phiên bản thắng, lưu kết quả thí nghiệm rồi xóa origin/function tạm để tránh phí và cấu hình chết.
Xem bài nguồn A/B Testing Deployment và luôn kiểm tra giá CloudFront/Lambda@Edge trước khi thử ở quy mô lớn.