Laravel 13.31 இடைநிறுத்தக்கூடிய (interruptible) வேலைகளைச் சேர்க்கிறது, இது வரிசைப் பணியாளர்கள் (queue workers) வரிசைப்படுத்தல்களின் (deployments) போது அனுப்பப்படும் SIGTERM சிக்னலைப் பெற்று, ஒரு பணியை பாதியிலேயே நிறுத்துவதற்குப் பதிலாக முறையாகச் செயல்பட்டு வெளியேற அனுமதிக்கிறது. பல்லாயிரக்கணக்கான வரிசைகளைச் செயலாக்குதல், மொத்த மின்னஞ்சல்களை அனுப்புதல் அல்லது அறிக்கைகளை உருவாக்குதல் போன்ற நீண்ட நேர வேலைகளைச் செய்யும் குழுக்களுக்கு இது பயனுள்ளதாக இருக்கும், ஏனெனில் புதிய வெளியீடு (release) வரும்போது தரவுத் தொடர்ச்சியாக (consistent) இருக்கும்.
வரிசைப்படுத்தல்கள் (deployments) ஏன் வேலைகளைத் தடுத்து நிறுத்துகின்றன
புதிய பதிப்பு வரும்போது, Supervisor, Docker மற்றும் Kubernetes போன்ற செயல்முறை மேலாளர்கள் (process managers), ஏற்கனவே உள்ள பணியாளர்களுக்கு நிறுத்தக் கோரும் ஒரு கண்ணியமான வேண்டுகோளான SIGTERM-ஐ அனுப்பி நிறுத்தச் சொல்கின்றன. பெரும்பாலான பணியாளர்கள் தற்போதைய வேலை முடியும் வரை காத்திருந்து வெளியேறுகின்றன. ஆனால், மேலாளர் இதற்காகச் சில வினாடிகளை மட்டுமே அனுமதிக்கும்போது சிக்கல் ஏற்படுகிறது. ஒரு வேலைக்கு பல நிமிடங்கள் தேவைப்பட்டால், மேலாளர் SIGKILL-ஐப் பயன்படுத்தி அந்தச் செயல்முறையை உடனடியாகக் கொன்றுவிடுகிறார். இதனால் வேலை ஒரு நிலையான நிலையை (consistent state) அடையாமல், பகுதியளவு புதுப்பிக்கப்பட்ட பதிவுகள், கைவிடப்பட்ட கோப்புகள் அல்லது நகல் வேலைகள் போன்ற சிக்கல்களை ஏற்படுத்துகிறது.
Laravel-ன் தீர்வு: கூட்டு இடைநிறுத்தம் (cooperative interruption)
Laravel 13.31, Interruptible என்ற ஒரு ஒப்பந்தத்தை (contract) அறிமுகப்படுத்துகிறது. ஒரு வேலை வகுப்பு (job class) இந்த ஒப்பந்தத்தைச் செயல்படுத்தினால், அது நிறுத்தக் கோரிக்கையை உணர்ந்து கொள்ளும். SIGTERM வரும்போது, Laravel அந்த வேலையின் interrupted() முறையை (method) அழைக்கிறது. இந்தச் சட்டகம் (framework) வேலையைத் தானாகவே நிறுத்தாது; Laravel அமைக்கும் ஒரு கொடியை (flag) வேலை சரிபார்த்து, தானாகவே வெளியேற வேண்டும். இந்த கூட்டு மாதிரி (cooperative model), டெவலப்பர்கள் தற்போதைய சுழற்சியை (loop iteration) முடிக்கவும், பகுதியளவு மாற்றங்களைச் சரிசெய்யவும் (roll back), அல்லது வெளியேறுவதற்கு முன் ஒரு சேமிப்புப் புள்ளியை (checkpoint) எழுதவும் அனுமதிக்கிறது.
ஒரு வேலையை எவ்வாறு இடைநிறுத்தக்கூடியதாக மாற்றுவது
- ஒப்பந்தத்தைச் செயல்படுத்துதல் – வேலை வகுப்பு வரையறையில்
implements Interruptible-ஐச் சேர்க்கவும். - வேலைச் சுழற்சிக்குள் கொடியைச் சரிபார்த்தல் – வேலை நிற்க வேண்டுமா என்பதை அறிய ஒவ்வொரு சுழற்சியிலும் ஒரு சரிபார்ப்பைச் சேர்க்கவும்.
- சுத்தம் செய்தல் (Cleanup) –
interrupted()முறையில், வேலை பின்னர் தொடர உதவும் எந்தவொரு நிலையையும் (state) சேமிக்கவும் அல்லது பகுப்பாய்விற்காக இடைநிறுத்தத்தைப் பதிவு செய்யவும்.
மிகப்பெரிய பொறி: --once-ஐப் பயன்படுத்தாதீர்கள்
php artisan queue:work --once மூலம் வரிசைப் பணியாளரை இயக்குவது சிக்னல் கையாளுதலை (signal handling) முழுமையாக முடக்குகிறது. பணியாளர் ஒரு வேலையைச் செய்துவிட்டு வெளியேறிவிடுவார், ஆனால் அவர் SIGTERM கையாளுதலைப் பதிவு செய்ய மாட்டார். இதன் விளைவாக, எந்தவொரு இடைநிறுத்தக்கூடிய வேலையும் நிறுத்தக் கோரிக்கையைப் புறக்கணிக்கும் மற்றும் செயலாக்கத்தின் இடையில் கொல்லப்படும். இந்த முறை cron-மூலம் இயக்கப்படும் கொள்கலன்களிலும் (containers) மற்றும் ஒற்றை முறை வரிசைப்படுத்தல்களிலும் (one-shot deployments) காணப்படுகிறது. இடைநிறுத்தக்கூடிய வேலைகள் தேவைப்படும் போதெல்லாம் டெமான் முறையில் (php artisan queue:work) இயக்குவதன் மூலம் இதைச் சரிசெய்யலாம்.
இடைநிறுத்தங்களைக் கண்காணித்தல்
Laravel நீங்கள் இணைக்கக்கூடிய இரண்டு நிகழ்வுகளை (events) வெளியிடுகிறது:
- WorkerInterrupted – எந்தவொரு பணியாளரும் SIGTERM பெறும்போது இது வெளியிடப்படுகிறது. இந்த நிகழ்வைப் பதிவு செய்வது, வரிசைப்படுத்தல்கள் எவ்வளவு அடிக்கடி பணியாளர்களைத் தடுக்கின்றன என்பதைக் காட்டுகிறது.
- JobInterrupted – தற்போதைய வேலை
Interruptibleஒப்பந்தத்தைச் செயல்படுத்தினால் மட்டுமே இது வெளியிடப்படுகிறது. தற்காலிகக் கோப்புகளை நீக்குதல் அல்லது “கடைசியாகச் செயலாக்கப்பட்ட வரிசை” (last processed row) குறியீட்டைப் புதுப்பித்தல் போன்ற வேலை சார்ந்த சுத்திகரிப்பு நடவடிக்கைகளைத் தூண்ட இந்த நிகழ்வைப் பயன்படுத்தவும்.
இந்த நிகழ்வுகளைக் கவனிப்பதன் மூலம், வரிசைப்படுத்தல்களின் தாக்கத்தைக் காட்டும் டேஷ்போர்டுகளை உருவாக்கவும், அடிக்கடி பாதியிலேயே நிறுத்தப்படும் வேலைகளைக் கண்டறியவும் குழுக்களால் முடியும்.
வரிசை அளவு அறிக்கையிடலில் மாற்றம்
இந்த வெளியீடு வரிசை மேலாளருக்கு (queue manager) totalSize() என்ற முறையைச் சேர்க்கிறது, இது அனைத்து வரிசைகளிலும் நிலுவையில் உள்ள மொத்த வேலைகளின் எண்ணிக்கையைத் திருப்பித் தருகிறது. இது தரவுத்தள அடிப்படையிலான (database-backed) மற்றும் Redis டிரைவர்களுக்கானது, இவை உண்மையான எண்ணிக்கையைத் தெரிவிக்கின்றன. SQS, Sync மற்றும் Beanstalkd போன்ற டிரைவர்கள் இன்னும் பூஜ்ஜியத்தையே திருப்பித் தருகின்றன, ஏனெனில் அவை Laravel API மூலம் எண்ணிக்கையை வெளிப்படுத்துவதில்லை. SQS பயன்படுத்தும் குழுக்கள் வரிசையின் ஆழத்தைக் (queue depth) கண்டறிய CloudWatch அளவீடுகளைத் தொடர்ந்து பயன்படுத்த வேண்டும்.
வெவ்வேறு அமைப்புகளுக்கு இதன் பொருள் என்ன
- Docker/Kubernetes – கண்ணியமான முறையில் வெளியேறும் கால அவகாசத்தை (graceful shutdown period) இப்போது திறம்படப் பயன்படுத்தலாம். வேலைகள் கொடியைக் கவனித்து முறையாக வெளியேற சில வினாடிகள் அவகாசம் கிடைக்க, நிறுத்தக் கால அவகாசத்தை (termination grace period) நீட்டிக்கவும்.
- Supervisor – இடைநிறுத்தக் கொடியைப் பெற்ற பிறகு ஒரு வேலை முடிய நீங்கள் எதிர்பார்க்கும் நேரத்தை விட
stopwaitsecs-ஐ அதிகமாக அமைக்கவும். - பழைய வேலைகள் (Legacy jobs) – மேலாளரின் காலாவதி நேரத்தை விட (timeout) நீண்ட நேரம் இயங்கும் எந்தவொரு வேலையையும் மறுஆய்வு செய்து, சாத்தியமான இடங்களில் அதை இடைநிறுத்தக்கூடியதாக மாற்றவும்.
எதிர் கருத்து: கூடுதல் சிக்கல்
இந்த அம்சம் முறையான timeout உள்ளமைப்பிற்கு மாற்றாகாது. ஒரு வேலையின் சுழற்சி இடைநிறுத்தக் கொடியைச் சரிபார்க்கவில்லை என்றால், மேலாளர் இன்னும் SIGKILL-ஐ அனுப்புவார். குழுக்கள் நீண்ட நேரம் இயங்கும் குறியீட்டுப் பாதைகளை (code paths) ஆய்வு செய்து, தர்க்கரீதியான இடைவெளிகளில் (logical breakpoints) சரிபார்ப்புகளைச் சேர்க்க வேண்டும். ஏற்கனவே நிறுத்தக் காலத்திற்குள் முடிந்துவிடும் குறுகிய நேர வேலைகளுக்கு, ஒரு ஒப்பந்தத்தைச் செயல்படுத்துதல் மற்றும் கொடி சரிபார்ப்புகளைச் சேர்த்தல் போன்ற கூடுதல் வேலைகளைச் செய்வது சில டெவலப்பர்களுக்குப் பிடிக்காமல் போகலாம்.
செயல் சரிபார்ப்புப் பட்டியல் (Action checklist)
- Scan deployment scripts for the
--onceflag and replace it with daemon mode where interruptible jobs are used. - Identify the longest-running jobs (those that touch tens of thousands of rows or run for several minutes) and add the Interruptible contract.
- Insert a flag check inside each loop iteration, and move any necessary finalisation code into the
interrupted()method. - Hook listeners to
WorkerInterruptedandJobInterruptedto collect metrics on how often deployments affect processing. - For Redis or database queues, use
totalSize()to monitor backlog; for SQS, keep CloudWatch alarms in place.
Treat deployment-driven shutdowns as a coordinated step rather than an abrupt kill. Laravel 13.31 keeps data consistent and eases the operational headaches of half-finished jobs. The trade-off is a modest increase in code responsibility, but teams that rely on heavy background processing gain a more reliable production environment.
