Как стать автором
Обновить

Как Discord обрабатывает более 1 000 000 push-запросов в минуту с помощью Elixir GenStage

Высокая производительность *Мессенджеры *Erlang/OTP *Тестирование веб-сервисов *Разработка систем связи *
Перевод

Discord

Discord испытал небывалый рост. Чтобы справиться с ним, нашему отделу разработки досталась приятная проблема — искать способ масштабирования сервисов бэкенда.

В этом деле мы добились большого успеха с помощью одной технологии, которая называется Elixir GenStage.

Идеальный шторм: Overwatch и Pokémon GO


Этим летом наша система мобильных push-уведомлений стала скрипеть от нагрузки. Чат /r/Overwatch перевалил за 25 000 одновременных пользователей, а чат-группы Pokémon GO возникали повсеместно, так что внезапные всплески потока уведомлений стали серьёзной проблемой.
Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Просмотры 17K
Комментарии 28

Discord. Тизер к уходящему году — Поиск, Скриншаринг, Видеочат, Логи аудита и Менеджмент каналов

Управление разработкой *Agile *Развитие стартапа Управление персоналом *
Это перевод недавней записи в блоге разработчиков Discord. Это тот сервис, который всё больше становится похож на конкурента Slack, хотя и не является его явным аналогом. В общем, хорошая эта штука, этот Discord. Хочется написать про него на Хабре немного.

15 декабря 2016

image

2016 был большим годом для Discord. Мы выросли из маленького притона в платформу, которую используют 25 миллионов людей для того чтобы играть со своими друзьями в игры (да и не только играть: в Discord, к примеру, ещё в конце 2015-го завалилась вся команда React разработчиков — прим. пер.).

Время не стоит на месте, хотя и не снижает наше желание продолжать вести разработку Дискорд под солнцем. Для достижения этого, наши инженеры ушли в свою лабораторию, чтобы приготовить для вас несколько вкусненьких штучек в грядущем 2017-м.

Команда маркетинга устроила ограбление и украла эту тяжёлую и слегка влажную сверхсекретную папку из их лаборатории. Мы едва выбрались оттуда, таща за собой это сокровище. Посмотрим же, что там такое внутри…
Читать дальше →
Всего голосов 12: ↑9 и ↓3 +6
Просмотры 18K
Комментарии 18

Как Discord хранит миллиарды сообщений

Высокая производительность *Мессенджеры *MongoDB *Тестирование веб-сервисов *
Перевод


Discord продолжает расти быстрее, чем мы ожидали, как и пользовательский контент. Чем больше пользователей — тем больше сообщений в чате. В июле мы объявили о 40 млн сообщений в день, в декабре объявили о 100 млн, а в середине января преодолели 120 млн. Мы сразу решили хранить историю чатов вечно, так что пользователи могут вернуться в любой момент и получить доступ к своим данным с любого устройства. Это много данных, поток и объём которых нарастает, и все они должны быть доступными. Как мы это делаем? Cassandra!
Читать дальше →
Всего голосов 61: ↑60 и ↓1 +59
Просмотры 86K
Комментарии 58

Как Discord индексирует миллиарды сообщений

Высокая производительность *Мессенджеры *Open source *Анализ и проектирование систем *Google Cloud Platform *
Перевод


Миллионы пользователей ежемесячно отправляют миллиарды сообщений в Discord. Поиск в этих сообщениях стал одной из самых востребованных функций, какие мы сделали. Да будет поиск!

Требования


  • Экономически эффективный: Основное взаимодействие пользователя с Discord — это наш текстовый и голосовой чат. Поиск — вспомогательная функция, и стоимость инфраструктуры должна отражать это. В идеале это значит, что поиск не должен стоить дороже, чем фактическое хранение сообщений.
  • Быстрый и интуитивно понятный: Все создаваемые нами функции должны быть быстрыми и интуитивными, в том числе поиск. Он должен выглядеть и ощущаться по высшему стандарту.
  • Самовосстановление: У нас нет отдела DevOps (пока), так что поиск должен выдерживать сбои с минимальным человеческим вмешательством или вообще без него.
  • Линейно масштабируемый: Как и с хранением сообщений, увеличение ёмкости поисковой инфраструктуры должно предусматривать добавление нодов.
  • Ленивая индексация: Не все пользуются поиском — мы не должны индексировать сообщения, пока кто-то не попытается хотя бы раз их найти. Вдобавок, после сбоя индекса должна быть возможность переиндексации серверов на лету.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Просмотры 11K
