Skip to content

Instantly share code, notes, and snippets.

@thdtt
Last active April 24, 2023 14:56
Show Gist options
  • Save thdtt/aeb1ada506c48e1f05f288a75d18453b to your computer and use it in GitHub Desktop.
Save thdtt/aeb1ada506c48e1f05f288a75d18453b to your computer and use it in GitHub Desktop.

Giải pháp handle các job vContract

Ý tưởng

  • Tạo ra 3 ThreadPool khác nhau (Mỗi pool dùng cho mục đích handle task nặng, trung bình, nhẹ)
  • Mỗi ThreadPool tự implement executor service với priority riêng (Khi các job được submit vào trong ThreadPool tương ứng sẽ được đặt priority - priority tuỳ cách định nghĩa, priority càng thấp thì thứ tự ưu tiên càng cao)

Áp dụng

  • Tạm gọi 3 ThreadPool là HIGH-POOL, MEDIUM-POOL, và Low-POOL
    • HIGH-POOL: nhận các job nặng như thực hiện lập lô hợp đồng, lô khách hàng, lô người dùng
    • MEDIUM-POOL: nhận các job xuất báo cáo
    • LOw-POOL: nhận các job gửi mail, sms
  • HIGH-POOL cấu hình nhiều core xử lý và ưu tiên pool size nhỏ, MEDIUM-POOL cấu hình tuỳ theo độ nặng của các task xuất báo cáo với timeout cao (Thao tác nhiều vào DB, LOW-POOL cấu hình ít core xử lý, ưu tiên pool size lớn để giữ các job gửi mail, sms (ít core để tránh việc các hệ thống ngoài như sms hay mail relay nhận diện hệ thống vContract đang thực hiện DOS tới hệ thống đó)
  • Priority Queue: định nghĩa độ ưu tiên cho các job submit vào trong ThreadPool, các job có số priority càng nhỏ thì càng được ưu tiên thực hiện trước (VÍ DỤ: nghiệp vụ gửi OTP đặt priority = 1 để việc gửi sms otp là ngay lập tức, các nghiệp vụ gửi mail thông báo, đặt priority bằng 20 hoặc 30... vì việc nhận thông báo không nhất thiết phải tới người dùng ngay lập tức)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment