Как Redis используется в Trello? - PullRequest
10 голосов
/ 20 декабря 2011

Я понимаю, что, грубо говоря, Trello использует Redis для временного хранилища данных.

Кто-нибудь может более подробно рассказать о роли, которую он играет в приложении?

Ответы [ 2 ]

26 голосов
/ 05 января 2012

Мы используем Redis на Trello для эфемерных данных, которые мы могли бы проиграть.Мы не сохраняем данные в Redis на диск и используем их allkeys-lru , поэтому мы храним только те вещи, которые могут быть выгружены в любое время, только с очень незначительными неудобствами для пользователей (например, на мгновение увидевневерный статус пользователя).При этом мы даем ему более чем 5-кратное пространство, необходимое для хранения его фактического рабочего набора, и выбираем из 10 ключей для истечения срока действия, поэтому мы действительно никогда не увидим, чтобы что-то выбило из-под контроля.

  1. Это наш сервер pubsub.Когда пользователь делает что-то с платой или картой, мы хотим отправить сообщение с этой дельтой всем клиентам, подключенным к веб-сокету, которые подписаны на измененный объект, поэтому все наши процессы Node подписываются на канал pubsub, который распространяетсяэти сообщения, и они распространяют это в соответствующим образом разрешенные и подписанные веб-сокеты.

  2. Мы ВИДИМ это используем для поддержки socket.io, но так как мы используем только веб-сокеты, и так как сокет.io * слишком болтливый , чтобы масштабировать так, как нам нужно в данный момент, у нас есть патч, который отключает все, кроме одного необходимого нам канала.

  3. Для наших пользователей, у которых нет веб-сокетов, мы должны вести список действий, которые произошли на каждом объектном канале с момента последнего запроса пользователя.Для этого мы используем список, который мы ограничиваем самыми последними 100 элементами, и вспомогательный счетчик того, сколько элементов было добавлено в список с момента его создания.Поэтому, когда мы отвечаем на запрос опроса от такого браузера, мы можем проверить последний элемент, который он сообщает, что он видел, и отправлять только те сообщения, которые были добавлены в очередь с тех пор.Таким образом, запрос на опрос сводится к проверке разрешений и проверке ключа Redis в большинстве случаев, что очень быстро.

  4. Мы храним некоторые эфемерные данные об активном статусе подключенногопользователи в Redis, потому что эти данные часто изменяются и нет необходимости сохранять их на диске.

  5. Мы храним кратковременные ключи для поддержки входа OAuth в Redis.

Мы любим Redis;как только у вас есть экземпляр этого и работает, вы хотите использовать его для всех видов вещей.Единственная реальная проблема, с которой мы столкнулись - это медленно работающих клиентов, которые занимают доступное пространство .

Мы используем MongoDB для наших более традиционных потребностей в базе данных.

1 голос
/ 21 декабря 2011

Trello использует Redis с Socket.IO (RedisStore) для масштабирования со следующими двумя функциями:

  • хранилище значений ключей, для установки и получения значений для подключенного клиента
  • как служба pub-sub

Ресурсы:

Посмотрите код для RedisStore в Socket.IO здесь: https://github.com/LearnBoost/socket.io/blob/master/lib/stores/redis.js

Пример Socket.IOс RedisStore: http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...