Slide 1

Slide 1 text

Ускоряем производительность Python-клиента Redis, используя Golang Букаткин Юрий @randomazer Moscow Python Meetup 58

Slide 2

Slide 2 text

Ускоряем производительность Python-клиента Redis, используя Golang

Slide 3

Slide 3 text

Цель  Быстрый Python-клиент для Redis  Pipeline, Pooling, многопоточность  Простое использование в Python  Читаемость кода Ускоряем производительность Python-клиента Redis, используя Golang

Slide 4

Slide 4 text

Альтернативы Ускоряем производительность Python-клиента Redis, используя Golang Grumpy Gopy Go extensions for Python

Slide 5

Slide 5 text

Реализация

Slide 6

Slide 6 text

Ускоряем производительность Python-клиента Redis, используя Golang

Slide 7

Slide 7 text

Ускоряем производительность Python-клиента Redis, используя Golang

Slide 8

Slide 8 text

Ускоряем производительность Python-клиента Redis, используя Golang

Slide 9

Slide 9 text

Build project Ускоряем производительность Python-клиента Redis, используя Golang

Slide 10

Slide 10 text

Single commands

Slide 11

Slide 11 text

Реализация Python Ускоряем производительность Python-клиента Redis, используя Golang

Slide 12

Slide 12 text

Тестирование Ускоряем производительность Python-клиента Redis, используя Golang  Redis-py https://github.com/andymccurdy/redis-py  Credis https://github.com/yihuang/credis  Python + Go (raw realization)  Python + Go (https://github.com/go-redis/redis)

Slide 13

Slide 13 text

Benchmarks Ускоряем производительность Python-клиента Redis, используя Golang 50000 100000 250000 0 5 10 15 20 25 Credis Go Go library Redis-python hashmap size Seconds

Slide 14

Slide 14 text

Pipelining

Slide 15

Slide 15 text

Структура pipeline Ускоряем производительность Python клиента Redis, используя Golang hset hashmap key value *4\r\n$4\r\nhset$7\r\nhashmap$3\r\nkey$5\r\n value\r\n

Slide 16

Slide 16 text

Реализация Python Ускоряем производительность Python-клиента Redis, используя Golang

Slide 17

Slide 17 text

Benchmarks hashmap size Ускоряем производительность Python-клиента Redis, используя Golang 100 500 1000 5000 10000 50000 100000 0 0.5 1 1.5 2 2.5 3 3.5 Credis Go Go library RedisPy Seconds

Slide 18

Slide 18 text

Benchmarks pipeline size Ускоряем производительность Python-клиента Redis, используя Golang 100 500 1000 5000 10000 50000 100000 0 2 4 6 8 10 12 14 16 Credis Go Go library RedisPy Pipeline size Seconds

Slide 19

Slide 19 text

Pooling & Async

Slide 20

Slide 20 text

Реализация Python Ускоряем производительность Python-клиента Redis, используя Golang

Slide 21

Slide 21 text

Тестирование Ускоряем производительность Python-клиента Redis, используя Golang  Credis https://github.com/yihuang/credis  Asyncio redis https://github.com/jonathanslenders/asyncio-redis  Aredis https://github.com/NoneGG/aredis  Python + Go (raw realization)  Python + Go-redis library https://github.com/go-redis/redis

Slide 22

Slide 22 text

Benchmark Ускоряем производительность Python-клиента Redis, используя Golang 1 0 2 4 6 8 10 12 Aredis Asyncio redis Go Go library Credis Seconds

Slide 23

Slide 23 text

Выводы

Slide 24

Slide 24 text

Достоинства Ускоряем производительность Python-клиента Redis, используя Golang  Ощутимый прирост скорости pipeline и async  Читаемый код на Go  Максимально простое использование в Python  Инкапсуляция всей логики работы библиотеки в Golang

Slide 25

Slide 25 text

Недостатки Ускоряем производительность Python-клиента Redis, используя Golang  Мало информации  Сложность реализации по сравнению с другими методами  Вся ответственность за результат лежит на разработчике

Slide 26

Slide 26 text

Полезные ссылки Ускоряем производительность Python-клиента Redis, используя Golang  https://github.com/deslum/gopipe  http://nigerlittlepoole.com/post/153224915028/using-go-to-boost-python-performance  https://hackernoon.com/extending-python-3-in-go-78f3a69552ac  https://www.datadoghq.com/blog/engineering/cgo-and-python/  https://habr.com/company/mailru/blog/324250/

Slide 27

Slide 27 text

Контакты Ускоряем производительность Python-клиента Redis, используя Golang Email: [email protected] Github: https://github.com/deslum Twitter: https://twitter.com/randomazer