S3P proporciona una forma radicalmente más rápida de copiar, enumerar, sincronizar y realizar otras operaciones masivas en grandes depósitos de AWS S3.
Puede usarlo como herramienta de línea de comandos para operaciones comunes o puede usarlo como biblioteca para casi cualquier cosa que pueda imaginar.
La API de S3 está estructurada en torno a enumerar elementos en serie: solicite 1000 elementos, espere y luego solicite los siguientes 1000. Así es como funcionan casi todas las herramientas de S3. S3P, sin embargo, puede enumerar elementos en paralelo. Aprovecha la capacidad de S3 para solicitar los primeros 1000 elementos iguales o posteriores a una clave determinada. Luego, con la ayuda de la bisección algorítmica y algunas heurísticas inteligentes, S3P puede escanear el contenido de un depósito con un grado arbitrario de paralismo. En la práctica, S3P puede enumerar depósitos hasta 20 veces más rápido que los métodos convencionales.
S3P es en realidad una herramienta de listado S3 elegante y realmente rápida. Resumir, copiar y sincronizar se ven impulsados por la capacidad central de S3P de enumerar objetos radicalmente más rápido.
Hemos mantenido velocidades de copia de hasta 8 gigabytes/segundo entre dos depósitos en la misma región utilizando una única instancia EC2 para ejecutar S3P.
Lea más sobre S3P en Medium.
NodoJS
CLI de AWS
Se requiere aws-cli
para copiar archivos grandes. De forma predeterminada, los archivos de más de 100 megabytes se copian con aws-cli
. Este es un buen compromiso para el rendimiento. Sin embargo, puede cambiar ese umbral a 5 gigabytes con la opción --large-copy-threshold
.
¿Por qué? El
aws-sdk
no admite la copia de archivos de más de 5 gigabytes sin una solución mucho más complicada.
Los nombres de clave deben utilizar un conjunto de caracteres limitado:
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
¿Por qué? Dado que Aws-S3 no admite la lista de claves en orden descendente, S3P utiliza un algoritmo de divide y vencerás basado en un rango de caracteres.
s3p usa las mismas credenciales que usa aws-cli, así que consulte su documentación: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
No es necesario instalar s3p directamente. Siempre que tenga NodeJS instalado, puede ejecutar s3p directamente usando npx
.
La ayuda integrada detalla todos los comandos, opciones y proporciona muchos ejemplos:
# list commands and get overall help
npx s3p help
Utilice la opción --help
para obtener ayuda detallada y ejemplos para cada comando:
# get specific command help and example uses
npx s3p cp --help
También puedes instalar s3p localmente, lo que permitirá que se ejecute más rápido.
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
Además del rendimiento, S3P ofrece opciones flexibles para personalizar listas, copiar y comparar:
Sorprendentemente, ni siquiera es necesario ejecutar S3P en la nube para ver muchos de sus beneficios. Puede ejecutarlo en su máquina local y, dado que la copia de S3 nunca pasa directamente a través de S3P, no utiliza ningún ancho de banda de AWS.
El rendimiento de la lista de depósitos de S3 puede alcanzar casi 20.000 50.000 elementos por segundo (a partir de S3Pv3.5).
El rendimiento de copia del depósito S3 puede superar los 8 gigabytes por segundo.
¡Sí, he visto 9 gigabytes por segundo sostenidos! Esto estaba en un depósito con un tamaño de archivo promedio ligeramente superior a 100 megabytes. S3P se estaba ejecutando en una única instancia c5.2xlarge. En comparación, nunca he visto que aws-s3-cp obtenga más de 150 mB/s. Eso es 53 veces más rápido.
El tamaño promedio de archivo tiene un gran impacto en los bytes por segundo generales de s3p:
ubicación | dominio | aws-cli | s3p | aceleración | tamaño promedio |
---|---|---|---|---|---|
local | es | 2500 artículos/s | 50000 artículos/s | 20x | n / A |
local | CP | 30mb/s | 150 mB/s | 5x | 512 KB |
ec2 | CP | 150 mB/s | 8 GB/s | 54x | 100mb |
S3P fue desarrollado para operar en depósitos con millones de elementos y cientos de terabytes. Actualmente, S3P sigue siendo solo una aplicación NodeJS de un solo núcleo. Existen oportunidades para operaciones S3 paralelas aún más masivas bifurcando trabajadores o incluso distribuyendo el trabajo entre instancias con algo como Elastic-Queue. Si alguien necesita soluciones que sean entre 100 y 1000 veces más rápidas que aws-cli, háganoslo saber. Nos encantaría trabajar con usted.
- [email protected]
Toda la documentación está integrada en las páginas de ayuda de CLI. Usar:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
Todas las capacidades de la CLI también están disponibles como API. Para conocer la API, primero conozca las opciones de la CLI y luego, para conocer la llamada de la API para un comando CLI específico, ejecute ese comando en la línea de comandos con la opción --api-example
. Esto generará un código JavaScript de ejemplo para invocar ese comando mediante programación.
NOTA: Cuando usa
--api-example
en la línea de comandos, su comando en realidad no se ejecutará. S3P solo enviará el equivalente JavaScript del comando CLI a la consola y luego saldrá.
Correr:
> npx s3p ls --bucket foo --quiet --api-example
Producción:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
Ejecución de prueba:
> node
Pasta:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
Producción:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P fue desarrollado originalmente por GenUI.com en conjunto con Resolución Bioscience, Inc.
GenUI es una consultoría de software de comercialización de tecnología con sede en Seattle. Aceleramos las hojas de ruta del software. No dude en ponerse en contacto con GenUI y contarnos sobre su proyecto. Nos encantaría saber de usted.