Skip to content

Instantly share code, notes, and snippets.

@LifeMoroz
Last active December 29, 2015 21:59
Show Gist options
  • Save LifeMoroz/7733347 to your computer and use it in GitHub Desktop.
Save LifeMoroz/7733347 to your computer and use it in GitHub Desktop.
Описание выбора технологий
Обоснования применения технологий
# REDIS
Обоснование выбора технологии:
Небходимость хранить теги
Нужны каналы для риалтайм сообщений
Использовано в качестве:
Теги
Реляционные БД не очень подходят для хранения тегов
(нужны множества)
поэтому используется redis, у которого есть удобные инструменты
такие как работа с множествами (set), отсортированными множествами
(sorted set), которые упрощают реализацию тегов
Реализация сессий
Обычно сессии в джанге работают через БД. Чтобы уменьшить нагрузку на БД
их храним в redis. (Раз уж есть такая возможность)
Кеш
Некоторые данные, например последие зарегестрированные пользователи
меняются не очень часто, поэтому их можно вынести в кеш.
Т.к. в стеке технологий уже есть redis, то его можно использовать
и как сервер кеширования.
Риалтайм
У редиса есть менизм pub/sub, который позволяет подписываться на каналы
(и что-то в них броадкастить)
У каждого юзера есть свой "канал", например user:123:updates
и туда при новом ответе броадкастится сообщение
которое может быть обработано tornado-сервером и отослано на клиент
через long-polling, вебсокеты или почтовым голубем.
Просмотры
Чтобы не дергать БД каждый раз при просмотре вопроса, количество просмотров
тоже хранится в редиске
# TORNADO
Обоснование выбора технологии:
Для реализации realtime нотификаций требуется многопоточный сервер, который
будет в состоянии держать много одновременных соединений
Django в качестве такого сервера не подходит по нескольким причинам:
Джанга не сервер
и она не многопоточная
(Т.е. совсем не подходит)
Логичнее реализовывать сервер на питоне, поэтому есть альтернативы Tornado: Twisted и другие
Основная причина выбора Tornado - более простой код и его ориентированность на веб.
Использовано в качестве:
Рилтайм
В инете был нагуглен небольшой туториал
http://blog.kristian.io/post/47460001334/sockjs-and-tornado-for-python-real-time-web-projects/
который показывает, как использовать редис и торнадо вместе для реализации рилтайма
SockJS - удобная api для реализации функциональности канала сообщений между
сервером и клиентом в реальном времени
sockjs-tornado - реализует бекенд для SockJS и позволяет легко работать с этим
самым каналом
tornado-redis
Это неблокирующая библиотека позволяет работать с редиской в торнадо
# uwsgi вместо Apache
Обоснование выбора:
Меньше оверхед, адекватные и не сложные файлы настройки, устанавливается из pip
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment