В настоящее время я нахожусь на этапе планирования для реализации функции push-уведомлений в моем веб-сервисе на основе PHP, который будет поддерживать несколько приложений. Моя текущая структура обслуживания включает в себя непостоянные серверы автоматического масштабирования, используемые для обработки больших нагрузок трафика / запросов.
Для использования APNS у меня возникают проблемы с разработкой архитектуры.
Я прочитал APNS Начало работы.
Apple заявляет, что необходимо поддерживать соединения для push с APNS, чтобы избежать того, чтобы их рассматривали как DDOS-атаку:
Держите ваши соединения с APN открытыми через несколько уведомлений; не многократно открывать и закрывать соединения. APN рассматривает быстрое подключение и отключение как атаку отказа в обслуживании. Вы должны оставить соединение открытым, если вы не знаете, что оно будет простаивать в течение длительного периода времени — например, если вы отправляете уведомления своим пользователям только один раз в день, можно использовать новое соединение каждый день.
Apple заявляет, что для большого количества нажатий:
«Вы можете установить несколько подключений к одному и тому же шлюзу или к нескольким экземплярам шлюза. Если вам нужно отправить большое количество удаленных уведомлений, распределите их по соединениям на несколько разных шлюзов. Это повышает производительность по сравнению с использованием одного подключения: это позволяет вы отправляете удаленные уведомления быстрее, и это позволяет APN доставлять их быстрее ».
Я нашел этот пост о Постоянные APNS-соединения на сайте, где говорится…Эмпирическое правило составляет не более 15 подключений«
Мои вопросы:
1. Как я должен обрабатывать эти нажатия для нескольких приложений, не рискуя быть замеченным как DDOS ?. Я не думаю, что смогу использовать свои непостоянные серверы с автоматическим масштабированием, потому что они будут подключаться / отключаться при загрузке / выключении. Нужно ли распространять свои соединения на несколько статических серверов?
2. Если я распространю свое соединение на несколько серверов, это позволит мне обойти это псевдо-ограничение 15 соединений? Если мне нужно несколько соединений для каждого приложения для отправки большого количества push-уведомлений, я чувствую, что я бы превысил 15 по мере роста моей клиентской базы.
Посмотрели аналогичный вариант использования и TBH, кажется, проще использовать Amazon SNS Mobile Push. Вы можете поддерживать несколько платформенных приложений, используя их сервис и просто пропинговать конечную точку, когда хотите отправить уведомление. Он также поставляется с поддержкой из коробки для
Между сохранением открытых соединений на неопределенное время (для каждого приложения на нескольких шлюзах), повторной отправкой сбойных уведомлений в потоке и управлением службой обратной связи APNS является просто огромной PITA. Кроме того, если вы активируете какой-либо из их лимитов обслуживания, они отзовут ваш сертификат или хуже, и вы не будете отправлять уведомления, пока не обновите свою систему новой.
И пусть кто-нибудь еще справится со всеми этими головными болями: D
Мои собственные решения этой проблемы:
-Серия выделенных серверов с собственным IP-адресом
-Мониторинг и регулировка скорости исходящего запроса во время передачи большого объема, чтобы избежать отключения DDOS.
Вторичная проблема, которую я обнаружил, заключалась в том, что определенные операторы телефонной связи ограничивают количество посылок, которые вы можете отправить им, прежде чем вас отключат. Таким образом, даже если ограничение APNS составляло 15 соединений или около того, я не мог даже заставить столько работать на полной скорости, не превысив лимит для определенных операторов и не допуская, чтобы их серверы закрывали меня. Это может быть проблемой, специфичной для японских операторов, хотя (docomo, в частности, был строгим, я выделил выделенный сервер только для них с большими настройками нагрузки передачи).