Cómo enviar eficientemente toneladas de solicitudes de obtención con p

Cómo enviar eficientemente toneladas de solicitudes de obtención con php

Estoy trabajando en un proyecto en el que tengo que desarrollar un módulo web simple basado en PHP desde donde el usuario (administradores) puede enviar mensajes SMS (Seguimiento) a los estudiantes, en aras de la publicidad y otras necesidades.

La API de SMS es muy simple y solo necesito enviar una solicitud GET a un dominio de origen cruzado junto con el número de teléfono y mensaje. Lo probé con el file_get_contents("sms_api_url?credentials"); y funciona bien.

Lo que me preocupa es que el SMS se enviará a TONELADAS de números y, por lo tanto, tengo que enviar la solicitud varias veces mediante un bucle, lo que llevará mucho tiempo y creo que será demasiado consumo de recursos. Además, el tiempo máximo de ejecución de PHP está establecido en 30 segundos, lo cual no quiero cambiar.

Pensé en usar el JavaScript del lado del cliente para enviar una solicitud de origen cruzado en un bucle para que no afecte a mi servidor, pero eso no sería seguro, ya que revelaría las credenciales de la API .

¿Qué tecnología debo usar para lograr mis objetivos? y enviar toneladas de solicitudes get de manera eficiente?

Mostrar la mejor respuesta

almacene los mensajes en la base de datos y use cron para enviar los mensajes al servidor.

Lo que at con las palabras mly negritas al azarmly, hace que sea difícil de leer

Envíe las solicitudes desde el servidor, pero no lo haga en el script PHP que genera la página.

En su lugar, almacene información sobre los mensajes deseados en una base de datos.

Escriba otro programa que, periódicamente, verifique la base de datos en busca de mensajes no enviados y realice la llamada a la API. Podrías ejecutarlo usando cron.

No nos ha dicho nada sobre el volumen real que necesita manejar, las métricas para el tiempo de procesamiento/conexión ni las limitaciones que existen en la implementación.

Tal como está, esto es muy demasiado amplio para responder. Pero algunos enfoques que podría considerar son:

1) Ejecutar solicitudes simultáneas - pero tenga en cuenta que, al igual que la fragmentación de dominios, esto puede socavar su ancho de banda si se utiliza en exceso

2) Puede tener scripts PHP ejecutándose indefinidamente fuera del servidor web (usando CLI SAPI) y estos pueden ser lanzado desde una sesión web.

Pensé en usar JavaScript del lado del cliente para enviar una solicitud de origen cruzado en un bucle para que no afectara a mi servidor, pero eso no sería seguro, ya que revelaría las credenciales de la API.

Si envía directamente al punto final, entonces sí, necesitará las credenciales en el navegador. Pero si implementa un script de proxy que inyecta las credenciales en su servidor web, puede usar sus propias credenciales desde el navegador.

Usar cron tiene ciertas ventajas, pero realmente no desea generar una tarea desde crond para enviar un mensaje SMS; debe ejecutarse en lotes y debe administrar la concurrencia.

Es posible que desee considerar cambiar a un agregador diferente que pueda ofrecer procesamiento masivo.

Independientemente del enfoque, necesitará una forma de almacenar los mensajes/números de teléfono y un mecanismo de bloqueo para el procesamiento de recuperación.

Personalmente, estaría tentado a usar un MTA para esto o tal vez incluso Kannel, pero ese es más un enfoque para manejar volúmenes superiores a 300,000 por día.

Enviar tantas solicitudes de red como sea necesario en menos de 30 segundos son dos requisitos que se contradicen entre sí. Además, la "eficiencia" bruta puede significar exprimir todos los recursos del servidor, lo que puede no ser deseable.

Dicho esto, creo que los puntos clave son:

  • Puede que me equivoque, pero, que yo sepa, solo hay dos formas de evitar que una parte no autorizada consuma un servicio web: credenciales privadas y filtrado de IP. Ninguno es posible en JavaScript basado en navegador.

  • No hagas que un ser humano mire frente a la computadora hasta que complete una tarea de este tipo. No hay absolutamente ninguna necesidad de hacerlo e incluso puede hacer que la tarea se cancele.

  • Si necesita enviar el mismo texto a diferentes destinatarios, averigüe si el proveedor de SMS tiene una API que le permita hacerlo en una sola solicitud de API. Las entregas de lotes grandes se vuelven uno o dos órdenes de magnitud más difíciles cuando esta función no está disponible.

En resumen necesitas:

  • Un script de línea de comandos
  • Un programador de tareas (por ejemplo, cron)
  • Prefiere la estabilidad del servidor a la máxima eficiencia (es posible que incluso desee acelerar sus solicitudes)