39
The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik

The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

The dos and don’ts of task queues

EuroPython 2019

Petr Stehlík@petrstehlik

Page 2: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Petr Stehlík

Python developer @ Kiwi.com

Finance tribe

$ whoami

Page 3: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

1. Task queues2. The story3. Examples vs. reality4. Final setup5. How we do it in Kiwi.com6. Lessons learned7. Q&A

Outline

Page 4: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Task queues

Page 5: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

“parallel execution of discrete tasks without blocking”

● Not just Celery

● Major parts

○ Queue

○ Task – unit of work

○ Producer

○ Consumer

What is a task queue

Source: DENÍK/Michal Kovář

Page 6: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Decouple long-running task from a synchronous call

● Perform something periodically

● Break down software to more isolated pieces (when microservice is

too big)

● Minimize wait time, latency and/or response time

● Increase throughput of the system

For what is a task queue

Page 7: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

The story

Page 8: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

The story

Page 9: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

“New is always better.”

The story

Page 10: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

“Think outside the box.”

The story

Page 11: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

“I know everything I need.”

The story

Page 12: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

“I can do it better.”

The story

Page 13: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Examples vs. realitywhy it all happened

Page 14: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Example Celery/RQ

Page 15: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Reality RQ

Page 16: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Reality Celery

Page 17: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Final setup

Page 18: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Python + PostgreSQL

● Flask

● Connexion

● Celery

● Redis on AWS

● Multiple deploy targets

● Logz.io & Datadog

● Sentry

● PagerDuty

Final setup

Page 19: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

How we do it in Kiwi.comIn finance tribe

Page 20: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Python + PostgreSQL

● Flask/AioHttp

● Connexion

● Celery

● Redis on AWS

● Multiple deploy targets

● Logz.io & Datadog

● Sentry

● PagerDuty

Kiwi.com | Finance Tribe toolset

Page 21: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Python

○ New projects always 3.6+

○ Old projects transitioning from 2.7 to 3.6

○ Monolith -> microservice architecture

● Flask/AioHttp

○ Our go-to framework

○ Boilerplates

○ Quick scaffolding

● Connexion

○ OpenAPI 3

○ Token-based authentication & authorization

Kiwi.com | Finance Tribe toolset

Page 22: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Celery

○ Follow the best practices (next section)

● Redis on AWS

○ Reliability

○ Easy to deploy

Kiwi.com | Finance Tribe toolset

Page 23: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Multiple deploy targets

○ HTTP API

○ Workers

○ Etc.

○ Internal tool for deploying from Gitlab CI

● Logz.io & Datadog

○ Extensive logging

● Sentry

○ When something goes wrong

● PagerDuty

○ When something goes really wrong

Kiwi.com toolset | Finance Tribe

Page 24: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Page 25: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Use Redis or AMQP broker (never a database)

Page 26: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Pass simple objects to the tasks

Page 27: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Do not wait for tasks inside tasks

Page 28: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Set retry limit

Page 29: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Use autoretry_for

Page 30: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Use retry_backoff=True and retry_jitter=True

Page 31: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Set hard and soft time limits

Page 32: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Use bind for a bit of extra oomph (logs, handling, etc.)

Page 33: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Use separate queues for demanding tasks (set priorities)

Page 34: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Lessons learned

Prefer idempotency and atomicity

"Idempotence is the property of certain operations in mathematics and computer science, that can be applied multiple times without changing the result beyond the initial application."

- Wikipedia

“Atomic operation appears to the rest of the system to occur instantaneously. Atomicity is a guarantee of isolation from concurrent processes.

- Wikipedia

Page 35: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Use Redis or AMQP (RabbitMQ) broker (never a database)

● Pass simple objects to the tasks

● Do not wait for tasks inside tasks

● Set retry limit

● Use autoretry_for

● Use retry_backoff=True and retry_jitter=True

● Set hard and soft time limits

● Use bind for a bit of extra oomph in tasks (logging, handling, etc.)

● Use separate queues for demanding tasks (set priorities)

● Prefer idempotency and atomicity

Lessons learned

Page 36: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

● Sharing codebase between producer and consumer (producer must know everything about

consumer and vica versa)

● Use celery to its full potential -> read celery’s docs

● Scalability of 3rd party APIs

Things to consider

Page 37: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

More info @ meet.kiwi.com

Join our Wednesday party at Europython andwin flight vouchers

Page 38: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Meet us at the booth #45

Page 39: The dos and don’ts of task queues - EuroPython€¦ · The dos and don’ts of task queues EuroPython 2019 Petr Stehlík @petrstehlik. Petr Stehlík Python developer @ Kiwi.com

Any questions?

You can find me at @petrstehlik & [email protected]