ΠΠΎΠ³Π΄Π° RabbitMQ Π½Π° ΠΏΡΠΎΠ΄Π΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΌΠ΅ΡΠ°ΡΡ Π±ΠΈΠ·Π½Π΅ΡΡ
Π Π°ΡΡΡΡΠΈΠΉ backlog, Β«ΠΏΡΠΎΠΏΠ°Π²ΡΠΈΠ΅Β» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Ρ
Π°ΠΎΡΠΈΡΠ½ΡΠ΅ ΡΠ΅ΡΡΠ°ΠΈ, Celery-Π²ΠΎΡΠΊΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎ ΠΌΠΎΠ»ΡΠ°Ρ, ΡΠΎ ΠΆΡΡΡ CPU β ΡΡΠΎ Π½Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π°Ρ DevOps-ΡΠ΅ΠΌΠ°. ΠΡΠΎ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠΈΡΡΠΌΠ°, ΡΡΡΠ²Ρ ΠΎΠΏΠ»Π°Ρ, IoT-ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π΅Π· ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ·Π½Π°ΡΡ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
Π―, Raman Sapezhka (PlantagoWeb), ΠΏΠΎΠΌΠΎΠ³Π°Ρ Π½Π°Π²Π΅ΡΡΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ
Π½Π° Django, Laravel, Symfony ΠΈ IoT-Π±ΡΠΊΠ΅Π½Π΄Π°Ρ
. ΠΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΎ ΠΌΠ½ΠΎΠΉ β Π±Π΅Π· Β«ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΊΡΠΏΠ΅ΡΡΠΎΠ²Β» ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΊΠ°Π·ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌΠΈ.
Π‘ΠΈΠΌΠΏΡΠΎΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΊΠΎ ΠΌΠ½Π΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ
- ΠΡΠ΅ΡΠ΅Π΄Ρ ΡΠ°ΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΡΠΏΠ΅Π²Π°ΡΡ ΡΠ°Π·Π³ΡΠ΅Π±Π°ΡΡ
- Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ Π±Π΅Π· ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ
- Π Π΅ΡΡΠ°ΠΈ ΠΈ dead-letter Π½Π°ΡΡΡΠΎΠ΅Π½Ρ Β«Π½Π°ΡΠ³Π°Π΄Β» ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ
- Celery + RabbitMQ ΠΆΠΈΠ²ΡΡ ΠΊΠ°ΠΊ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ
ΠΌΠΈΡΠ° Π±Π΅Π· runbook
- ΠΠΎΡΠ»Π΅ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ° Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ consumers
ΠΡΠ»ΠΈ ΡΠ·Π½Π°ΡΡΠ΅ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΄ β ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π½Π°ΡΠ°ΡΡ Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ, Π° Π½Π΅ Ρ Β«Π΅ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΡΡΡΠ° ΠΏΠΎ exchangesΒ».
Π§ΡΠΎ Π²Ρ
ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠ°Π»ΡΠΈΠ½Π³ RabbitMQ
Π€ΠΎΡΠΌΠ°Ρ β ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ + ΡΡΠΊΠΈ Π² ΠΏΡΠΎΠ΄ (ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅), ΠΏΠΎΠ΄ Π²Π°Ρ ΡΡΠ΅ΠΊ:
- ΠΠ°ΡΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ²: publishers, queues/exchanges, consumers, retries, DLQ
- ΠΡΡΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
- Π‘Π²ΡΠ·ΠΊΠ° Ρ Celery / ΡΠΎΠ½ΠΎΠ²ΡΠΌΠΈ Π²ΠΎΡΠΊΠ΅ΡΠ°ΠΌΠΈ: concurrency, ack, visibility timeout
- ΠΠ°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΡΡΡ: ΡΡΠΎ Π°Π»Π΅ΡΡΠΈΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Β«Π²ΡΡ Π²ΡΡΠ°Π»ΠΎΒ»
- Runbook: ΡΠ΅ΡΡΠ°ΡΡ, drain ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ consumers
Π‘ΡΠ΅ΠΊ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ: Django, Laravel, Symfony, Python/Node consumers, IoT-ΡΠ»ΡΠ·Ρ. ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠΎΡΠ΅Π½Π° ΡΡΠ»ΡΠ³Π°: RabbitMQ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°Π½Ρ, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ RabbitMQ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ RabbitMQ Django, Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Celery.
ΠΠ°ΠΊ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π°Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°
ΠΠ° 20β30 ΠΌΠΈΠ½ΡΡΠ°Ρ
ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΌΠΏΡΠΎΠΌΡ, ΡΡΠ΅ΠΊ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ (Π±Π΅Π· Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΊΡΠ΅ΡΠ°ΠΌ Β«Π²ΡΠ»Π΅ΠΏΡΡΒ»). ΠΠ° Π²ΡΡ
ΠΎΠ΄Π΅ β ΠΏΡΠΈΠΎΡΠΈΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ: quick wins vs ΡΡΡΡΠΊΡΡΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΊΠΈ. ΠΠ΅Π· ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ.
ΠΠ°ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ
Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ ΠΈΡΡ
ΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π±ΠΎΡΡ: ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠ°, ΡΠ΅ΡΡΠ°ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡ, Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΏΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡ. ΠΠ°Π»ΡΡΠ΅ β ΡΠΎΡΠ΅ΡΠ½ΠΎΠ΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½ retainer ΠΏΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ.
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΡΠ»ΡΠ³ ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½ EN-ΠΎΡΡΠ΅Ρ ΠΏΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅ΠΌΠ΅ β Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° consulting/integration Π΄Π»Ρ Django ΠΈ Laravel teams.
ΠΠ±ΡΡΠ΄ΠΈΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ RabbitMQ