Комментарии 28
как уже обсуждали: джава не даст нормального fault tolerance.
Это что-то новенькое.
При любом эксепшне надо очень аккуратно следить за закрытием ресурсов.
try (Connection c : openConnection()) {
}
файл открыли, начали с ним работать, произошла ошибка и вылетели выше. Файл остался незакрытым.
Положили ссылку в глобальный хеш, забыли её удалить.
Так что тут ничего новенького. В джаве нет ничего такого специфичного по сравнению с C++, что помогло бы бороться с утечками ресурсов и их контролем.
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 тысяч обратных запросов в секунду тоже не очень-то просто.
Как Discord обрабатывает более 1 000 000 push-запросов в минуту с помощью Elixir GenStage