ವೆಬ್ ಆ್ಯಪ್ನಲ್ಲಿ ಹಿನ್ನೆಲೆ ಕೆಲಸಗಳನ್ನು ನಡೆಸುವುದು ಹೇಗೆ: ಕ್ಯೂಗಳು, ಶೆಡ್ಯೂಲರ್ಗಳು ಮತ್ತು ಕ್ರಾನ್
ವೆಬ್ ಆ್ಯಪ್ನಲ್ಲಿ ಹಿನ್ನೆಲೆ ಕೆಲಸಗಳನ್ನು ನಡೆಸಲು, ಮೊದಲು ಕೆಲಸವನ್ನು ಎರಡು ವಿಧಗಳಾಗಿ ವಿಭಜಿಸಿ. ಪ್ರಚೋದಿತ ಕೆಲಸಗಳು (ಸ್ವಾಗತ ಇಮೇಲ್ ಕಳುಹಿಸುವುದು, ಅಪ್ಲೋಡ್ ಸಂಸ್ಕರಿಸುವುದು) ಕೆಲಸದ ಕ್ಯೂ ಯಲ್ಲಿ ಉಳಿಸಬಹುದು, ಸಾಮಾನ್ಯವಾಗಿ ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ನ ಒಂದು ಟೇಬಲ್, ಮತ್ತು ಮರುಪ್ರಯತ್ನಗಳೊಂದಿಗೆ ಒಬ್ಬ ವರ್ಕರ್ ನಿರ್ವಹಿಸಬಹುದು. ನಿಗದಿತ ಕೆಲಸಗಳಿಗೆ (ರಾತ್ರಿಯ ವರದಿ, ಪ್ರತಿ 15 ನಿಮಿಷಕ್ಕೆ ಜ್ಞಾಪನೆಗಳು) ವೇಳಾಪಟ್ಟಿಯಲ್ಲಿ ಚಲಿಸುವ ಏನಾದರೂ ಬೇಕು: ಹೋಸ್ಟ್ನ ಕ್ರಾನ್ ಸೌಲಭ್ಯ, ಅಥವಾ ನಿಮ್ಮ ಆ್ಯಪ್ನ ರಕ್ಷಿತ ಎಂಡ್ಪಾಯಿಂಟ್ ಕರೆಯುವ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್. ಯಾವಾಗಲೂ ಕೆಲಸಗಳು ಎರಡು ಬಾರಿ ನಡೆದರೂ ಸುರಕ್ಷಿತವಾಗಿರಲಿ, ವಿಫಲತೆಗಳನ್ನು ದಾಖಲಿಸಿ, ಮತ್ತು ನಿದ್ರಿಸಬಹುದಾದ ಅಥವಾ ಮರುಪ್ರಾರಂಭವಾಗುವ ಸರ್ವರ್ನೊಳಗಿನ ಟೈಮರ್ ಮೇಲೆ ಎಂದಿಗೂ ಅವಲಂಬಿಸಬೇಡಿ.
ಈ ಮಾರ್ಗದರ್ಶಿ ಆಯ್ಕೆಗಳು, ಪ್ರತಿಯೊಂದು ಯಾವಾಗ ಸರಿಹೊಂದುತ್ತದೆ, ಮತ್ತು ಅವನ್ನು AI ಆ್ಯಪ್ ಬಿಲ್ಡರ್ ಜೊತೆ ಹೇಗೆ ಹೊಂದಿಸುವುದು ಎಂದು ವಿವರಿಸುತ್ತದೆ, ಶೂನ್ಯಕ್ಕೆ ಅಳೆಯುವ ಹೋಸ್ಟ್ಗಳಲ್ಲಿಯೂ ಸೇರಿ.
ಹಿನ್ನೆಲೆ ಕೆಲಸ ಎಂದು ಏನನ್ನು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ
ನಿಧಾನವಾದ, ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ, ಅಥವಾ ಬಳಕೆದಾರರ ತಕ್ಷಣದ ಪ್ರತಿಕ್ರಿಯೆಗೆ ಅಗತ್ಯವಿಲ್ಲದ ಯಾವುದಾದರೂ:
- ಇಮೇಲ್ಗಳು, ಅಧಿಸೂಚನೆಗಳು ಮತ್ತು ರಸೀದಿಗಳನ್ನು ಕಳುಹಿಸುವುದು
- ಚಿತ್ರಗಳ ಗಾತ್ರ ಬದಲಿಸುವುದು, ವೀಡಿಯೊ ಪರಿವರ್ತಿಸುವುದು, PDF ರಚಿಸುವುದು
- ನಿಧಾನ ಮೂರನೇ ವ್ಯಕ್ತಿ APIಗಳನ್ನು ಕರೆಯುವುದು, ದೀರ್ಘ ಕಾರ್ಯಗಳಿಗಾಗಿ AI ಮಾದರಿಗಳನ್ನು ಸೇರಿ
- ಮತ್ತೊಂದು ವ್ಯವಸ್ಥೆಯಿಂದ ಡೇಟಾ ಆಮದು ಅಥವಾ ಸಿಂಕ್ ಮಾಡುವುದು
- ರಾತ್ರಿಯ ಸ್ವಚ್ಛತೆ, ವರದಿಗಳು ಮತ್ತು ಜ್ಞಾಪನೆಗಳು
ಇದನ್ನು ವಿನಂತಿಯೊಳಗೆ ಮಾಡಿದರೆ ಪುಟಗಳು ನಿಧಾನ ಮತ್ತು ದುರ್ಬಲವಾಗುತ್ತವೆ: ಇಮೇಲ್ ಒದಗಿಸುವವರು ಕೆಳಗಿದ್ದರೆ, ಬಳಕೆದಾರರ ಸೈನ್ಅಪ್ ವಿಫಲವಾಗುತ್ತದೆ. ಹಿನ್ನೆಲೆಗೆ ವರ್ಗಾಯಿಸಿದರೆ, ಬಳಕೆದಾರರಿಗೆ ತಕ್ಷಣ ಪ್ರತಿಕ್ರಿಯೆ ಸಿಗುತ್ತದೆ ಮತ್ತು ಕೆಲಸವನ್ನು ಮರುಪ್ರಯತ್ನಿಸಬಹುದು.
ಆಯ್ಕೆಗಳು
| ಆಯ್ಕೆ | ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ | ಅನುಕೂಲಗಳು | ಅನಾನುಕೂಲಗಳು |
|---|---|---|---|
| ಅದೇ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಫೈರ್-ಅಂಡ್-ಫಾರ್ಗೆಟ್ | ಪ್ರತಿಕ್ರಿಯಿಸಿ, ನಂತರ ಸರ್ವರ್ನಲ್ಲಿ ಕೆಲಸ ಮುಂದುವರಿಸಿ | ಯಾವುದೇ ಸೆಟಪ್ ಇಲ್ಲ | ಸರ್ವರ್ ನಿಂತರೆ ಕಳೆದುಹೋಗುತ್ತದೆ; ಮರುಪ್ರಯತ್ನ ಇಲ್ಲ |
ಪ್ರಕ್ರಿಯೆಯೊಳಗಿನ ಟೈಮರ್ (setInterval, setTimeout) | ಚಾಲನೆಯಲ್ಲಿರುವ ಸರ್ವರ್ನಲ್ಲಿ ಟೈಮರ್ | ಅತ್ಯಂತ ಸರಳ | ನಿದ್ರಿಸುವಾಗ ಚಲಿಸುವುದಿಲ್ಲ; ಹಲವು ಪ್ರತಿಗಳೊಂದಿಗೆ ನಕಲುಗಳು |
| ಡೇಟಾಬೇಸ್-ಆಧಾರಿತ ಕ್ಯೂ | ಕೆಲಸಗಳನ್ನು ಸಾಲುಗಳಾಗಿ ಉಳಿಸಲಾಗುತ್ತದೆ; ವರ್ಕರ್ ಅವನ್ನು ತೆಗೆದು ನಡೆಸುತ್ತದೆ | ನಿಮ್ಮ ಬಳಿ ಇರುವ ಡೇಟಾಬೇಸ್ ಬಳಸುತ್ತದೆ; ಬಾಳಿಕೆ ಬರುತ್ತದೆ; ಪರಿಶೀಲಿಸಲು ಸುಲಭ | ಮರುಪ್ರಯತ್ನ ಮತ್ತು ಲಾಕಿಂಗ್ ನೀವೇ ನಿರ್ಮಿಸಬೇಕು; ವರ್ಕರ್ ಚಲಾಯಿಸಲು ಏನಾದರೂ ಬೇಕು |
| ಮೀಸಲು ಕ್ಯೂ (Redis-ಆಧಾರಿತ ಅಥವಾ ನಿರ್ವಹಿಸಲ್ಪಟ್ಟ) | ಕ್ಯೂ ಸೇವೆ ಮತ್ತು ವರ್ಕರ್ಗಳು | ಪ್ರಬುದ್ಧ ಮರುಪ್ರಯತ್ನ ಮತ್ತು ವೇಳಾಪಟ್ಟಿ ವೈಶಿಷ್ಟ್ಯಗಳು | ನಡೆಸಲು ಮತ್ತು ಪಾವತಿಸಲು ಇನ್ನೊಂದು ಸೇವೆ |
| ಹೋಸ್ಟ್ ಮಾಡಿದ ಕೆಲಸ ಅಥವಾ ವರ್ಕ್ಫ್ಲೋ ಸೇವೆ | ಮೂರನೇ ವ್ಯಕ್ತಿ ಮರುಪ್ರಯತ್ನ ಮತ್ತು ವೇಳಾಪಟ್ಟಿಯೊಂದಿಗೆ ನಿಮ್ಮ ಎಂಡ್ಪಾಯಿಂಟ್ಗಳನ್ನು ಕರೆಯುತ್ತದೆ | ವೇಳಾಪಟ್ಟಿ ಮತ್ತು ಮರುಪ್ರಯತ್ನ ನಿಮಗಾಗಿ ನಿರ್ವಹಿಸಲ್ಪಡುತ್ತವೆ | ಮಾರಾಟಗಾರರ ಅವಲಂಬನೆ; ಇನ್ನೊಂದು ಖಾತೆ ಮತ್ತು ಕೀ |
| ಎಂಡ್ಪಾಯಿಂಟ್ ಕರೆಯುವ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್ | ಬೇರೆಡೆ ಇರುವ ಟೈಮರ್ ವೇಳಾಪಟ್ಟಿಯಲ್ಲಿ HTTP ವಿನಂತಿ ಕಳುಹಿಸುತ್ತದೆ | ಯಾವುದೇ ಹೋಸ್ಟ್ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ, ಶೂನ್ಯಕ್ಕೆ ಅಳೆಯುವುದನ್ನೂ ಸೇರಿ | ಕನಿಷ್ಠ ಅಂತರಗಳು ಮತ್ತು ವಿಳಂಬಗಳು; ಎಂಡ್ಪಾಯಿಂಟ್ ರಕ್ಷಿಸಿ |
| ಹೋಸ್ಟ್ನ ಅಂತರ್ನಿರ್ಮಿತ ಕ್ರಾನ್ | ವೇದಿಕೆ ವೇಳಾಪಟ್ಟಿಯ ಮೇಲೆ ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸುತ್ತದೆ | ಇರುವಲ್ಲಿ ಸರಳ | ಪ್ರತಿ ಹೋಸ್ಟ್ ಇದನ್ನು ನೀಡುವುದಿಲ್ಲ |
ಯಾವುದೇ ಒಂದೇ ಸರಿಯಾದ ಉತ್ತರವಿಲ್ಲ. ಸಣ್ಣ ಆ್ಯಪ್ಗೆ ಸಾಮಾನ್ಯವಾಗಿ ಡೇಟಾಬೇಸ್ ಕ್ಯೂ ಜೊತೆ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್ ಮಾತ್ರ ಬೇಕಾಗುತ್ತದೆ.
ಶೂನ್ಯಕ್ಕೆ ಅಳೆಯುವ ಹೋಸ್ಟ್ಗಳು ಚಿತ್ರವನ್ನು ಹೇಗೆ ಬದಲಿಸುತ್ತವೆ
ಅನೇಕ ಆಧುನಿಕ ಹೋಸ್ಟ್ಗಳು ಯಾರೂ ಬಳಸದಿದ್ದಾಗ ನಿಮ್ಮ ಆ್ಯಪ್ ಅನ್ನು ನಿದ್ರಿಸುತ್ತವೆ ಮತ್ತು ಮುಂದಿನ ವಿನಂತಿಯಲ್ಲಿ ಎಚ್ಚರಗೊಳಿಸುತ್ತವೆ. ಅದು ಹಣ ಉಳಿಸುತ್ತದೆ, ಆದರೆ ನಿದ್ರಿಸುತ್ತಿರುವ ಸರ್ವರ್ ಯಾವುದೇ ಕೋಡ್ ಚಲಾಯಿಸುವುದಿಲ್ಲ: ಟೈಮರ್ಗಳು ಚಲಿಸುವುದಿಲ್ಲ ಮತ್ತು ವರ್ಕರ್ಗಳು ಪೋಲ್ ಮಾಡುವುದಿಲ್ಲ. ಈ ಹೋಸ್ಟ್ಗಳಲ್ಲಿ, ನಿಗದಿತ ಕೆಲಸ ಒಳಬರುವ ವಿನಂತಿಯಿಂದ ಆರಂಭವಾಗಬೇಕು, ಮತ್ತು ಅಂತಹ ವಿನಂತಿಯ ಸುಲಭ ಮೂಲ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್. ಪ್ರತಿ ಕರೆ ಆ್ಯಪ್ (ಮತ್ತು ಆಗಾಗ್ಗೆ ಅದರ ಡೇಟಾಬೇಸ್) ಅನ್ನು ಎಚ್ಚರಗೊಳಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಪ್ರತಿ ನಿಮಿಷ ಕರೆಯುವುದು ಪ್ರತಿ 15 ನಿಮಿಷಕ್ಕಿಂತ ಹೆಚ್ಚು ವೆಚ್ಚ ಮಾಡುತ್ತದೆ. ಅಗತ್ಯ ಪೂರೈಸುವ ಅತ್ಯಂತ ನಿಧಾನ ವೇಳಾಪಟ್ಟಿಯನ್ನು ಆರಿಸಿ.
ಮಾದರಿ 1: ಡೇಟಾಬೇಸ್ ಕೆಲಸದ ಕ್ಯೂ
ಪ್ರಚೋದಿತ ಕೆಲಸಗಳಿಗೆ:
jobsಟೇಬಲ್ ರಚಿಸಿ: ಪ್ರಕಾರ, ಪೇಲೋಡ್ (JSON), ಸ್ಥಿತಿ (pending,running,done,failed), ಪ್ರಯತ್ನಗಳು, run_after, last_error, ಸಮಯ ಮುದ್ರೆಗಳು.- ಏನಾದರೂ ನಡೆದಾಗ, ಅದನ್ನು ಉಂಟುಮಾಡಿದ ಬದಲಾವಣೆಯಂತೆಯೇ ಅದೇ ವ್ಯವಹಾರದಲ್ಲಿ ಕೆಲಸದ ಸಾಲನ್ನು ಸೇರಿಸಿ, ಇದರಿಂದ ಅವು ಒಟ್ಟಿಗೆ ಯಶಸ್ವಿ ಅಥವಾ ವಿಫಲವಾಗುತ್ತವೆ.
- ವರ್ಕರ್ ಸಮಯ ಬಂದ ಕೆಲಸಗಳನ್ನು ತೆಗೆದು,
runningಎಂದು ಗುರುತಿಸಿ, ಕೆಲಸ ಮಾಡಿ,doneಎಂದು ಗುರುತಿಸುತ್ತದೆ. - ವಿಫಲವಾದರೆ,
attemptsಹೆಚ್ಚಿಸಿ,run_afterಅನ್ನು ನಂತರಕ್ಕೆ ಹೊಂದಿಸಿ (ಉದಾಹರಣೆಗೆ 1, 5, ನಂತರ 30 ನಿಮಿಷ) ಮತ್ತು ದೋಷವನ್ನು ಉಳಿಸಿ. ಗರಿಷ್ಠದ ನಂತರ,failedಎಂದು ಗುರುತಿಸಿ ಯಾರಿಗಾದರೂ ಎಚ್ಚರಿಕೆ ನೀಡಿ.
ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ವರ್ಕರ್ ಒಮ್ಮೆಗೆ ಚಲಿಸಬಹುದಾದರೆ, ಕೆಲಸಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ತೆಗೆದುಕೊಳ್ಳಬೇಕು. Postgres ನಲ್ಲಿ, SELECT ... FOR UPDATE SKIP LOCKED ಪ್ರತಿ ವರ್ಕರ್ ಬೇರೆ ಬೇರೆ ಸಾಲುಗಳನ್ನು ಘರ್ಷಣೆ ಇಲ್ಲದೆ ತೆಗೆದುಕೊಳ್ಳಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ.
ವರ್ಕರ್ ಅನ್ನು ಯಾವುದು ಚಲಾಯಿಸುತ್ತದೆ? ಯಾವಾಗಲೂ ಚಾಲನೆಯಲ್ಲಿರುವ ಸರ್ವರ್ನಲ್ಲಿ, ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಒಂದು ಲೂಪ್. ಶೂನ್ಯಕ್ಕೆ ಅಳೆಯುವ ಹೋಸ್ಟ್ನಲ್ಲಿ, ಮಾದರಿ 2 ರ ನಿಗದಿತ ಎಂಡ್ಪಾಯಿಂಟ್ ಪ್ರತಿ ಕರೆಯಲ್ಲಿ ಬಾಕಿ ಇರುವ ಕೆಲಸಗಳ ಬ್ಯಾಚ್ ಸಂಸ್ಕರಿಸಬಹುದು.
ಮಾದರಿ 2: ನಿಮ್ಮ ಆ್ಯಪ್ ಅನ್ನು ಕರೆಯುವ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್
ನಿಗದಿತ ಕೆಲಸಗಳಿಗೆ:
POST /api/cron/send-remindersನಂತಹ ಎಂಡ್ಪಾಯಿಂಟ್ ಸೇರಿಸಿ.- ಅದನ್ನು ರಕ್ಷಿಸಿ: ಹೆಡರ್ನಲ್ಲಿ ರಹಸ್ಯ ಟೋಕನ್ ಬೇಕು, ಎರಡೂ ಕಡೆ ರಹಸ್ಯವಾಗಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ, ಉಳಿದೆಲ್ಲವನ್ನೂ ನಿರಾಕರಿಸಿ.
- ಇಡೆಮ್ಪೊಟೆಂಟ್ ಮಾಡಿ: ಒಂದೇ ನಿಮಿಷದಲ್ಲಿ ಎರಡು ಬಾರಿ ನಡೆಸಿದರೆ ಎರಡು ಜ್ಞಾಪನೆಗಳನ್ನು ಕಳುಹಿಸಬಾರದು. ಕಳುಹಿಸಿದ್ದನ್ನು ದಾಖಲಿಸಿ.
- ಪ್ರತಿ ಕರೆಯನ್ನು ಸಣ್ಣದಾಗಿ ಇರಿಸಿ: ಒಂದು ಬ್ಯಾಚ್ (ಉದಾಹರಣೆಗೆ 100 ಐಟಂ) ಸಂಸ್ಕರಿಸಿ, ಉಳಿದದ್ದನ್ನು ಮುಂದಿನ ಕರೆಗೆ ಬಿಡಿ.
- ಶೆಡ್ಯೂಲರ್ ಅನ್ನು ಅದರತ್ತ ತೋರಿಸಿ.
ಶೆಡ್ಯೂಲರ್ ಆಯ್ಕೆಗಳು:
- GitHub Actions ನಿಗದಿತ ವರ್ಕ್ಫ್ಲೋಗಳು. GitHub ಬಳಕೆಯ ಮಿತಿಗಳಲ್ಲಿ ಉಚಿತ. ಸೆಪ್ಟೆಂಬರ್ 2026 ರ ಹೊತ್ತಿಗೆ, GitHub ದಸ್ತಾವೇಜು ಹೇಳುವಂತೆ ಕನಿಷ್ಠ ಅಂತರ ಪ್ರತಿ 5 ನಿಮಿಷಕ್ಕೊಮ್ಮೆ, ಬಿಡುವಿಲ್ಲದ ಸಮಯದಲ್ಲಿ (ವಿಶೇಷವಾಗಿ ಪ್ರತಿ ಗಂಟೆಯ ಆರಂಭದಲ್ಲಿ) ಚಾಲನೆ ವಿಳಂಬವಾಗಬಹುದು, ವೇಳಾಪಟ್ಟಿಗಳು ಡೀಫಾಲ್ಟ್ ಆಗಿ UTC ಬಳಸುತ್ತವೆ, ಮತ್ತು ಸಾರ್ವಜನಿಕ ರೆಪೊಸಿಟರಿಯ ನಿಗದಿತ ವರ್ಕ್ಫ್ಲೋಗಳು 60 ದಿನಗಳ ರೆಪೊಸಿಟರಿ ಚಟುವಟಿಕೆ ಇಲ್ಲದ ನಂತರ ನಿಷ್ಕ್ರಿಯಗೊಳ್ಳುತ್ತವೆ.
- ಹೋಸ್ಟ್ ಮಾಡಿದ ಕ್ರಾನ್ ಸೇವೆಗಳು. ಒಂದು ಯುಆರ್ಎಲ್ ಅನ್ನು ವೇಳಾಪಟ್ಟಿಯಲ್ಲಿ ಕರೆಯುವುದೊಂದೇ ಕೆಲಸವಾಗಿರುವ ಅನೇಕ ಸೇವೆಗಳಿವೆ. ಅವಲಂಬಿಸುವ ಮೊದಲು ವಿಶ್ವಾಸಾರ್ಹತೆ, ಕನಿಷ್ಠ ಅಂತರ ಮತ್ತು ಎಚ್ಚರಿಕೆ ವ್ಯವಸ್ಥೆಯನ್ನು ಪರಿಶೀಲಿಸಿ.
- ನಿಮ್ಮ ಕ್ಲೌಡ್ ಒದಗಿಸುವವರ ಶೆಡ್ಯೂಲರ್. ನೀವು ಈಗಾಗಲೇ ದೊಡ್ಡ ಕ್ಲೌಡ್ ಒದಗಿಸುವವರನ್ನು ಬಳಸಿದರೆ, ಅದು HTTPS ಎಂಡ್ಪಾಯಿಂಟ್ ಕರೆಯಬಲ್ಲ ನಿರ್ವಹಿತ ಶೆಡ್ಯೂಲರ್ ಹೊಂದಿರುತ್ತದೆ.
- ಹೋಸ್ಟ್ ಮಾಡಿದ ಕೆಲಸ ಅಥವಾ ವರ್ಕ್ಫ್ಲೋ ಸೇವೆ. ಇವು ವೇಳಾಪಟ್ಟಿ, ಕ್ಯೂಗಳು ಮತ್ತು ಮರುಪ್ರಯತ್ನಗಳನ್ನು ಸಂಯೋಜಿಸುತ್ತವೆ ಮತ್ತು ಪ್ರತಿ ಹಂತಕ್ಕೆ ನಿಮ್ಮ ಎಂಡ್ಪಾಯಿಂಟ್ಗಳನ್ನು ಕರೆಯುತ್ತವೆ. ಪ್ರತಿ ಮಾರಾಟಗಾರರ ಸೈಟ್ನಲ್ಲಿ ಬೆಲೆ ಮತ್ತು ಮಿತಿಗಳನ್ನು ಹೋಲಿಸಿ.
ಮಾದರಿ 3: ಒದಗಿಸುವವರಿಗೆ ಬಿಡಿ
ಕೆಲವೊಮ್ಮೆ ಅತ್ಯುತ್ತಮ ಹಿನ್ನೆಲೆ ಕೆಲಸ ಯಾವುದೂ ಅಲ್ಲ:
- ಪಾವತಿಗಳು. Stripe ವಿಫಲವಾದ ಚಂದಾದಾರಿಕೆ ಪಾವತಿಗಳನ್ನು ಮರುಪ್ರಯತ್ನಿಸುತ್ತದೆ ಮತ್ತು ವೆಬ್ಹುಕ್ಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ; ಪೋಲ್ ಮಾಡುವ ಬದಲು ನೀವು ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತೀರಿ. ವೆಬ್ಹುಕ್ ಎಂದರೇನು ನೋಡಿ.
- ಇಮೇಲ್. ನೀವು ಸಂದೇಶ ಹಸ್ತಾಂತರಿಸಿದ ನಂತರ ಒದಗಿಸುವವರು ವಿತರಣೆಯನ್ನು ಕ್ಯೂ ಮಾಡಿ ಮರುಪ್ರಯತ್ನಿಸುತ್ತಾರೆ.
- ಬೃಹತ್ AI ಕೆಲಸ. OpenAI ಮತ್ತು Anthropic ತುರ್ತಲ್ಲದ ವಿನಂತಿಗಳಿಗೆ ಬ್ಯಾಚ್ APIಗಳನ್ನು ನೀಡುತ್ತವೆ, ಅವನ್ನು ನೀವು ಸಲ್ಲಿಸಿ ನಂತರ ಸಂಗ್ರಹಿಸುತ್ತೀರಿ.
ನಿಮ್ಮ AI ಬಿಲ್ಡರ್ಗೆ ನೀಡಲು ಪ್ರಾಂಪ್ಟ್ಗಳು
ಕ್ಯೂಗಾಗಿ:
ನಮ್ಮ ಡೇಟಾಬೇಸ್ನಲ್ಲಿ jobs ಟೇಬಲ್ (ಪ್ರಕಾರ, ಪೇಲೋಡ್ JSON, ಸ್ಥಿತಿ, ಪ್ರಯತ್ನಗಳು, run_after, last_error) ಬಳಸಿ ಹಿನ್ನೆಲೆ ಕೆಲಸದ ಕ್ಯೂ ಸೇರಿಸಿ. ಬಳಕೆದಾರರು ಸೈನ್ ಅಪ್ ಮಾಡಿದಾಗ, ನೇರವಾಗಿ ಕಳುಹಿಸುವ ಬದಲು ಅದೇ ವ್ಯವಹಾರದಲ್ಲಿ send_welcome_email ಕೆಲಸ ಸೇರಿಸಿ. SELECT ... FOR UPDATE SKIP LOCKED ಬಳಸಿ ಬಾಕಿ ಕೆಲಸಗಳನ್ನು ತೆಗೆದು ಚಲಾಯಿಸುವ processJobs(limit) ಫಂಕ್ಷನ್ ಸೇರಿಸಿ, ವಿಫಲತೆಗಳನ್ನು 1, 5 ಮತ್ತು 30 ನಿಮಿಷಗಳ ನಂತರ ಮರುಪ್ರಯತ್ನಿಸಿ, 4 ಪ್ರಯತ್ನಗಳ ನಂತರ failed ಎಂದು ಗುರುತಿಸಿ.
ನಿಗದಿತ ಪ್ರಚೋದನೆಗಾಗಿ:
CRON_SECRET ರಹಸ್ಯದಿಂದ ಬೇರರ್ ಟೋಕನ್ನಿಂದ ರಕ್ಷಿತವಾದ POST /api/cron/tick ಸೇರಿಸಿ; ಅದಿಲ್ಲದ ಯಾವುದೇ ವಿನಂತಿಯನ್ನು ನಿರಾಕರಿಸಿ. ಪ್ರತಿ ಕರೆಯು processJobs(100) ಚಲಾಯಿಸಿ, ಮುಂದಿನ 24 ಗಂಟೆಗಳಲ್ಲಿ ಬಾಕಿ ಇರುವ ಮತ್ತು ಇನ್ನೂ ಕಳುಹಿಸದ ಬುಕಿಂಗ್ ಜ್ಞಾಪನೆಗಳನ್ನು ಕಳುಹಿಸಿ, ಕಳುಹಿಸಿದ ಜ್ಞಾಪನೆಗಳನ್ನು ದಾಖಲಿಸಿ ಏನೂ ಎರಡು ಬಾರಿ ಹೋಗದಂತೆ ಮಾಡಿ. ಏನು ಚಲಿಸಿತು ಎಂಬುದರ JSON ಸಾರಾಂಶ ಹಿಂತಿರುಗಿಸಿ. ನಂತರ ಈ ಎಂಡ್ಪಾಯಿಂಟ್ ಅನ್ನು ಪ್ರತಿ 15 ನಿಮಿಷಕ್ಕೆ ಕರೆಯುವ GitHub Actions ವರ್ಕ್ಫ್ಲೋ ಬರೆಯಿರಿ, URL ಮತ್ತು ಟೋಕನ್ ಅನ್ನು ರೆಪೊಸಿಟರಿ ರಹಸ್ಯಗಳಿಂದ ಓದಿ.
ಸಾಮಾನ್ಯ ತಪ್ಪುಗಳು
setIntervalಮೇಲೆ ಅವಲಂಬಿಸುವುದು. ಸರ್ವರ್ ನಿದ್ರಿಸಿದಾಗ ಅಥವಾ ಮರುಪ್ರಾರಂಭವಾದಾಗ ಅದು ಸದ್ದಿಲ್ಲದೆ ನಿಲ್ಲುತ್ತದೆ, ಮತ್ತು ಎರಡು ಪ್ರತಿಗಳು ಚಲಿಸಿದಾಗ ದ್ವಿಗುಣಗೊಳ್ಳುತ್ತದೆ.- ರಕ್ಷಣೆಯಿಲ್ಲದ ಕ್ರಾನ್ ಎಂಡ್ಪಾಯಿಂಟ್. ಅದನ್ನು ಕಂಡುಹಿಡಿದ ಯಾರಾದರೂ ನಿಮ್ಮ ಕೆಲಸಗಳನ್ನು, ಅಥವಾ ನಿಮ್ಮ ಇಮೇಲ್ ಬಿಲ್ ಅನ್ನು ಪ್ರಚೋದಿಸಬಹುದು.
- ಇಡೆಮ್ಪೊಟೆಂಟ್ ಅಲ್ಲದ ಕೆಲಸಗಳು. ಮರುಪ್ರಯತ್ನಗಳು ಮತ್ತು ನಕಲು ಶೆಡ್ಯೂಲರ್ ಕರೆಗಳು ಸಂಭವಿಸುತ್ತವೆ. ಅವಕ್ಕಾಗಿ ವಿನ್ಯಾಸ ಮಾಡಿ.
- ವಿಫಲತೆ ಗೋಚರತೆ ಇಲ್ಲದಿರುವುದು. ಒಂದು ವಾರ ಸದ್ದಿಲ್ಲದೆ ವಿಫಲವಾಗುವ ಕೆಲಸ, ಜೋರಾಗಿ ವಿಫಲವಾಗುವುದಕ್ಕಿಂತ ಕೆಟ್ಟದು. ದೋಷಗಳನ್ನು ಲಾಗ್ ಮಾಡಿ ಮತ್ತು ಪದೇ ಪದೇ ವಿಫಲತೆಗಳಿಗೆ ಎಚ್ಚರಿಕೆ ನೀಡಿ.
- ಒಂದೇ ವಿನಂತಿಯಲ್ಲಿ ದೀರ್ಘ ಚಾಲನೆಗಳು. ವಿನಂತಿಗಳು ಸಮಯ ಮೀರುತ್ತವೆ. ಬ್ಯಾಚ್ಗಳಲ್ಲಿ ಸಂಸ್ಕರಿಸಿ.
- ತುಂಬಾ ಆಗಾಗ್ಗೆ ವೇಳಾಪಟ್ಟಿ. ಶೂನ್ಯಕ್ಕೆ ಅಳೆಯುವ ಹೋಸ್ಟ್ನಲ್ಲಿ ಪ್ರತಿ ಕರೆ ಆ್ಯಪ್ ಅನ್ನು ಎಚ್ಚರಗೊಳಿಸಿ ಬಿಲ್ ಮಾಡುತ್ತದೆ. ಅಂತರವನ್ನು ನಿಜ ಅಗತ್ಯಕ್ಕೆ ಹೊಂದಿಸಿ.
- ಸಮಯ ವಲಯಗಳು. "ಬೆಳಿಗ್ಗೆ 9" ನಿಮ್ಮ ಶೆಡ್ಯೂಲರ್ (ಆಗಾಗ್ಗೆ UTC) ಮತ್ತು ನಿಮ್ಮ ಬಳಕೆದಾರರಿಗೆ ಬೇರೆ ಬೇರೆ ಅರ್ಥ ನೀಡುತ್ತದೆ. ಸಮಯಗಳನ್ನು UTC ಯಲ್ಲಿ ಉಳಿಸಿ ಮತ್ತು ಪ್ರತಿ ಬಳಕೆದಾರರಿಗೆ ಪರಿವರ್ತಿಸಿ.
- ವರ್ಕ್ಫ್ಲೋ ಫೈಲ್ನಲ್ಲಿ ರಹಸ್ಯಗಳು. ಟೋಕನ್ಗಳನ್ನು ಶೆಡ್ಯೂಲರ್ನ ರಹಸ್ಯ ಸಂಗ್ರಹದಲ್ಲಿ ಇಡಿ. API ಕೀಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿಡುವುದು ಹೇಗೆ ನೋಡಿ.
ಪರಿಶೀಲನಾಪಟ್ಟಿ
- ನಿಧಾನ ಕೆಲಸ ಬಳಕೆದಾರ ವಿನಂತಿಗಳಿಂದ ಹೊರಗೆ ಸರಿಸಲ್ಪಟ್ಟಿದೆ
- ಕೆಲಸಗಳು ಕೇವಲ ಮೆಮೊರಿಯಲ್ಲಿ ಅಲ್ಲ, ಬಾಳಿಕೆ ಬರುವಂತೆ ಸಂಗ್ರಹಿಸಲ್ಪಟ್ಟಿವೆ
- ಹೆಚ್ಚುತ್ತಿರುವ ವಿಳಂಬಗಳು ಮತ್ತು ಗರಿಷ್ಠದೊಂದಿಗೆ ಮರುಪ್ರಯತ್ನಗಳು
- ಪ್ರತಿ ಕೆಲಸವೂ ಎರಡು ಬಾರಿ ಚಲಿಸಿದರೂ ಸುರಕ್ಷಿತ
- ನಿಗದಿತ ಎಂಡ್ಪಾಯಿಂಟ್ ರಹಸ್ಯ ಟೋಕನ್ನಿಂದ ರಕ್ಷಿತ
- ಪ್ರತಿ ಚಾಲನೆಯೂ ಸೀಮಿತ ಬ್ಯಾಚ್ ಸಂಸ್ಕರಿಸುತ್ತದೆ
- ವಿಫಲ ಕೆಲಸಗಳು ಗೋಚರಿಸುತ್ತವೆ, ಎಚ್ಚರಿಕೆಗಳೊಂದಿಗೆ
- ಹೋಸ್ಟಿಂಗ್ ವೆಚ್ಚವನ್ನು ಗಮನದಲ್ಲಿಟ್ಟು ವೇಳಾಪಟ್ಟಿ ಅಂತರ ಆರಿಸಲಾಗಿದೆ
- ಸಮಯಗಳು UTC ಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲ್ಪಟ್ಟಿವೆ
Mythex ನಲ್ಲಿ ಹಿನ್ನೆಲೆ ಕೆಲಸಗಳು
Mythex ದಸ್ತಾವೇಜು ನಿಗದಿತ ಅಥವಾ ಕ್ರಾನ್ ಕೆಲಸಗಳನ್ನು ವಿವರಿಸುವುದಿಲ್ಲ, ಮತ್ತು ಪ್ರಕಟಿತ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಅವುಗಳ ಡೇಟಾಬೇಸ್ಗಳು ನಿಷ್ಕ್ರಿಯವಾದಾಗ ನಿದ್ರಿಸುತ್ತವೆ ಮತ್ತು ಮುಂದಿನ ವಿನಂತಿಯಲ್ಲಿ ಎಚ್ಚರಗೊಳ್ಳುತ್ತವೆ (ಹೋಸ್ಟಿಂಗ್ ಮಿತಿಗಳು ನೋಡಿ). ಆದ್ದರಿಂದ ನಿಮ್ಮ ಆ್ಯಪ್ನೊಳಗಿನ ಟೈಮರ್ಗಳ ಮೇಲೆ ಅವಲಂಬಿಸಬೇಡಿ. ಕೆಲಸ ಮಾಡುವ ವಿಧಾನ ಮೇಲಿನದೇ: ಏಜೆಂಟ್ಗೆ ಜಾಬ್ಸ್ ಟೇಬಲ್ ಮತ್ತು ಟೋಕನ್-ರಕ್ಷಿತ ಎಂಡ್ಪಾಯಿಂಟ್ ಕೇಳಿ, ನಂತರ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್ ಅನ್ನು ನಿಮ್ಮ ಪ್ರಕಟಿತ URL ಗೆ ತೋರಿಸಿ. ಟೋಕನ್ ಅನ್ನು ಪ್ರಾಜೆಕ್ಟ್ ರಹಸ್ಯವಾಗಿ ಸಂಗ್ರಹಿಸಿ, ಮತ್ತು ಪ್ರತಿ ಎಚ್ಚರಗೊಳ್ಳುವಿಕೆಯು ಆ್ಯಪ್ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಎಚ್ಚರವಾಗಿರುವ ಸಮಯಕ್ಕೆ ಕ್ರೆಡಿಟ್ಗಳನ್ನು ವೆಚ್ಚ ಮಾಡುತ್ತದೆ ಎಂದು ನೆನಪಿಡಿ, ಆದ್ದರಿಂದ ಸಮಂಜಸ ಅಂತರ ಆರಿಸಿ. ಈ ಕೆಲಸಕ್ಕಾಗಿ ನಿಮ್ಮ ಆ್ಯಪ್ಗೆ API ಬ್ಯಾಕೆಂಡ್ ಬೇಕಾದರೆ, REST API ಬ್ಯಾಕೆಂಡ್ ರೆಸಿಪಿ ಪ್ರಾರಂಭ ಬಿಂದು, ಮತ್ತು REST API ಹೇಗೆ ನಿರ್ಮಿಸುವುದು ಎಂಡ್ಪಾಯಿಂಟ್ಗಳ ವಿನ್ಯಾಸವನ್ನು ವಿವರಿಸುತ್ತದೆ. ನಿಮ್ಮ ಉತ್ಪನ್ನದ ಕೇಂದ್ರವೇ ಯಾವಾಗಲೂ ಚಾಲನೆಯಲ್ಲಿರುವ ವರ್ಕರ್ಗಳು ಅಥವಾ ಬಾಟ್ಗಳಾದರೆ, ನಿರಂತರ ಪ್ರಕ್ರಿಯೆಗಳಿಗಾಗಿ ನಿರ್ಮಿತ ಹೋಸ್ಟ್ ಹೆಚ್ಚು ಸೂಕ್ತವಾಗಬಹುದು.
ಪ್ರಶ್ನೆಗಳು
ಹಿನ್ನೆಲೆ ಕೆಲಸ ಎಂದರೇನು?
ಹಿನ್ನೆಲೆ ಕೆಲಸ ಎಂದರೆ ಬಳಕೆದಾರರು ಕಾಯುತ್ತಿರುವ ವಿನಂತಿಯ ಹೊರಗೆ ನಿಮ್ಮ ಆ್ಯಪ್ ಮಾಡುವ ಕೆಲಸ, ಉದಾಹರಣೆಗೆ ಇಮೇಲ್ ಕಳುಹಿಸುವುದು, ಚಿತ್ರಗಳ ಗಾತ್ರ ಬದಲಿಸುವುದು, ವರದಿಗಳನ್ನು ರಚಿಸುವುದು ಅಥವಾ ಡೇಟಾ ಸಿಂಕ್ ಮಾಡುವುದು. ಬಳಕೆದಾರರಿಗೆ ವೇಗದ ಪ್ರತಿಕ್ರಿಯೆ ಸಿಗುತ್ತದೆ, ಮತ್ತು ಕೆಲಸ ಪ್ರತ್ಯೇಕವಾಗಿ ನಡೆಯುತ್ತದೆ ಮತ್ತು ವಿಫಲವಾದರೆ ಮರುಪ್ರಯತ್ನಿಸಬಹುದು.
ನನ್ನ ಹೋಸ್ಟ್ನಲ್ಲಿ ಕ್ರಾನ್ ಇಲ್ಲದಿದ್ದರೆ ನಿಗದಿತ ಕಾರ್ಯವನ್ನು ಹೇಗೆ ನಡೆಸುವುದು?
ಕೆಲಸ ಮಾಡುವ ರಕ್ಷಿತ ಎಂಡ್ಪಾಯಿಂಟ್ ಸೇರಿಸಿ, ನಂತರ ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್ ಅದನ್ನು ಒಂದು ವೇಳಾಪಟ್ಟಿಯ ಮೇಲೆ ಕರೆಯುವಂತೆ ಮಾಡಿ. ಆಯ್ಕೆಗಳಲ್ಲಿ ನಿಗದಿತ GitHub Actions ವರ್ಕ್ಫ್ಲೋ, ಹೋಸ್ಟ್ ಮಾಡಿದ ಕ್ರಾನ್ ಸೇವೆ, ಅಥವಾ ನಿಮ್ಮ ಕ್ಲೌಡ್ ಒದಗಿಸುವವರ ಶೆಡ್ಯೂಲರ್ ಸೇರಿವೆ. ಎಂಡ್ಪಾಯಿಂಟ್ ಅನ್ನು ರಹಸ್ಯ ಟೋಕನ್ನಿಂದ ರಕ್ಷಿಸಿ.
ನಿಗದಿತ ಕೆಲಸಗಳಿಗೆ setInterval ಅಥವಾ setTimeout ಬಳಸಬಹುದೇ?
ಯಾವಾಗಲೂ ಚಾಲನೆಯಲ್ಲಿರುವ ಸರ್ವರ್ನಲ್ಲಿ ಸಣ್ಣ, ಮುಖ್ಯವಲ್ಲದ ಕೆಲಸಗಳಿಗೆ ಮಾತ್ರ. ಸರ್ವರ್ ಮರುಪ್ರಾರಂಭವಾದರೆ, ಶೂನ್ಯಕ್ಕೆ ಅಳೆದರೆ ಅಥವಾ ಹಲವು ಪ್ರತಿಗಳು ಚಾಲನೆಯಾದರೆ, ಟೈಮರ್ಗಳು ಕಳೆದುಹೋಗುತ್ತವೆ ಅಥವಾ ಹಲವು ಬಾರಿ ಚಾಲನೆಯಾಗುತ್ತವೆ. ನಿಗದಿತ ಕೆಲಸವನ್ನು ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಉಳಿಸಿ ಅಥವಾ ಶೆಡ್ಯೂಲರ್ ಬಳಸಿ.
Mythex ಕ್ರಾನ್ ಕೆಲಸಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆಯೇ?
Mythex ದಸ್ತಾವೇಜು ನಿಗದಿತ ಅಥವಾ ಕ್ರಾನ್ ಕೆಲಸಗಳನ್ನು ವಿವರಿಸುವುದಿಲ್ಲ, ಮತ್ತು ಪ್ರಕಟಿತ ಆ್ಯಪ್ಗಳು ನಿಷ್ಕ್ರಿಯವಾದಾಗ ನಿದ್ರಿಸುತ್ತವೆ. ವಿಶ್ವಾಸಾರ್ಹ ವಿಧಾನವೆಂದರೆ ನಿಮ್ಮ ಆ್ಯಪ್ನ ರಕ್ಷಿತ ಎಂಡ್ಪಾಯಿಂಟ್ ಅನ್ನು ಬಾಹ್ಯ ಶೆಡ್ಯೂಲರ್ ಕರೆಯುವುದು, ಇದು ಆ್ಯಪ್ ಅನ್ನು ಎಚ್ಚರಗೊಳಿಸಿ ಕೆಲಸವನ್ನು ನಡೆಸುತ್ತದೆ.