Комментарии 2

Как Discord масштабировал Elixir на 5 млн одновременных пользователей

Высокая производительность *Разработка веб-сайтов *Erlang/OTP *Elixir/Phoenix *
Перевод
С самого начала Discord активно использовал Elixir. Виртуальная машина Erlang стала идеальным кандидатом для создания высокопараллельной системы реального времени, которую мы собирались создать. Первоначальный прототип Discord был разработан на Elixir; сейчас он лежит в основе нашей инфраструктуры. Задача и предназначение Elixir простые: доступ ко всей мощи Erlang VM через гораздо более современный и дружественный язык и набор инструментов.

Прошло два года. Сейчас у нас пять миллионов одновременных пользователей, а через систему проходят миллионы событий в секунду. Хотя мы абсолютно не сожалеем о выборе архитектуры, пришлось проделать массу исследований и экспериментов, чтобы добиться такого результата. Elixir — это новая экосистема, а экосистеме Erlang не хватает информации о её использовании в продакшне (хотя Erlang in Anger — это нечто). По итогу всего пути, пытаясь приспособить Elixir для работы в Discord, мы извлекли некоторые уроки и создали ряд библиотек.
Читать дальше →
Всего голосов 19: ↑19 и ↓0 +19
Просмотры 11K
Комментарии 7

Chrome 57 будет активно подавлять работу фоновых вкладок

Программирование *


Ближайшие изменения в браузере Chrome вряд ли порадуют разработчиков Slack, Discord и других программ, которые работают во вкладках браузера. В бета-версии Chrome 56 реализован новый механизм оптимизации таймеров для фоновых вкладок.

На первый взгляд, инициатива разработчиков выглядит хорошим делом. В сентябрьском плане внедрения (Intent to Implement) объясняются причины, которые сподвигли разработчиков на такое решение.

Главная причина — некоторые плохо спроектированные приложения (например, скрипты аналитики и javascript-реклама) потребляют много ресурсов CPU, хотя находятся в фоновом режиме. Это негативно отражается на производительности браузера и потребляет энергию аккумулятора на мобильных устройствах. Такая обработка активности в фоновых вкладках совершенно ни к чему. Идея состоит в том, чтобы установить максимальный лимит вычислительных ресурсов, которые можно дать фоновому приложению.
Читать дальше →
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 24K
Комментарии 78

Как Discord одновременно обслуживает 2,5 млн голосовых чатов с помощью WebRTC

Высокая производительность *Мессенджеры *Софт Социальные сети и сообщества Звук
Перевод


С самого начала мы так спланировали инженерные и продуктовые решения, чтобы Discord хорошо подходил для голосовых чатов во время игры с друзьями. Эти решения позволили сильно масштабировать систему, обладая небольшой командой и ограниченными ресурсами.

В статье рассматриваются различных технологии, которые использует Discord для аудио/видеочатов.

Для ясности всю группу пользователей и каналов мы будем называть «группа» (guild) — в клиенте они называются «серверами». Вместо этого здесь термин «сервер» относится к нашей серверной инфраструктуре.
Читать дальше →
Всего голосов 24: ↑24 и ↓0 +24
Просмотры 23K
Комментарии 6

Подробности беспорядочной и тёмной стороны пиратских игр для Nintendo Switch

Информационная безопасность *Игры и игровые консоли
Перевод

Вражда, взаимная кража файлов, испытание на прочность серверов Nintendo – обычные вещи растущих сцен взлома и пиратства для Nintendo Switch




Не было никаких шансов на то, что источник утечки удастся отследить. Кто-то, возможно, профессиональный автор обзоров игр, помог слить копию Diablo III, весьма ожидаемой игры для Nintendo Switch по меньшей мере за несколько дней до её официального выхода. Источник использовал посредника, выпустившего игру для распространения между пиратами.

Подход с сокрытием источника утечки при помощи посредника был правильным способом выпуска игр до их выхода, «до появления на улицах» – так написал один из пиратов, судя по логам чата частной группы, в которой состоят несколько десятков пиратов Nintendo Switch. Кто бы ни был источником, за последние несколько месяцев он выпустил и другие игры, включая и такие, что появились у пиратов за две недели до официального выхода. А в другом случае пираты смогли достать Dark Souls: Remastered, ещё одну сильно ожидаемую игру, портированную на Switch.
Читать дальше →
Всего голосов 21: ↑17 и ↓4 +13
Просмотры 21K
Комментарии 8

