Рубрики
Без рубрики

Изучение архитектур с открытым исходным кодом – Redis.py

Изучите популярные проекты с открытым исходным кодом с подробным анализом их архитектуры. Мы начинаем с Redis.py. Tagged with Redis, Python, Architecture.

Прочитайте оригинал на codethat.today

Программное обеспечение с открытым исходным кодом, по определению, открыто для проверки, изменения и внесения вклад. Это создало только процветающее сообщество и экосистему обмена и сотрудничества между учеными, предприятиями и частными лицами.

В настоящее время крупнейшие в мире организации полагаются на программное обеспечение с открытым исходным кодом для повседневных операций. Многие из них также проводят его на следующий уровень, открывая их внутреннее инструменты и создавая большую полезность. Некоторые плодовитые примеры включают Апач Кассандра и Кафка Анкет

В этой серии мы собираемся исследовать популярные и подлинные проекты с открытым исходным кодом, поговорить об их истории и взглянуть на их архитектуру. Мы стремимся помочь будущим участникам или заинтересованным сторонам, лучше понять их структуру, их использование, логику, рассуждения и их ограничения. В конце концов, программное обеспечение предназначено для чтения и поддержания, если оно имеет право продлиться со временем.

Давайте запустим нашу серию с исключительно интересным проектом, который является Redis-Py который является клиентом Redis Python. В первой части мы собираемся ходить, хотя проектная документация, структура и история GIT. В следующей части мы подробно рассказываем о том, как его установить и использовать, структуру и анализ кода, как тестировать и как внести свой вклад.

Давайте начнем.

Обзор

Проект перечислен на GitHub . Это также перечислено в Индекс пакетов PYPI А последняя версия – 3.3.8, которая была выпущена 19 августа 2019 года.

Repo Github имеет более 7800 звезд, что очень хорошо И это поддерживается Энди МакКарди Анкет

Документация

Документы перечислены в Readthedocs Repo Хотя это одна большая справочная страница, так что это довольно грубо. Большая часть официальной документации находится в Readme file Анкет

В целом документация обширная, но это может помочь, если бы у нас было больше примеров.

Структура папки

Проект следует за традиционной структурой проекта Python:

➜ tree .
.
├── CHANGES
├── INSTALL
├── LICENSE
├── MANIFEST.in
├── README.rst
├── RELEASE
├── benchmarks
│   ├── __init__.py
│   ├── base.py
│   ├── basic_operations.py
│   ├── command_packer_benchmark.py
│   └── socket_read_size.py
├── build_tools
│   ├── bootstrap.sh
│   ├── build_redis.sh
│   ├── install_redis.sh
│   ├── install_sentinel.sh
│   ├── redis-configs
│   │   ├── 001-master
│   │   └── 002-slave
│   ├── redis_init_script
│   ├── redis_vars.sh
│   ├── sentinel-configs
│   │   ├── 001-1
│   │   ├── 002-2
│   │   └── 003-3
│   └── sentinel_init_script
├── docs
│   ├── Makefile
│   ├── _static
│   ├── _templates
│   ├── conf.py
│   ├── index.rst
│   └── make.bat
├── redis
│   ├── __init__.py
│   ├── _compat.py
│   ├── client.py
│   ├── connection.py
│   ├── exceptions.py
│   ├── lock.py
│   ├── sentinel.py
│   └── utils.py
├── setup.cfg
├── setup.py
├── tests
│   ├── __init__.py
│   ├── conftest.py
│   ├── test_commands.py
│   ├── test_connection_pool.py
│   ├── test_encoding.py
│   ├── test_lock.py
│   ├── test_monitor.py
│   ├── test_multiprocessing.py
│   ├── test_pipeline.py
│   ├── test_pubsub.py
│   ├── test_scripting.py
│   └── test_sentinel.py
├── tox.ini
└── vagrant
    └── Vagrantfile

10 directories, 51 files

Вот прорыв папок:

  • тесты : Содержит тесты на сравнительных показателях для наиболее важных операций.
  • Документы : Содержит активы для сайта документации на ReadThedocs, которые он использует SPHINX DOCS Анкет

  • Тесты : Содержит основной тестовый набор.

  • build_tools : Содержит сценарии предоставления для Vagrantfile расположен в папке. Это используется для запуска Redis и Redis Sentinel внутри виртуальной машины.

  • Redis : Содержит основной исходный код клиентской библиотеки.

