Recomendación para cientos de descargas de archivos en simultáneos

  • Autor Autor Langel
  • Fecha de inicio Fecha de inicio
Langel

Langel

Beta
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Hola amigos de ForoBeta! =) , quería comentarles el problema que ando experimentando, y queria mejorarlo con la ayuda de ustedes:
se trata de cientos de descargas por minuto en simultaneo de distintos archivos alojados en un servidor VPS y que pesan entre 1 a 5 MB, son muchos archivos almacenados las cuales no son todas las que se descargan en simultaneo, el problemas son con los archivos TOP y la hora punta en que las descargan, estos archivos TOP son las más descargas y esto hace que se vuelva lento las descargas en general.
tengo estas características en mi VPS (digitalocean): 2 GB RAM / 1 vCPU / 50 GB / 2 TB
La pregunta sería:
¿Cual de esas características del VPS se debería mejorar para que las descargas me funcionen más rápida según mi experiencia ya contada?
- Muchas gracias por la ayuda y por sus comentarios, amigos forobeteros 🙂
 
Basicamente aumenta la red (ancho de banda)

un tunel mas amplio permite la entrada y salida de mas vehiculos y segundo.
Limita la velocidad de bajada como lo hacen servicios como mega y asi.

existe la forma mala de implementarlo :

y la correcta que es usando los modulos de apache o nignx para limitarla.

si la limitas a 1 Mb y tu vps tiene 1.000 GR permitira mil descargas por X peso del archivo X red del visitante.

preferiblemente yo haria un pequeño php que añada en cola las descargas y simplemente dejar un aviso que diga,

Espera tu turno
tu turno es 120 ( tiempo aproximado 12 segundos *calculado en base a lo de arriba* ) y listo ;3
 
Muchas gracias por tu respuesta, claro que es un buena alternativa pero aun así no me gustaría limitarlo, me gustaría que tenga un descarga normal y considerable, y bueno aver si comentan mas alternativas gracias 🙂
 
Muchas gracias por tu respuesta, claro que es un buena alternativa pero aun así no me gustaría limitarlo, me gustaría que tenga un descarga normal y considerable, y bueno aver si comentan mas alternativas gracias 🙂

al limitarlo no sera una molestia porque como tu dijiste.
son archivos entre 1 a 5 MB
 
aver vamos por partes, tengo estas preguntas...
al limitar la descarga a un 1 MB por ejemplo
¿la descarga va ser mas lento o va ser mas rápido ?
¿como será la descarga con los archivos TOP y con los demas?
 
aver vamos por partes, tengo estas preguntas...
al limitar la descarga a un 1 MB por ejemplo
¿la descarga va ser mas lento o va ser mas rápido ?
¿como será la descarga con los archivos TOP y con los demas?

Al limitarlo

si un usuario tiene 90 megas descargara a 1 mb es decir si quiere un archivo de 5 Mb en vez de demorar 1 segundo (aprox) ignorando tiempo de resputas etc

tardara 5 segundos

si un usuario entra con menos de 1 Mb, descargara a maxima velocidad de su red.

Los archivos mas requeridos seran, el limite es para segmentar la red y permitir mas descargas simultaneas no sirve de nada tener un vps que pueda tener unas 200 descargas simultaneas a poca velocidad que tener 5 a maxima velocidad.
 
mm entiendo al parecer creo que tiene que ver mucho la red del usuario, tengo esto trabajando con un código php bastante simple creo, y bueno al parecer tu idea no esta nada mal seria cuestión de experimentarlo, crees poderme ayudarme a implementar esa condición de la limitación por descarga en este código por favor, te lo agradecería muchísimo.
PHP:
if(file_exists($file)){
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length:'.filesize($file));
    readfile($file);
    exit();
} else exit('file no exist!');
 
mm entiendo al parecer creo que tiene que ver mucho la red del usuario, tengo esto trabajando con un código php bastante simple creo, y bueno al parecer tu idea no esta nada mal seria cuestión de experimentarlo, crees poderme ayudarme a implementar esa condición de la limitación por descarga en este código por favor, te lo agradecería muchísimo.
PHP:
if(file_exists($file)){
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length:'.filesize($file));
    readfile($file);
    exit();
} else exit('file no exist!');

PHP:
if(file_exists($file)){

    /** Limites **/
    $download_speed = 1024; // Cambialo por tu valor Representado en bytes ej: 1024 kb/s 
   
    /** Headers **/
    header('Cache-control: private');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize($file));
    header('Content-Disposition: filename=' . $file);
   
    /** Inicio **/
    flush();
   
    $file = fopen($file, 'r');
   
    // Envio
    while (!feof($file)) {

        // Envio por partes al navegador en Bytes
        echo fread($file, round($download_speed* 1024));

        flush();

        sleep(1);
    }

    // Salir
    fclose($file);

} else {
    echo 'El archivo no existe o no se encuentra';
    exit();
}

/**
    Seria algo asi. Obvio debes mejorarlo como digo no es eficiente hacerlo con php.
*/
 
Muchas gracias lo probare ! 🙂 ya les comentare =)
 
me gusto mucho el tema y de echo ya te respondieron muy bien
 
Limitar con nginx la descarga es muy sencillo, más práctico y funcional que Apache.

Por ejemplo

limit_rate 1m;
limit_conn addr 10;
limit_conn_zone $binary_remote_addr zone=addr:10m;

Permitir descargar a 1mb por IP y máximo 10 conexiones por IP.

Puedes ir probando y testeando la descarga, esperar resultados etc.
 
Podrías usar CDN
 

Temas similares

Atrás
Arriba