Winservice và Job scheduler – crontab

Hôm trước có đồng nghiệp cũ hỏi mình config thời gian chạy của winservice tự động gửi lại tin nhắn nằm ở đâu? Thực ra vòng vo một hồi thì đó là 1 cái Job chạy 5 phút 1 lần kiểm tra xem hàng đợi gửi tin nhắn xử lý có bị tồn không để thông báo tới admin để kiểm tra hệ thống. Về hệ thống này mình sẽ trình bày ở một bài khác.
Nhân tiện việc này mình muốn chia sẻ sự hiểu biết của mình về Winservice và Scheduler – Crontab:

  • Winservice: mình đã tiếp xúc với winservice sớm hơn trong công việc. Winservice bản chất là một chương trình thực thi một khối lệnh nào đó hoặc công việc nào đó lặp đi lặp lại sau một khoảng thời gian nghỉ nào đó. Ví dụ như ta phải dán con hạc giấy đã được gấp lên một bước tường chẳng hạn, ta cứ dán được 1 con lên thì ta lại ngồi nghỉ 5 phút chẳng hạn. Ta không quan tâm dán nó trong bao lâu 1 phút, 2 phút hay 5 phút… miễn là cứ dán xong thì ta ngồi nghỉ 5 phút rồi dán tiếp. Ứng dụng của Winservice là xử lý hàng đợi – queue, trong hàng đợi ta không cần biết có bao nhiêu, cứ lấy 1 cái (có thể random hoặc cái đầu hàng đợi hoặc cuối hàng đợi…) đem ra để xử lý xong rồi nghỉ một thời gian nào đó rồi lại vào lấy 1 cái… tất nhiên hàng đợi có thể tiếp tục được cập nhật hoặc không, hoặc có thể cập nhật ở một thời điểm bất kỳ nào đó. Do vậy với winservice ta không thể biết trước khi nào thì một khối lệnh hoặc công việc mới được thực hiện do ta không nắm được khối lệnh đó hoặc công việc được xử lý trong bao lâu. Cứ phải xong thì mới thực hiện các việc tiếp theo. Đối với Winservice ta có thể làm xử lý 1 luồng nhưng để hiệu quả ta có thể làm nó chạy đa luồng (nghĩa là các công việc xử lý song song nhau) nhưng nếu sử dụng chung tài nguyên thì rất dễ xảy ra xung đột dẫn đến bị deadlock và winservice bị treo không chạy được nữa. Ta buộc phải xử lý khéo léo khi code trong vấn đề này, và việc này xảy ra là chuyện bình thường.
  • Scheduler – Crontab: Cũng như Winservice, Scheduler – Crontab (mình không rõ tên của nó nên đang dùng tên lần lượt mà hệ đều hành Window và Linux cung cấp cho người dùng) cũng thực thi một khối lệnh hoặc công việc nào đó nhiều lần nhưng được xác định thời gian bắt đầu của công việc đó. Ví dụ với việc dán hạc giấy, thì cứ đầu từng giờ ta tiến hành dán một con hạc giấy, việc dán này không cần biết có xong hay không, nhanh hay chậm, cứ đầu từng giờ là lấy 1 con hạc lên gián mà thôi. Như vậy có thể lần giờ trước ta dán chưa xong thì tới lần giờ tiếp theo ta sẽ vẫn lấy 1 con hạc đem đi dán.

Một số ứng dụng của Winservice và Scheduler – Crontab mà mình biết như sau:

Winservice:

  • Xử lý hàng đợi nạp tiền của khách hàng: Ví dụ hàng trăm nghìn tin nhắn nạp thẻ đến trong 1 phút của nhà mạng, nhà mạng chắc chắn sẽ dựng queue để đón nhận các yêu cầu này và lần lượt lấy 1 hoặc 1 số giao dịch để đem đi xử lý. Có thể nghỉ 1 chút lại tiếp tục lấy để xử lý……

Scheduler – Crontab: Các phần job chạy theo năm – tháng – giờ – phút – giây như:

  • Job backup hệ thống vào cuối mỗi ngày
  • Job kiểm tra cứ 5 phút lại check hệ thống hoặc tác vụ gì đó như winservice còn sống không để thông báo
  • Job gửi dữ liệu vào ngày đầu tháng tất cả số liệu của tháng trước

Winservice và Scheduler – Crontab có các tính chất và ưu nhược điểm khác nhau nên tùy từng tác vụ cụ thể ta phải xem xét và sử dụng cho phù hợp.