ν”Όλ“œλ‘œ λŒμ•„κ°€κΈ°
Stop Crashing Your Server: Prevent Laravel Cron Collisions πŸ›‘
Dev.toDev.to
Backend

Redis 기반 Mutex Lock λ„μž…μ„ ν†΅ν•œ Cron Collision 및 쀑볡 μ‹€ν–‰ λ°©μ§€

Stop Crashing Your Server: Prevent Laravel Cron Collisions πŸ›‘

Prajapati Paresh2026λ…„ 5μ›” 2일2λΆ„intermediate

Context

B2B SaaS ν™˜κ²½μ—μ„œ 데이터 증가에 λ”°λ₯Έ μž‘μ—… μ‹€ν–‰ μ‹œκ°„ μ¦κ°€λ‘œ κΈ°μ‘΄ μŠ€μΌ€μ€„λ§μ˜ ν•œκ³„ λ°œμƒ. μž‘μ—… μ™„λ£Œ μ „ λ‹€μŒ μž‘μ—…μ΄ μ‹œμž‘λ˜λŠ” Cron Collision ν˜„μƒμœΌλ‘œ μΈν•œ CPU 점유율 μƒμŠΉ 및 Database Lock 유발둜 μ‹œμŠ€ν…œ μ „μ²΄μ˜ κ°€μš©μ„± μ €ν•˜.

Technical Solution

  • Redis 기반 Mutex Lock을 ν™œμš©ν•œ withoutOverlapping() 적용으둜 이전 μž‘μ—… μ™„λ£Œ μ „ 쀑볡 싀행을 μ›μ²œ μ°¨λ‹¨ν•˜λŠ” ꡬ쑰 섀계
  • μˆ˜ν‰ ν™•μž₯ ν™˜κ²½μ—μ„œ λ‹€μˆ˜ μ„œλ²„μ˜ 쀑볡 싀행을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ onOneServer()λ₯Ό ν†΅ν•œ 단일 μ‹€ν–‰ μ„œλ²„ 보μž₯ 둜직 κ΅¬ν˜„
  • routes/console.php λ‚΄ Schedule facade 섀정을 ν†΅ν•œ 쀑앙 집쀑식 μŠ€μΌ€μ€„ 관리 체계 ꡬ좕
  • thenPing() 연동을 톡해 μž‘μ—… μ™„λ£Œ μƒνƒœλ₯Ό μ™ΈλΆ€ λͺ¨λ‹ˆν„°λ§ 도ꡬ에 μ „μ†‘ν•˜μ—¬ Silent Failureλ₯Ό λ°©μ§€ν•˜λŠ” κ°€μ‹œμ„± 확보
  • λ¬΄λΆ„λ³„ν•œ μž‘μ—… μ‹€ν–‰ λŒ€μ‹  Redis Lock μƒνƒœλ₯Ό ν™•μΈν•˜μ—¬ CPU Spike 및 Database 경합을 μ œμ–΄ν•˜λŠ” λ¦¬μ†ŒμŠ€ μ΅œμ ν™” μ „λž΅ 채택

1. μž‘μ—… μ‹€ν–‰ μ‹œκ°„μ΄ μŠ€μΌ€μ€„λ§ 주기보닀 κΈΈμ–΄μ§ˆ κ°€λŠ₯성이 μžˆλŠ”μ§€ κ²€ν† 

2. 닀쀑 μ„œλ²„ ν™˜κ²½(Horizontal Scaling)μ—μ„œ 동일 μž‘μ—…μ΄ 쀑볡 μ‹€ν–‰λ˜λŠ”μ§€ 확인

3. Redis 기반의 Mutex Lock 적용 μ—¬λΆ€ κ²€ν† 

4. μ™ΈλΆ€ Health Check 도ꡬλ₯Ό ν†΅ν•œ μž‘μ—… μ™„λ£Œ μ•Œλ¦Ό μ„€μ • μ—¬λΆ€ 확인

원문 읽기