Технический пост: очередь в Redis и рефакторинг Ленты новостей


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

После того, как часть медленных действий были перенесены в отдельные очереди — блоки стали успевать обрабатываться.

В очереди были вынесены следующие действия:

  1. Постановка аккаунта на обновление данных (балансы, батарейка, профиль).
  2. Постановка поста на обновление данных о выплатах из пула вознаграждение.
  3. Добавление голоса/флага за пост в базу (инициирует также добавление в очередь уведомления о vote/flag для автора поста).
  4. Добавление поста в ленты новостей подписчиков автора.
  5. Добавление уведомления пользователю.

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

Естественно, главным приоритетам стал 4 пункт - лента новостей. Представляю лица пользователей, когда их лента прекратила обновляться. Читать нечего! Идти в раздел популярное? Уж лучше просмотреть главную страницу и порыться в тэгах.

Приоритет на ленты (feed) встал еще и потому, что там самый большой объем данных. Более 80 000 000 строк! Несмотря на партиции и периодические чистки, база ленты новостей, состоящая из двух целочисленных чисел (йд пользователя и йд поста) плюс индекс по йд поста - вес таблицы уже перевалил за 3 гигабайта.

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

Как нам это удалось сделать — в следующем посте. А пока можно спокойно отдохнуть и выспаться, несмотря на шторм, корабль плывет дальше и у нас еще очень много работы.

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

Всем спасибо за поддержку апвоутами, проект станет только сильнее и быстрее в 2018 году.


Comments 1


что-то у меня в ленте теперь отображается только 9 постов... больше не грузится)

10.01.2018 14:55
0