Важные файлы проекта

Файлы уровня проекта:

  • ИЗМЕНЕНИЯ : Чанэлог проекта. Он имеет информацию, начиная с V2.2.0 до последних.
  • Выпуск : Информация о процессе выпуска. Это очень просто и ясно.
  • Установить : Информация о том, как установить библиотеку. Рекомендуется использовать инструменты настройки Python:
python setup.py install
  • Readme.rst : Документация Readme проекта.
  • Лицензия : MIT Лицензия
  • setup.py : Файл настройки для установки и выпуска проекта. Он указывает поддержку следующих версий Python:

python_requires = “> = 2,7, .0.*,. 1.*,. 2.*,. 3. *”,

Для тестирования это требует питест и макет :

tests_require=[
        'mock',
        'pytest>=2.7.0',
    ],

Если вы заметили, что это требует hierdis который является минималистичным клиентом Redis, написанным в C:

extras_require={
        'hiredis': [
            "hiredis>=0.1.3",
        ],
    },

Как упомянуто в ReadMe, по умолчанию Redis-Py попытается использовать Hiredisparser включено в Улишки Модуль и выпадет на Pythonparser в противном случае. Это связано исключительно по соображениям производительности, так как lehieRis может обеспечить 10 -кратное улучшение скорости в ответах на сервер Redis.

GIT ИСТОРИЯ

Проект имеет хорошую статистику с более чем 1300 коммитами и 174 участниками:

История коммита распространяется на протяжении многих лет с некоторыми случайными шипами. Вот 4 лучших участников:

Проект начался в 1 ноября 2009 года, который через несколько месяцев после того, как Редис родился 22 марта 2009 года.

Самые ранние релизы начинаются с v2.4.6 который после 273 -го коммита.

Важные вопросы

Мы исследуем некоторые из важных вопросов, которые записаны в трекере выпуска репо.

В настоящее время проект имеет 140 открытых вопросов из 556 All вместе, что довольно высока. У него довольно много открытых запросов (57), и последний объединенный коммит был сделан 20 дней назад.

Вот разрушение 10 самых похвальных PRS:

Большинство из этих PRS не являются обязательными и не нужны, как оценили Энди.

Вот разрушение 10 самых похвальных вопросов:

Похоже, что после выпуска 3.2.0 были некоторые проблемы с подключением с библиотекой в определенных сценариях. Если мы посмотрим на ChangeLog для этой версии:

  • Добавлена поддержка SELECT.POLL Чтобы проверить, можно ли прочитать данные в розетке. Это должно позволить значительно больше соединений использоваться с Pubsub. Исправляет #486/#1115

Это было серьезное изменение, потому что оно меняет Выберите Стратегия при опросе на изменения от гнезда.

Другими проблемами являются спорадические проблемы с соединением.

Монтаж

Теперь, когда мы хорошо понимаем детали проекта, давайте попробуем установить его и запустить его в реплике.

Сначала вам нужно установить Redis. Следуйте за этим Инструкции здесь Анкет

Затем создайте тестовую папку и виртуальную Env Python:

$ python3 -m venv .env
source .env/bin/activate

Клонировать репозиторий и запустите процесс настройки:

$ git clone git@github.com:andymccurdy/redis-py.git && cd redis
$ python setup.py develop
$ pip install hiredis

В другом терминале запустите сервер Redis:

$ redis-server & 

Убедитесь, что вы можете подключиться к серверу, используя Redis-cli инструмент:

➜ redis-cli              
127.0.0.1:6379> INFO
# Server
redis_version:5.0.0
...

Теперь давайте начнем спильку Python и попробуем запустить несколько запросов с Redis.py:

$ python3                
Python 3.7.3 (default, Mar 27 2019, 09:23:39) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> r = redis.Redis(host='localhost', port=6379, db=0)
>>> r
Redis>>

>>> r.hset("dictionary", "Abate", "become less intense or widespread")
1
>>> r.hget("dictionary", "Abate")
b'become less intense or widespread'

>>> r.hkeys("dictionary")
[b'Abate']

Большинство команд имеют одинаковое имя с Список команд Redis

Следующая часть

В следующей части этой серии мы идем более глубокими и исследуем код, который запускает библиотеку. Надеюсь, мы сможем выучить удивительные архитектурные узоры и уловки.

Оригинал: “https://dev.to/theodesp/exploring-open-source-architectures-redis-py-3en6”