Что если разделение прибыли 30/70 перестанет быть стандартом геймдева?

Разработка игр *Монетизация игр *Игры и игровые консоли


Геймдев — индустрия полная неопределенностей. На середине разработки игры могут поменяться движок, жанр, сюжет и сеттинг, но одно известно точно — когда игра выйдет, магазины заберут 30% прибыли.

70 на 30 — привычный стандарт, который, казалось, никто не собирался менять. С одной стороны его диктуют закрытые платформы, вроде игровых консолей или айфонов, с другой — свободный и открытый PC, где по факту тоже давно установилась монополия Steam. Только гиганты вроде EA и Blizzard могут позволить себе выпускать игры без него, но они протаптывают дорожки для себя и не ведут по ним других.

Но возможно с 2019 года стандарты начнут меняться.
Всего голосов 45: ↑45 и ↓0 +45
Просмотры 25K
Комментарии 152

Создание Discord – бота на .NET Core с деплоем на VPS-сервер

Настройка Linux *Программирование *.NET *C# *
Tutorial


Привет, Хабровчане!

Сегодня вы ознакомитесь со статьей, в которой будет рассказано, как создать бота, используя C# на .NET Core, и о том, как его завести на удаленном сервере.

Статья будет состоять из предыстории, подготовительного этапа, написания логики и переноса бота на удаленный сервер.

Надеюсь, данная статья поможет многим начинающим.
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Просмотры 37K
Комментарии 12

Автоматическая публикация записей из сообщества или страницы ВКонтакте в Discord

Социальные сети и сообщества
Из песочницы
Пример работы

Предыстория


Я являюсь создателем, среднего по количеству участников, Discord сервера ~5000 участников.
В один день мне понадобилось публиковать записи из группы ВКонтакте с последними новостями игры, ВКонтакте не умеет работать с вебхуками, поэтому пришлось идти в Google и искать подходящие решения.

Было найдено несколько решений, но либо они работали не так как хотелось и имели сложную настройку, либо не работали вовсе. Тогда у меня были некоторые знания JavaScript поэтому было принято решение писать самому.
Читать дальше →
Всего голосов 12: ↑9 и ↓3 +6
Просмотры 34K
Комментарии 12

Discord бот с экономикой с sqlite

Ненормальное программирование *Python *
Из песочницы

Привет, Хабр!


Хотел поделиться опытом, как я писал бота c экономикой для discord сервера с использованием sqlite и другой мелочи.
Читать дальше →
Всего голосов 9: ↑6 и ↓3 +3
Просмотры 32K
Комментарии 2

Почему Discord переходит с Go на Rust

Высокая производительность *Разработка веб-сайтов *Проектирование и рефакторинг *Rust *
Перевод


Rust становится первоклассным языком в самых разных областях. Мы в Discord успешно используем его и на серверной, и на клиентской стороне. Например, на стороне клиента в конвейере кодирования видео для Go Live, а на стороне сервера для функций Elixir NIF (Native Implemented Functions).

Недавно мы резко улучшили производительность одной службы, переписав её с Go на Rust. В этой статье объясним, почему для нас имело смысл переписать службу, как мы это сделали и насколько повысилась производительность.
Читать дальше →
Всего голосов 174: ↑170 и ↓4 +166
Просмотры 74K
Комментарии 306

Создание бота Дискорд на основе discord.js

JavaScript *
Из песочницы

Предыстория


Я заинтересовался созданием бота для Discord, но всё что я нашёл, было пару видео на YouTube, да и то там просто писали код, без всяких пояснений. Поэтому я хочу начать серию статей по созданию ботов на основе discord.js.


Получение токена бота


Для начала нам нужно зайти на страницу создание приложений и нажать New Application.


Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Просмотры 52K
Комментарии 12

Security Week 11: вредоносное ПО в поисковой выдаче

Блог компании «Лаборатория Касперского» Информационная безопасность *
20 февраля на Хабре появился резонансный пост с примерами объявлений в поисковой выдаче по запросам пользователей, желающих загрузить распространенный софт. Рекламные ссылки вели на сторонние ресурсы, а не на официальный сайт разработчика. Автор поста не проверял, являются ли распространяемые программы вредоносными, а в комментарии «Яндекса» указывалось, что объявления подобного рода проверяются перед публикацией. Скорее всего, в выдаче по популярным запросам рекламируются сайты, получающие от разработчиков ПО комиссию за установку программ.


