Last active
December 29, 2015 21:59
-
-
Save LifeMoroz/7733347 to your computer and use it in GitHub Desktop.
Описание выбора технологий
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Обоснования применения технологий | |
# 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