38
The dos and don’ts of task queues PyCon UK 2019 Petr Stehlík @petrstehlik

The dos and don’ts of task queues - pretalx

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: The dos and don’ts of task queues - pretalx

The dos and don’ts of task queues

PyCon UK 2019

Petr Stehlík@petrstehlik

Page 2: The dos and don’ts of task queues - pretalx

Petr Stehlík

Python engineer @ Kiwi.com

Finance tribe

$ whoami

Page 3: The dos and don’ts of task queues - pretalx

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 - pretalx

Task queues

Page 5: The dos and don’ts of task queues - pretalx

“parallel execution of discrete tasks without blocking”

● Not just Celery

● Major parts

○ Queue

○ Task – unit of work

○ Producer

○ Consumer

What is a task queue

Page 6: The dos and don’ts of task queues - pretalx

● 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 - pretalx

The story

Page 8: The dos and don’ts of task queues - pretalx

The story

Page 9: The dos and don’ts of task queues - pretalx

The story

Page 10: The dos and don’ts of task queues - pretalx

“New is always better.”

The story

Page 11: The dos and don’ts of task queues - pretalx

“Think outside the box.”

The story

Page 12: The dos and don’ts of task queues - pretalx

“I know everything I need.”

The story

Page 13: The dos and don’ts of task queues - pretalx

“I can do it better.”

The story

Page 14: The dos and don’ts of task queues - pretalx

Examples vs. realitywhy it all happened

Page 15: The dos and don’ts of task queues - pretalx

Example Celery/RQ

Page 16: The dos and don’ts of task queues - pretalx

Reality RQ

Page 17: The dos and don’ts of task queues - pretalx

Reality Celery

Page 18: The dos and don’ts of task queues - pretalx

Final setup

Page 19: The dos and don’ts of task queues - pretalx

● Python + PostgreSQL

● Flask

● Connexion

● Celery

● Redis on AWS

● Multiple deploy targets

● Logz.io & Datadog

● Sentry

● PagerDuty

Final setup

Page 20: The dos and don’ts of task queues - pretalx

How we do it in Kiwi.comIn finance tribe

Page 21: The dos and don’ts of task queues - pretalx

● Python + PostgreSQL

● Flask/AioHttp

● Connexion

● Celery

● Redis on AWS

● Multiple deploy targets

● Logz.io & Datadog

● Sentry

● PagerDuty

Kiwi.com | Finance Tribe toolset

Page 22: The dos and don’ts of task queues - pretalx

● 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

Kiwi.com | Finance Tribe toolset

Page 23: The dos and don’ts of task queues - pretalx

● Connexion

○ OpenAPI 3

○ Token-based authentication & authorization

● Celery

○ Follow the best practices (next section)

● Redis on AWS

○ Reliability

○ Easy to deploy

Kiwi.com | Finance Tribe toolset

Page 24: The dos and don’ts of task queues - pretalx

● 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 25: The dos and don’ts of task queues - pretalx

Lessons learned

Page 26: The dos and don’ts of task queues - pretalx

Lessons learned

Use Redis or AMQP broker (never a database)

Page 27: The dos and don’ts of task queues - pretalx

Lessons learned

Pass simple objects to the tasks

Page 28: The dos and don’ts of task queues - pretalx

Lessons learned

Do not wait for tasks inside tasks

Page 29: The dos and don’ts of task queues - pretalx

Lessons learned

Set retry limit

Page 30: The dos and don’ts of task queues - pretalx

Lessons learned

Use autoretry_for

Page 31: The dos and don’ts of task queues - pretalx

Lessons learned

Use retry_backoff=True and retry_jitter=True

Page 32: The dos and don’ts of task queues - pretalx

Lessons learned

Set hard and soft time limits

Page 33: The dos and don’ts of task queues - pretalx

Lessons learned

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

Page 34: The dos and don’ts of task queues - pretalx

Lessons learned

Use separate queues for demanding tasks (set priorities)

Page 35: The dos and don’ts of task queues - pretalx

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 36: The dos and don’ts of task queues - pretalx

● 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 37: The dos and don’ts of task queues - pretalx

● 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 38: The dos and don’ts of task queues - pretalx

Any questions?

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