Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Юрий Букаткин (Программный регион, Руководитель группы разработки) @ Moscow Python Meetup 58

"Тема доклада такая же про ускорение python клиента для redis. Но с использованием расширения написанным на golang. Ну и сравнение в итоге что получилось python клиент, cython клиент и клиент python с использованием golang. Вот ссылка как пример: https://blog.filippo.io/building-python-modules-with-go-1-5/".

Видео: http://www.moscowpython.ru/meetup/58/speed-up-python/

Moscow Python Meetup
PRO

July 20, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. Цель

    Быстрый Python-клиент для Redis

    Pipeline, Pooling, многопоточность

    Простое использование в Python

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

    View Slide

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

    View Slide

  5. Реализация

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. Single commands

    View Slide

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

    View Slide

  12. Тестирование
    Ускоряем производительность 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)

    View Slide

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

    View Slide

  14. Pipelining

    View Slide

  15. Структура 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

    View Slide

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

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. Pooling & Async

    View Slide

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

    View Slide

  21. Тестирование
    Ускоряем производительность 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

    View Slide

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

    View Slide

  23. Выводы

    View Slide

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

    Ощутимый прирост скорости pipeline и async

    Читаемый код на Go

    Максимально простое использование в Python

    Инкапсуляция всей логики работы библиотеки в Golang

    View Slide

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

    Мало информации

    Сложность реализации по сравнению с другими методами

    Вся ответственность за результат лежит на разработчике

    View Slide

  26. Полезные ссылки
    Ускоряем производительность 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/

    View Slide

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

    View Slide