Thứ Hai, 20 tháng 4, 2020

[Design Pattern] [Golang] Phân chia tỉ lệ phần trăm request cho các action khác nhau

Bài toán đặt ra


Khi bạn có một service cần xử lý request và bạn có 2 cách A và B để thực hiện luồng handle request đó. Bạn cần phân chia 40 % request sẽ được xử lý theo các A và 60 % request sẽ được xử lý theo cách B. Khi đó, service được thiết kế như thế nào?

Solution


Solution 1


Golang cung cấp hàm random và xử lý bài toán trên như sau:
1. Dùng hàm random, generate một số x random với nằm trong khoảng [0,100)
2. Nêú x < 40, request handle theo hướng A
3. Nếu x > 40, request handle theo hướng B

simple code:

package main
import (
   "fmt"  
   "math/rand")

func main() {
   max := 100   
   count1 := 0   
   count2 := 0   
   for i := 0; i < 1000; i ++ {
      x := rand.Intn(max)
      fmt.Println(x)
      if x < 40 {
         count1 +=1      } else {
         count2 += 1      }
   }
   fmt.Println(count1, count2)
}

Đã test thực tế, tỉ lệ % khá chính xác.

Không có nhận xét nào:

Đăng nhận xét