Overview Job & CronJob#

Job và CronJob nói chung đề cập đến các tác vụ được cài đặt với chức năng nhất định, ít có sự biến động về tham số.  Job là tác vụ được trigger chủ động, còn cronjob được setup để chạy lặp lại sau mỗi khoảng thời hoặc một thời điểm lặp lại. Cronjob thường sử dụng cron expression để biểu thị cho vòng lặp thời gian. Cron expression cũng là một chuẩn thường được sử dụng chung giữa các hệ thống hỗ trợ cron. Thay vì phải dựng các ứng dụng thường trực để chạy các tác vụ này, người dùng có thể sử dụng tính năng spinner job/cronjob  dựa trên công nghệ container để thực thi các tác vụ nói trên. Job và cronjob dựa trên container sẽ tối ưu về chi phí khi không phải duy trì các ứng dụng thường trực.

Dưới đây là một số vấn đề cụ thể mà bạn có thể gặp phải trong quản lý ứng dụng:

  • Thiếu tính tự động hóa: Bạn sẽ phải tự thực hiện tất cả các tác vụ lặp đi lặp lại, chẳng hạn như tạo bản sao lưu, dọn dẹp tệp rác, gửi email,… Điều này có thể tốn thời gian và công sức.

  • Thiếu tính nhất quán: Các tác vụ lặp đi lặp lại có thể được thực hiện vào các thời điểm khác nhau, dẫn đến sự không nhất quán trong dữ liệu và hệ thống.

  • Thiếu tính bảo mật: Các tác vụ quan trọng, chẳng hạn như tạo bản sao lưu, có thể bị bỏ sót hoặc thực hiện không đúng cách, dẫn đến mất dữ liệu hoặc các vấn đề bảo mật khác.

  • Một số tác vụ sẽ yêu cầu tài nguyên lớn hơn nhiều mức độ sẵn sàng của hệ thống

Dưới đây là một số usecase sử dụng của Job và Cron Job container:#

  • Các function có nhu cầu thực hiện nhưng không cần duy trì liên tục tính sẵn sàng

  • Các function hoạt động độc lập, ít phụ thuộc

  • Các tác vụ tự động hóa như backup, download, tổng hợp dữ liệu, sync, healthcheck …

  • Các tác vụ chạy độc lập tiêu tốn tài nguyên hoặc cần nhiều tiến trình chạy song song như crawl data, import/export, download…

  • Các tác vụ có thêm yếu tố thời gian như chạy một lần vào đúng thời điểm hoặc chạy lặp lại theo thời gian thì có thể sử dụng cron job

Ưu điểm của JOB và Cron Job container#

  • Tự động hóa: JOB và Cron Job container có thể được sử dụng để tự động hóa các tác vụ lặp đi lặp lại, giúp tiết kiệm thời gian và công sức cho người dùng.

  • Tính di động: JOB và Cron Job container có thể được triển khai trên bất kỳ nền tảng nào hỗ trợ Docker. Điều này giúp dễ dàng triển khai và quản lý các tác vụ tự động hóa.

  • Khả năng mở rộng: JOB và Cron Job container có thể được sử dụng để tự động hóa các tác vụ phức tạp, các job mới không bị ảnh hưởng về mặt tiêu thụ tài nguyên với các job khác. Điều này giúp nâng cao hiệu quả hoạt động của hệ thống.

  • Tính độc lập: Các job/cronjob có thể được phát triển và chạy độc lập mà không ảnh hưởng đến các job/cronjob khác

  • Chi phí: ở một mức độ nào đó việc chỉ tiêu tốn tài nguyên khi chạy của job/cronjob sẽ tối ưu chi phí. Mặt khác, nếu các tác vụ chạy thường xuyên với lượng tiêu thụ tài nguyên lớn, người dùng nên chuyển sang sử dụng ứng dụng thường trực

