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

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

Время на прочтение 6 мин
Количество просмотров 17K
Всего голосов 40: ↑39 и ↓1 +38
Комментарии 28

Комментарии 28

Это очень хороший пример того, чем удобен эрланг. А удобен он именно в продакшне: не на тестах на ноутбуке, а в реальном продакшне.
И в чем же удобство?
Если речь про backpressure из коробки, то его сейчас каждый ленивый делает. Взять Akka стримы, например
как уже обсуждали: джава не даст нормального fault tolerance. При любом эксепшне надо очень аккуратно следить за закрытием ресурсов.
как уже обсуждали: джава не даст нормального fault tolerance.

Это что-то новенькое.

При любом эксепшне надо очень аккуратно следить за закрытием ресурсов.


try (Connection c : openConnection()) {
}
И?

файл открыли, начали с ним работать, произошла ошибка и вылетели выше. Файл остался незакрытым.

Положили ссылку в глобальный хеш, забыли её удалить.

Так что тут ничего новенького. В джаве нет ничего такого специфичного по сравнению с C++, что помогло бы бороться с утечками ресурсов и их контролем.
Файл остался незакрытым.

Код выше закрывает файл. Даже если Вы этого не увидели.

Довольно странно менять дырявый и проприетарный скайп, который непонятно куда сливает мою переписку, на другой закрытый сервис.
Ну, на счет дырявости — эти претензии можно предъявлять вообще кому угодно. Плюсы дискорда в другом. Он действительно потрясающе удобен и очень активно развивается.
Попробуйте собраться в скайпе группой 20+ человек — будет тихий ужас. А в любом «игровом» голосовом чате это отлично работает. А дискорд еще и безумно удобный, например групповым чатом с оффлайн историей, удобной настройкой прав по каналам и тд. Для организации какой-то групповой деятельности (не обязательно ммо) он прекрасен.
Вчера один наш несколько дней назад созданный чатик потерял всю хистори на одном из каналов.
Let it crash в действии? Ну, такое.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
униэтап — это пять. унидкм, унислуга.
НЛО прилетело и опубликовало эту надпись здесь
и это чего нибудь я бы поставил из портов себе и использовал
ejabberd, riak, rabbitmq прекрасно ставятся «из портов»

Сейчас го и раст пеарятся примерно тем же самым, хотя пока, к счастью, ничего полезного на них не родили.
Ага, позовите как только на них напишут аналог riak-core. Те же посоны из akka так ничего вразумительного пока не смогли придумать.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
потому что все остальное под такой нагрузкой сосет,


Это было правдой лет 10-20 назад, когда эти телекомы создавались. Сейчас, например, Ерланг Mqtt брокер раза в 2 по перформансу уступает netty+mqtt на java. Проверял лично.
НЛО прилетело и опубликовало эту надпись здесь
Мы же все, наверное, понимаем, что «проверял лично» — это хорошо, но мало.

Конечно, так же как и «все остальное под такой нагрузкой сосет».

Что значит «по перформансу уступает»?

Это значит, что в моем сценарии Ерланг мктт брокер показывал рельзультаты хуже чем ява мктт брокер. Дело было 2 года назад. Детали уже, конечно, не вспомнить.

связка netty+mqtt будет хот-релоадиться

Никак. Так же как и Ерланг это может не всегда. Вопрос скорее — а нужно ли это?

java ведь еще гораздо дороже с точки зрения саппорта

?

НЛО прилетело и опубликовало эту надпись здесь

Отправка 1 миллиона пушей в минуту не кажется такой уж большой проблемой. Если слать в firebase под одним коннектом связанные уведомления (если брать например чат то там будет 25000 человек по сути всем надо отправить пуш с одним и тем же контентом) то вы можете слать по 1000 пушей в пакете. Скорость будет примерно по 3-5 таких пакетов в секунду. Даже если брать вперемешку с небольшими группами по 10-20 устройств или даже там где у вас по одному то выходит скорость около 10-20 в секунду на одном коннекте ssl.
Как итог — при средней скорости в 300 пушей в секунду вам хватит 50 воркеров на одном сервере которые берут сообщения из rabbit. Выйдет около миллиона пушей в минуту. Окей для надежности можно и 500 воркеров или 10 серверов по 50 воркеров :). Все равно сервер на 70% занят ожиданием ответа гугла.
К слову тут скорее больше проблем с обработкой ответов чем с отправкой. Вы ведете статистику отправки помечаете у себя прочитанные? Обработать 16 тысяч обратных запросов в секунду тоже не очень-то просто.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории