Как посмотреть вложения дискорд
Изначальную версию Discord написали быстрее чем за два месяца в начале 2015 года. Возможно, одной из лучших СУБД для быстрого выполнения итераций является MongoDB. Всё в Discord специально хранилось в едином реплисете (replica set) MongoDB, но мы также готовили всё для простой миграции в новую СУБД (мы знали, что не собираемся использовать шардинг MongoDB из-за его сложности и неизвестной стабильности). На самом деле это часть нашей корпоративной культуры: разрабатывай быстро, чтобы испытать новую функцию продукта, но всегда с курсом на более надёжное решение.
Перед выбором новой СУБД нам требовалось понять имеющиеся шаблоны чтения/записи и почему возникли проблемы с текущим решением.
Сделав выбор, нужно было доказать, что он действительно оправдан.
Лучший способ описать новичку Cassandra — это аббревиатура KKV. Две буквы “K” содержат в себе первичный ключ. Первая “K” — это ключ раздела. Он помогает определить, в какой ноде живут данные и где их найти на диске. Внутри раздела множество строк, и конкретную строку внутри раздела определяет вторая “K” — ключ кластеризации. Он работает как первичный ключ внутри раздела и определяет способ сортировки строк. Можете представить раздел как упорядоченный словарь. Все эти качества вместе взятые позволяют очень мощное моделирование данных.
Хотя схемы у Cassandra и похожи на схемы реляционных БД, их легко изменять, что не оказывает какого-либо временного влияния на производительность. Мы взяли лучшее от хранилища блобов и реляционного хранилища.
Ключи разделов Cassandra могут быть составными, так что нашим новым первичным ключом стал ((channel_id, bucket), message_id) .
Выводить новую систему в производство всегда страшно, так что хорошей идеей будет проверить её, не затрагивая пользователей. Мы настроили систему на дублирование операций чтения/записи в MongoDB и Cassandra.
Немедленно после запуска в баг-трекере появились ошибки, что author_id равен нулю. Как он может быть нулевым? Это обязательное поле!
Cassandra — система типа AP, то есть гарантированная целостность здесь приносится в жертву доступности, что мы и хотели, в общем. В Cassandra противопоказано чтение перед записью (операции чтения более дорогие) и поэтому всё, что делает Cassandra, — это обновление и вставку (upsert), даже если предоставить только определённые колонки. Вы также можете писать в любую ноду, и она автоматически разрешит конфликты, используя семантику «последняя запись выигрывает» по каждой колонке. Так как это нас коснулось?
Пример состояния гонки редактирование/удаление
Решая эту проблему, мы заметили, что были весьма неэффективны с операциями записи. Поскольку Cassandra согласована в конечном счёте, то она не может вот так взять и немедленно удалить данные. Ей нужно реплицировать удаления на другие ноды, и это следует сделать даже если ноды временно недоступны. Cassandra справляется с этим, приравнивая удаление к своеобразной форме записи под названием “tombstone” («надгробие»). Во время операции чтения она просто проскакивает через «надгробия», которые встречаются по пути. Время жизни «надгробий» настраивается (по умолчанию, 10 дней), и они навсегда удаляются во время уплотнения базы, если срок вышел.
Известно, что Cassandra быстрее выполняет операции записи, чем чтения, и мы наблюдали в точности это. Операции записи происходили в интервале менее миллисекунды, а операции чтения — менее 5 миллисекунд. Такие показатели наблюдались независимо от типа данных, к которым осуществлялся доступ. Производительность сохранялась неизменной в течение недели тестирования. Ничего удивительного, мы получили в точности то, чего ожидали.
Задержка чтения/записи, по данным из лога
Всё прошло гладко, так что мы выкатили Cassandra как нашу основную базу данных и вывели из строя MongoDB в течение недели. Она продолжала безукоризненно работать… примерно 6 месяцев, пока однажды не перестала реагировать.
Мы решили эту проблему следующим образом:
Ближайшее будущее
Отдалённое будущее
- Изучить Scylla — это СУБД, совместимая с Cassandra и написанная на C++. В нормальной работе наши ноды Cassandra в реальности потребляют немного ресурсов CPU, однако в непиковые часы во время починки Cassandra (противоэнтропийный процесс) они довольно сильно зависят от CPU, а время починки возрастает в зависимости от количества данных, записанных с момента прошлой починки. Scylla обещает значительно увеличить скорость починки.
- Создать систему для архивации неиспользуемых каналов в Google Cloud Storage и загрузки их обратно по требованию. Мы хотим избежать этого и не думаем, что такое придётся делать.
Заключение
Благодаря успеху этого проекта, с тех пор мы перенесли все остальные наши данные в производстве на Cassandra, и тоже успешно.
У нас до сих пор нет специализированных инженеров DevOps (только четыре инженера бэкенда), так что очень классно иметь систему, о которой не приходится волноваться. Мы набираем сотрудников, так что обращайтесь, если подобные задачки щекочут ваше воображение.
Хочу рассказать про использование мессенджера Discord как основного средства коммуникации в команде. Опыт может быть полезен другим командам, использующим бесплатные мессенджеры, а также всем, кто ищет пути повышения эффективности использования мессенджеров.
Discord – программа странная и выдающаяся одновременно. Почему? Хотя бы потому, что про способы работы в Discord получилась целая статья.
Что-то пошло не так
Давайте сначала разберемся, что не так с «обычными мессенджерами»: Skype, Viber и им подобными.
В данной статье я рассматриваю исключительно мессенджеры, у которых основной функционал доступен бесплатно. Да, существуют прекрасные платные программы, но они за рамками данной статьи, даже если имеют бесплатный урезанный режим.
Обычные мессенджеры устроены так, чтобы работать «из коробки» и без всякого администрирования. Это вполне здравый подход, обеспечивающий низкий порог вхождения: просто создали групповой чат и общаемся в нём. По-другому эти мессенджеры не могут, так как сложные процедуры настройки отпугнут основную аудиторию. Но, как обычно, низкие начальные вложения оборачиваются высокими эксплуатационными издержками. Какие проблемы имеем в итоге.
Разделение по темам. Чем больше пользователей в группе, тем больше количество обсуждаемых тем. Большинство тем интересны ограниченному числу пользователей группы. Подход здорового человека заключается в том, чтобы создавать тематические группы и включать в них только тех, кому тема интересна – такая изоляция уменьшает «информационный шум» от ненужного контента. Но на практике это приводит к полному хаосу. Например, имеем 10 чатов по работе, 4 чата детского сада, 3 чата многоквартирного дома и так далее. И всё это в одном пространстве имён, поэтому мы начинаем путаться в чатах. Они уползают вниз списка, забываются, потом создаются дубликаты забытых чатов, но туда забывают добавить всех пользователей. Если же количество участников примерно от полсотни и выше, то никакие параллельные чаты уже не создаются – слишком сложно поддерживать актуальный список участников. Ведется один супер-чат, содержащий все вопросы жизни, вселенной и всего такого. Результат: большие группы в мессенджерах становятся «токсичными»: контент неинтересен из-за большого количества мусора, мы присутствуем в группах только из-за необходимости.
Discord: начало
Теперь переходим к Discord. Прежде всего заметим, что в Discord есть два режима или, скорее, «вида»: назовем их «обычный» и «сервер». Они существуют параллельно и имеют разные цели. В «обычном» виде Discord – это такой же обычный мессенджер, как и все остальные. Даже с более ограниченными возможностями, чем тот же Skype:
Сервер
Чтобы работать с сервером, надо этот самый сервер иметь. Для определенности будем считать, что мы сотрудники стартапа «Рога и Копыта», поэтому наш сервер будет называться «РК». Создаем сервер путем нажатия на кнопку с большим знаком «+». Сервер – это уютное место, где будет проходить всё наше корпоративное общение (кроме 1-на-1, которое в «обычном» виде, вне сервера). Пользователи должны присоединиться к серверу по приглашению.
В левой панели сразу видим две новые сущности:
- Текстовые каналы. Это аналог чата, но с некоторыми особенностями и дополнительными функциями. Набор каналов сервера относительно стабилен: каналы всегда остаются на месте, не уползают вниз в истории, как в мессенджерах. Каналы удобны благодаря ролям и упоминаниям, о них далее.
- Голосовые каналы. В этих каналах мы общаемся голосом. Примерно как радиоприемник: нажимаем на канал (выбираем радиостанцию) и сразу же слышим поток вещания и ещё говорить сами можем. Голосовой канал – это поток, он не имеет начала и конца, нет инициатора звонка и нет самого звонка, который позовёт участников. Подключение к каналу мгновенное. Забудьте про «Я звоню, все ли готовы?» «Добавьте меня в звонок!» «Где ссылка на митинг?». Просто тык в канал — и через пол-секунды вы слышите голоса. Никакого текста в голосовых каналах нет — пишем мы в текстовые каналы. Голосовых каналов нужно столько, сколько голосовых митингов вам нужно вести параллельно. Весьма вероятно, что одного хватит.
Какие роли создавать – решаем сами. Роль соответствует некоему типичному набору действий пользователя. Например, на нашем сервере сделаем такие роли:
- everyone – техническая роль, означает «все, кто на сервере»; она уже есть и удалить её нельзя.
- сотрудник – назначаем роль всем сотрудникам, она дает способность видеть
в темнотевсе основные каналы. - админ – имеет права администрировать всё остальное. Главнее админов только владелец сервера, который и дает роли админам.
- кандидат – это не сотрудник, а тот, кого будем собеседовать. Данная роль позволяет придти на наш сервер (по приглашению) и участвовать в удаленном собеседовании: видит он только два канала «собеседование» – текстовый и голосовой.
- собеседующий – сотрудник, который проводит собеседование. Это не какой-то специальный человек, а просто любой сотрудник с дополнительной ролью. Собеседующий кроме всех своих каналов видит ещё текстовый и голосовой каналы «собеседование». Остальным сотрудникам (тем, кто не хочет участвовать в собеседовании) роль не даем и они не видят эти два лишних (для них) канала.
Каналы
Текстовые каналы на нашем сервере могут быть, например, такие:
- Каналы «работы» и «детского сада» не перемешаются, так как они будут в пределах разных серверов.
- Каналы не уползают вниз и не меняют порядка, они на фиксированном месте.
- Добавление даже большого количества пользователей в созданный канал делается быстро, через права ролей в канале.
- Нанят новый сотрудник: даем ему нужные роли. Он автоматически попадает в правильные каналы.
- Увольнение сотрудника: выгоняем с сервера.
- Создание нового канала: обычно клонируем существующий, если нужны те же права. Настраиваем права ролей – и пользователи автоматически попадают в канал.
Убрать уволившегося сотрудника из всех рабочих чатов в <любом мессенджере>. При этом полного списка чатов нет, а создатель чатов в отпуске.
Упоминания
Можно упомянуть роль:
А вот так можно упомянуть всех, кто есть в канале (любой из этих вариантов работает):
- Если вы вы не были упомянуты, то нотификация слабая: красный круг в таскбаре и маленькая чёрная пипка в названии канала.
- Если же вас кто-то упомянул, то нотификация более заметная: красный круг с числом в таскбаре, на иконке сервера и в названии канала; кроме того иконка Discord в таскбаре мигает оранжевым (пока приложение не получит фокус).
Легко видеть, что такой подход решает описанную выше проблему избыточных нотификаций, если немного обучить пользователей правильному стилю работы. Например, такому:
А минусы какие?
Технические ограничения в Discord.
Стандартные возможности
В этой статье рассмотрены принципиальные отличия Discord от других мессенджеров, позволяющие значительно увеличить эффективность работы. А вот список мелких фич, которые типичны для мессенджеров и не являются чем-то выдающимся:
А еще есть.
Боты и возможность написания своих ботов. Но это уже совсем другая тема.
Итого
Discord – это в некотором роде мессенджер 2.0, имеющий средства для эффективного общения больших групп пользователей, в том числе и в корпоративном применении. Создатели программы не побоялись выйти за рамки парадигмы обычных мессенджеров – и получилось неплохо. И в то же время Discord не конкурент обычным мессенджерам, у него своя экологическая ниша. Ведь у простых пользователей, не айтишников и не геймеров, наступает шок и трепет от необходимости администрирования и непохожести на привычные программы.
Надеюсь, информации в статье достаточно, чтобы решить, надо вам это или нет.
UPD1: Комментарий JustDont:
Перед тем как советовать дискорд для контор, нужно обязательно упоминать о том, что вообще-то нужно внимательно честь Discord Privacy Policy, в которой вполне себе английским или русским по белому написано, что Discord собирает всё, что вы ему отправляете. В том числе и всю вашу переписку, обратите внимание. И совершенно не обещает её шифровать и вообще как-то беречь её конфиденциальность от самих себя. И есть ряд сценариев, в которых эта собранная информация вполне может уйти куда-то, куда вам не очень хочется, чтоб она ушла. И нужно оценивать эти риски.
Discord (DiscordApp) - Русскоязычное сообщество запись закреплена
В приложение для компьютера добавлена поддержка мультистрима. Смотрите несколько стримов на серверах, переключайтесь между вводом и выводом, не покидая звонка, и закрывайте неактивные видео без стримеров.
Особый комплект улучшений видеочата «2 в 1»: теперь вы можете показывать свой экран во время общения в личном видеочате.
Добавлены плиточные эмодзи. Это значит, что теперь вы можете создавать чудовищные эмодзи Франкенштейна из десятков других эмодзи.
Улучшена система вложения изображений — теперь в нужных местах будут убираться ссылки. Потому что ничто так не портит отличную гифку, как прилепленная к ней ссылка хаха-картинка-ржака/84329480%34920348204.
Добавлена возможность выставить статус на час. Для тех случаев, когда вы точно уверены, что ваше текущее настроение изменится ровно через 59 минут.
Теперь для включения двухфакторной аутентификации нужно ввести пароль, так что ваши племяшки Васька и Ванька не смогут случайно заблокировать вашу учётную запись, когда вы дадите им погонять в игры на своём компьютере.
Новый опрос HypeSquad. Мы добавили в дом HypeSquad новый, элегантный, современный, модерновый, оригинальный, улучшенный, добавить вычурный синоним опрос. Его вопросы по-настоящему отражают наши взгляды на храбрость, ум и сбалансированность. Пройдите его повторно или впервые и вступите в HypeSquad в настройках пользователя.
Теперь вы можете убирать пользователей с ролями.
Из меню, которое открывается при нажатии правой кнопкой мыши по боту, удалено действие «Позвонить». Не знаю, как вам, а мне теперь будет одиноко по ночам…
Обновлены настройки интеграции. Управляйте ботами, вебхуками, подписчиками канала, интеграциями Twitch и YouTube помощью нашей новой страницы настроек в приложении для компьютера.
Теперь на странице интеграций можно добавить в профиль учётную запись GitHub.
ИСПРАВЛЕНИЯ И УЛУЧШЕНИЯ
Исправлена надоедливая панель отключения от голосового чата. Кнопка «X» не работала. И кнопка «Переподключиться» тоже не работала (её мы сломали на прошлой неделе, упс). Теперь вы наконец-то можете скрыться от нашего Большого Красного Баннера Позора.
Относительно интеграции с Twitch: ваши эмодзи Twitch 2-го и 3-го уровня теперь доступны только пользователям с соответствующей подпиской.
Функции «Заглушить» и «Отключить звук» в меню, которое открывалось при нажатии на значок Discord на панели задач, ничего не делали. Но мы это исправили.
Теперь мы уведомляем вас о том, что вы достигли лимита в 100 серверов. Нет, мы не станем поднимать лимит. пока что.
Читайте также: