cron λ°°μΉ μ€ν¨ μλ¦Όμ΄ ν루μ μμ ν΅μ© μ€κ³ λ΄μ©μ΄ λ€ κ°μμ μ무λ λ³΄μ§ μμλ€. κ·Έλμ ν μκ°μ ν ν΅λ§ λκ°κ² λ°κΏ¨λ€. κ·Έ λ€λ‘ μ€ν¨λ₯Ό λ©°μΉ λ¦κ² μκ² λλ€.
Table of contents
Open Table of contents
μμΈ β μ΅μ μ‘°κ±΄μ΄ λ무 λμλ€
μ΄λ κ² λ§λ€μλ€.
$last = $this->cache->get('last_alert_time');
if ($last && (time() - $last) < 3600) {
return; // ν μκ° μμ λ³΄λΈ μ μμΌλ©΄ μ 보λ
}
sendAlert($message);
$this->cache->save('last_alert_time', time(), 7200);
λ§μ§λ§μΌλ‘ λ³΄λΈ μκ°μ memcached ν€ νλμ λ΄κ³ TTL μ ν μκ°μΌλ‘ 쀬λ€. κ·Έ ν€κ° νλλΌμ μ’
λ₯λ₯Ό κ°λ¦¬μ§ μμκ³ μ΄λ€ μλ¦Όμ΄λ ν μκ°μ ν ν΅μ΄ λλ€.
μν λκΈ°ν μ€ν¨λ‘ ν ν΅μ΄ λκ°λ©΄ κ·Έ λ€ ν μκ° λμ κ²°μ λ°°μΉ μ€ν¨κ° 묻νλ€. κ°μ μλ¦Όμ μ€μ΄λ €λ κ²μΈλ° λ€λ₯Έ μλ¦ΌκΉμ§ μ€μΈ κ²μ΄λ€. μ€μ΄λ λμμ μ νμ§ μμ κ²μ΄ μμΈμ΄μλ€.
μ΅μ λ¨μλ₯Ό λλ΄λ€
ν€ μ΄λ¦μ μλ¦Ό μ’ λ₯λ₯Ό λ£μλ€.
$key = 'last_alert:' . $type; // 'last_alert:sync', 'last_alert:payment'
$last = $this->cache->get($key);
if ($last && (time() - $last) < 3600) {
return;
}
sendAlert($message);
$this->cache->save($key, time(), 7200);
$type μ΄ ν€μ λ€μ΄κ°λ κ°μ μ’
λ₯λ§ κ·Έ TTL μμμ μ΅μ λκ³ λ€λ₯Έ μ’
λ₯λ κ·Έλλ‘ λκ°λ€. λμ λ²νΈκΉμ§ λ£μΌλ©΄ λ μ’κ² λλ μλ μμλ€.
$key = 'last_alert:' . $type . ':' . $targetId;
λ€λ§ λ무 μ’νλ©΄ μ΅μ λ₯Ό μ νλ κ²κ³Ό κ²°κ³Όκ° κ°μμ§λ€. κ°μ λμμμ κ³μ λλ μ€ν¨λ λ€μ μμ ν΅μ΄ λλ€. μ΄λ λ¨μλ‘ λλμ§κ° μ΄ μμ μ νλ¨μ΄μλ€.
μ΅μ λ 건μλ₯Ό ν¨κ» 보λλ€
μ΅μ νλ©΄ κ·Έ μ¬μ΄μ λͺ λ² μμλμ§ μ μ μλ€. κ·Έλμ μ λ³΄λΈ νμλ₯Ό μΈμ΄ λκ³ λ€μ μλ¦Όμ λΆμλ€.
$cnt = (int)$this->cache->get($key . ':count');
if ($last && (time() - $last) < 3600) {
$this->cache->save($key . ':count', $cnt + 1, 7200);
return;
}
$extra = $cnt > 0 ? " (μ§λ 1μκ° λμ {$cnt}건 λ λ°μ)" : '';
sendAlert($message . $extra);
$this->cache->save($key . ':count', 0, 7200);
λ°λ μλ¦Όμ μ΄λ κ² λλ€.
[λ°°μΉμ€ν¨] μν λκΈ°ν μ€ν¨ (μ§λ 1μκ° λμ 47건 λ λ°μ)
μ¬κΈ°μ ν λ² κ±Έλ Έλ€. Memcached::increment() μ μ΄κΈ°κ°μ μ£Όλ €λ©΄ OPT_BINARY_PROTOCOL μ΄ μΌμ Έ μμ΄μΌ νκ³ μλλ©΄ μΈμ μ€λ₯κ° λλ€. κ·Έλμ add() λ‘ λ¨Όμ λ§λ€κ³ increment() λ₯Ό λΆλ₯΄λ μͺ½μΌλ‘ νλ€.
ν 건 μ€ν¨ν κ²κ³Ό μμ 건 μ€ν¨ν κ²μ λ€λ₯Έ μν©μ΄λ€. μ«μκ° μμΌλ©΄ λμ΄ κ°μ μλ¦ΌμΌλ‘ 보μΈλ€. μ΄ ν μ€μ΄ λμ μμλ₯Ό λ°κΏ¨λ€.
λΉκ΅ β μ΅μ νμ§ μλ μλ¦Ό
μλ¦Ό μ’ λ₯λ₯Ό λλ 보λ μ΅μ ν΄λ λλ κ²κ³Ό μλ κ²μ΄ κ°λ Έλ€.
| μ’ λ₯ | μ΅μ |
|---|---|
| λ°°μΉ μ€ν¨ | 1μκ° |
| μ‘°ν μ§μ° | 1μκ° |
| κ²°μ μ²λ¦¬ μ€ν¨ | μ ν¨ |
| λ°μ΄ν°λ² μ΄μ€ μ μ μ€ν¨ | μ ν¨ |
λμ΄ κ±Έλ¦° κ²κ³Ό μ μ²΄κ° λ©μΆλ κ²μ memcached λ₯Ό μμ μ λ³΄κ³ λ§€λ² λ³΄λ΄κ² λλ€. μλλ¬μλ κ·Έκ² λ§μλ€. μ΅μ λ μ¬λ¬ λ² μλ λμμ΄ κ°μ κ²μλ§ κ±Έμλ€.
볡ꡬλμ λλ μλ¦¬κ² νλ€.
if ($nowOk && $this->cache->get('failing:' . $type)) {
sendAlert("[볡ꡬ] {$type} μ μν");
$this->cache->delete('failing:' . $type);
}
볡ꡬ μλ¦Όμ΄ μμΌλ©΄ μ€ν¨ μλ¦Όμ λ°κ³ λ κΈ°λ€λ € λ³Ό μ μλ€. μμΌλ©΄ λ§€λ² λ€μ΄κ°μ λ΄μΌ νλ€.
μλ¦Όμ 보λ΄λ μ½λ μμ²΄κ° μ£½μΌλ©΄ μ무 μλ¦Όμ΄ μκ³ κ·Έλ¬λ©΄ μ μμΌλ‘ 보μΈλ€. κ·Έλμ cron μΌλ‘ ν루 ν λ² μ μ μ νΈλ₯Ό 보λ΄κ² νλ€.
[μΌμΌμ κ²] λ°°μΉ 5μ’
μ μ, μ΄μ μ€ν¨ 3건
μ΄κ² μ μ€λ©΄ κ°μ μμ²΄κ° λ©μΆ κ²μ΄λ€. μ무 μμμ΄ μλ κ²μ μ μμΌλ‘ μ½μΌλ©΄ μ λκ³ μ μμΌ λλ μμμ΄ μμ΄μΌ λμ΄ κ΅¬λΆλλ€.
μμ μλ μ€μ νμΌμ λͺ©λ‘μΌλ‘ λλ€. ν μ¬λ λ©μΌλ‘λ§ κ°λ©΄ κ·Έ μ¬λμ΄ ν΄κ°μΌ λ μ무λ λͺ» λ³΄κ³ μ½λμ λ°μ λλ©΄ μ¬λμ΄ λ°λ λλ§λ€ λ°°ν¬νλ€.
μ 리
- μ΅μ μ‘°κ±΄μ΄ λμΌλ©΄ λ€λ₯Έ μ¬κ±΄κΉμ§ 묻νλ€
- μ€μΌ λμμ μ νμ§ μμΌλ©΄ μ λΆκ° λμμ΄ λλ€
memcachedν€ μ΄λ¦μ$typeμ λ£μ΄ λ¨μλ₯Ό λλλ€- λ무 μ’νλ©΄ μ΅μ λ₯Ό μ νλ κ²κ³Ό κ°μμ§λ€
- μ΅μ ν νμλ₯Ό
increment()λ‘ μΈμ΄ λ€μ μλ¦Όμ λΆμΈλ€ - ν 건과 μμ 건μ λ€λ₯Έ μν©μ΄λ€
- λμ΄ κ±Έλ¦° κ²κ³Ό μ μ²΄κ° λ©μΆλ κ²μ μ΅μ νμ§ μλλ€
- 볡ꡬ μλ¦Όμ΄ μμΌλ©΄ λ§€λ² μ§μ λ€μ΄κ°μ λ³΄κ² λλ€
- μ μμΌ λλ
cronμΌλ‘ ν루 ν λ² μ νΈλ₯Ό 보λΈλ€ - μμ μλ μ€μ νμΌμ λλ€. μ½λμ λ°μΌλ©΄ μ¬λμ΄ λ°λ λλ§λ€ λ°°ν¬νλ€