Nhược điểm của JOB và Cron Job container#

  • Kiến thức về Container: Để sử dụng JOB và Cron Job container, người dùng cần có kiến thức về công nghệ container và  kiến thức về hệ điều hành ở mức cơ bản.

  • Triển khai phức tạp hơn so với các job ở mức hệ điều hành hoặc các ứng dụng backend cho người mới tiếp cận. Người dùng cần triển khai phần code thực thi nếu logic phức tạp hoặc sử dụng các command để viết script cho hệ điều hành thực thi (image)

JOB và Cron Job container là những công cụ hữu ích để tự động hóa các tác vụ trong môi trường container. Bằng cách sử dụng JOB và Cron Job container một cách hợp lý, bạn có thể tiết kiệm thời gian và công sức, đồng thời nâng cao hiệu quả hoạt động của hệ thống.

Job trên Sunteco Cloud#

Dịch vụ Job trên Sunteco Cloud hoạt động dựa trên vòng đời của các Pod tương tự như đơn vị runtime của Sun Spinner, các Job controller sẽ điều phối hoạt động của job và cron job.

Hiểu một cách đơn giản thì Jobs chịu trách nhiệm quản lý một hoặc nhiều Pods để thực hiện một công việc nào đó. Trong quá trình làm việc, các Pods có thể chạy song song với nhau, và nếu một Pod bị chết thì Job sẽ tạo ra một Pod khác để thay thể. Job chỉ được coi là hoàn thành thì tất cả các Pod của nó hoàn thành. Khi xóa Job, các Pods được quản lý bởi nó cũng bị xóa theo.

Một Job có thể tạo các Pod chạy tuần tự hoặc song song. Sử dụng Job khi muốn thi hành một vài chức năng hoàn thành xong thì dừng lại (ví dụ backup, kiểm tra …)

Khi Job tạo Pod, Pod chưa hoàn thành nếu Pod bị xóa, lỗi Node … nó sẽ thực hiện tạo Pod khác để thi hành tác vụ.

Job rất phù hợp để chạy các tác vụ kiểu Batch, tức là các tác vụ mà chạy trong một khoảng thời gian nào đó rồi kết thúc. Trong AI, có khá nhiều tác vụ kiểu như vậy, có thể kể ra như Feature Engineering, Cross-Validation, Model Training, Batch Inference. Ví dụ, chúng ta tạo ra một Job để train một model, sau đó lưu model đó vào Storage. Một Job khác sẽ sử dụng model đó để thực hiện Batch Inference.

Step

Quá trình, như thể hiện trong sơ đồ, diễn ra như sau:

  1. Người dùng áp dụng bảng kê khai CronJob chứa hai phần thông tin chính: thời điểm thực thi và việc cần làm.

  2. Logic chính được triển khai trong hệ thống của Suncloud. Theo mặc định, nó sẽ kiểm tra cứ sau 10 giây xem có nên chạy CronJob hay không.

  3. Khi bộ điều khiển tìm thấy CronJob để thực thi (có nghĩa là thời gian hiện tại khớp với thời gian được chỉ định thông qua cú pháp cron), nó sẽ tạo một đối tượng khác gọi là Job. Mỗi Công việc theo dõi một lệnh gọi cụ thể và chứa thông tin được kế thừa từ CronJob về những việc cần làm.

  4. Sau khi hệ thống phát hiện một đối tượng Job mới, nó sẽ ngay lập tức thử thực thi. Nó sẽ lên lịch tạo một Pod mới dựa trên cấu hình được truyền từ CronJob thông qua. Khi Pod chạy, nó sẽ thực hiện tác vụ cron của bạn.

Tuy nhiên, có thể dễ dàng nhận thấy một nhược điểm của Job, đó là Job phải được tạo một cách thủ công. Điều này khá là bất tiện, vì chúng ta sẽ phải mất công giám sát hoạt động của hệ thống để can thiệp vào (tạo Job) khi cần. Liệu có cách nào làm cho Job có thể tự động được tạo ra và thực hiện nhiệm vụ của nó tại những thời điểm nhất định, theo chu kỳ? CronJob chính là câu trả lời.

CronJob là gì?#