На прошлой неделе исследователи «Лаборатории Касперского» показали, что бывает, если ПО в похожем сценарии все-таки оказывается вредоносным. В статье описывается бэкдор XCore и прямо указывается, что для повышения посещаемости веб-сайтов, мимикрирующих под оригинальные, злоумышленники размещали рекламные объявления в поисковых системах. Но без уточнения, в каких именно и когда. Поэтому важный дисклеймер: конкретные примеры в статье по ссылке выше и исследование «Лаборатории Касперского», скорее всего, не связаны между собой.
Всего голосов 12: ↑10 и ↓2 +8
Просмотры 3.3K
Комментарии 8

Что предлагают бесплатно или со скидками попробовать в условиях карантина. Подборка для бизнеса

IT-инфраструктура *Сетевые технологии *Облачные сервисы *Софт Видеоконференцсвязь
Предложения вендоров для организации удаленной работы и образования.

image

Пока контролирующие органы ловят недобросовестных продавцов медицинских масок и производителей арбидола, разработчики софта рекламируют свои лекарства. Удаленная работа — это теперь панацея от всех вирусов, с чем вынужденно соглашаются и те работодатели, которые отрицали ее как явление. Даже чудом не заразившийся Дональд Трамп рекомендует видеоконференции.
Всего голосов 20: ↑11 и ↓9 +2
Просмотры 5.2K
Комментарии 3

Создание простого Discord бота с помощью библиотеки discord.py

Python *
Из песочницы
Асинхронная библиотека discord.py содержит все что нужно для бота, с помощью нее даже можно работать с голосовыми каналами сервера. В этой статье я расскажу как создать простенького бота для вашего discord сервера.


Читать дальше →
Всего голосов 13: ↑11 и ↓2 +9
Просмотры 196K
Комментарии 9

Discord как корпоративный мессенджер и не только

Мессенджеры *Управление сообществом *
Из песочницы
Хочу рассказать про использование мессенджера Discord как основного средства коммуникации в команде. Опыт может быть полезен другим командам, использующим бесплатные мессенджеры, а также всем, кто ищет пути повышения эффективности использования мессенджеров.

Discord – программа странная и выдающаяся одновременно. Почему? Хотя бы потому, что про способы работы в Discord получилась целая статья.


Читать дальше →
Всего голосов 39: ↑36 и ↓3 +33
Просмотры 93K
Комментарии 29

Софт для видеоконференций: Skype, Hangouts и Zoom-полукровка

Управление персоналом *Софт Видеоконференцсвязь
image

Сейчас всем важно сидеть дома — в России режим изоляции продлили минимум до середины мая. А значит придётся работать и общаться с другими людьми дистанционно. А вот где именно мы будем созваниваться — это большой вопрос. Мы сделали небольшую подборку сервисов для видеоконференций, которые есть на рынке, и коротко рассказали о каждой из них.
Читать дальше →
Всего голосов 17: ↑12 и ↓5 +7
Просмотры 9.2K
Комментарии 27

Создание Discord-бота, используя библиотеку discord.js | Часть №1

JavaScript *Node.JS *
Из песочницы
Tutorial

Введение


В этой статье я подробно расскажу о том, как работать с библиотекой discord.js, создать своего Discord-бота, а также покажу несколько интересных и полезных команд.

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

Начало работы


Если вы уже знакомы с приведёнными ниже материалами, — смело можете пролистать этот раздел.

Установка среды разработки
Для начала работы с кодом нам нужно установить среду разработки, это может быть:


… и так далее.

Среда разработки выбирается по удобству использования и практичности, она у вас может быть любая, но мы рассмотрим её на примере Visual Studio Code, так как она является одной из самых приемлемых для новичков, а также для опытных программистов.

Для установки переходим по этой ссылке.


Выбираем свою операционную систему и запускаем скачивание.

Установка среды выполнения
Для создания бота мы используем среду выполнения node.js. Для её установки нам необходимо перейти на этот сайт.



На данный момент нас интересует версия долгосрочной поддержки (LTS), скачиваем её.

Установка полезных расширений
В Visual Studio Code присутствует возможность устанавливать расширения.
Для этого, кликните по отмеченной ниже иконке.



В открывшемся окне вписываем название название/идентификатор нужного нам расширения, после чего устанавливаем его.



Из полезных расширений могу отметить:

  1. Discord Presence — расширение, позволяющее отображать рабочую область и файл, в котором вы работаете в вашей игровой активности (функция работает только при использовании приложения Discord).

    Идентификатор расширения: icrawl.discord-vscode
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 119K
Комментарии 21