Pull to refresh

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

High performance *Instant Messaging *Erlang/OTP *Web services testing *Development of communication systems *
Translation

Discord

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

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

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


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

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

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

15 декабря 2016

image

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

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

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

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

High performance *Instant Messaging *MongoDB *Web services testing *
Translation


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

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

High performance *Instant Messaging *Open source *System Analysis and Design *Google Cloud Platform *
Translation


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

Требования


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

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

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

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

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

Programming *


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

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

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

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

High performance *Instant Messaging *Software Social networks and communities Sound
Translation


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

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

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

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

Information Security *Games and game consoles
Translation

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




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

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

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

Game development *Games monetization *Games and game consoles


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

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

Но возможно с 2019 года стандарты начнут меняться.
Total votes 45: ↑45 and ↓0 +45
Views 25K
Comments 152

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

Configuring Linux *Programming *.NET *C# *
Tutorial


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

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

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

Надеюсь, данная статья поможет многим начинающим.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views 34K
Comments 12

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

Social networks and communities
Sandbox
Пример работы

Предыстория


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

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

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

High performance *Website development *Designing and refactoring *Rust *
Translation


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

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

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

JavaScript *
Sandbox

Предыстория


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


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


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


Читать дальше →
Total votes 10: ↑7 and ↓3 +4
Views 51K
Comments 12

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

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


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

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

IT Infrastructure *Network technologies *Cloud services Software Video conferencing
Предложения вендоров для организации удаленной работы и образования.

image

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

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

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


Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Views 192K
Comments 9

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

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

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


Читать дальше →
Total votes 39: ↑36 and ↓3 +33
Views 88K
Comments 29

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

Personnel Management *Software Video conferencing
image

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

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

JavaScript *Node.JS *
Sandbox
Tutorial

Введение


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

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

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


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

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


… и так далее.

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

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


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

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



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

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



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



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

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

    Идентификатор расширения: icrawl.discord-vscode
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 105K
Comments 21