Cron Job là một đối tượng Kubernetes cho phép bạn lên lịch và chạy các tác vụ định kỳ. Chúng có thể được sử dụng để tự động hóa một loạt các tác vụ, chẳng hạn như sao lưu dữ liệu, gửi thông báo và xử lý dữ liệu.

Cấu trúc của Cron Job#

Cron Job được xác định bởi các trường sau:

  • schedule: Đây là giá trị chỉ ra chu kỳ chạy của Job, tuân theo các quy tắc định trước.

  • jobTemplate: Định nghĩa mẫu cho các Pod sẽ được tạo ra bởi CronJob hỗ trợ thông qua giao diện của Sunteco Cloud

Biểu thức Cron#

Biểu thức Cron là một chuỗi được sử dụng để xác định lịch trình chạy của CronJob. Nó có thể được biểu diễn dưới dạng chuỗi chữ và số, được phân tách bằng dấu cách.

Dưới đây là một số ví dụ về biểu thức Cron:

  • 0 0 * * *: Chạy mỗi ngày lúc 0 giờ 0 phút.

  • */15 * * * *: Chạy mỗi 15 phút một lần.

  • 0 22 * * *: Chạy mỗi ngày lúc 22 giờ 0 phút.

  • * * * * *: Chạy liên tục mỗi phút.

Để tìm hiểu thêm về cách sử dụng và các bộ quy tắc của CronJob schedule tham khảo các quy tắc tại đây. Ngoài ra, nếu bạn cảm thấy bối rối khi sử dụng những quy tắc để tạo schedule, bạn có thể sử dụng công cụ này để giúp đỡ bạn.

Điểm khác nhau quan trọng giữa image của application container và image của job, cronjob, bao gồm:#

Note

Người dùng cần hiểu rõ mục đích và tính tương thích của các image khi áp dụng cho các dịch vụ Spinner và Job/Cron job.

  1. Mục đích chính:

    • Image của application container được tạo ra để chứa và chạy ứng dụng hoặc dịch vụ cụ thể.

    • Image của job/cronjob thường được tạo ra để thực hiện các công việc định kỳ (hoặc theo lịch trình) và không bao gồm ứng dụng hoặc dịch vụ cố định.

  2. Thành phần chính:

    • Image của application container thường chứa tất cả các thành phần cần thiết để triển khai và chạy ứng dụng, bao gồm các thư viện, mã nguồn, tài nguyên và cấu hình ứng dụng.

    • Image củajob/cronjob thường chứa các công cụ và tệp cấu hình cần thiết để thực hiện công việc định kỳ, ví dụ như script, lệnh, hoặc các công cụ cron.

  3. Lifecycle:

    • Image của application container thường tồn tại trong suốt thời gian chạy của ứng dụng và được triển khai để xử lý các yêu cầu từ người dùng hoặc hệ thống.

    • Image củajob/cronjob thường được sử dụng một lần duy nhất để thực hiện công việc định kỳ, sau đó có thể bị xóa sau khi công việc hoàn thành.

  4. Cách triển khai:

    • Application container thường được triển khai trong môi trường có khả năng mở rộng, để phục vụ các yêu cầu đối với ứng dụng trong thời gian thực.

    • Job/cronjobthường được triển khai theo lịch trình và chỉ chạy khi được kích hoạt bởi cronjob scheduler hoặc một cơ chế lịch trình tương tự.

  5. Đặc điểm cấu hình:

    • Image của application container thường được cấu hình để lắng nghe trên một cổng cụ thể và xử lý các yêu cầu từ bên ngoài.

    • Image của cronjob thường không cần phải cấu hình các cổng lắng nghe, vì nó không phải là một dịch vụ trực tiếp mà chỉ thực hiện công việc định kỳ.

Các config đặc biệt trong quá trình vận hành Job & CronJob cũng là mộ trong những phần lưu ý quan trọng để sử dụng hiệu quả linh hoạt Job & CronJob. Xem chi tiết giới thiệu tại đây.