Consulte https://www.backblaze.com/b2/docs y el cliente / enlaces de go en https://github.com/kothar/go-backblaze
Gracias por la sugerencia.
Me gustaría conectar mi lib B2, que implementa abstracciones de nivel superior y corrección de errores: https://github.com/kurin/blazer
En particular, cambia automáticamente a la API de "archivo grande" de B2 cuando el archivo supera un cierto umbral, lo que permite cargas de> 5 GB.
Gracias por la pista. Parece que tienes algo de experiencia con backblaze, ¿tienen un servicio de prueba en el que podamos ejecutar nuestras pruebas de CI?
¿Cómo pruebas tu biblioteca? ¿Contra los sistemas de producción con credenciales válidas?
Cabe señalar que, si bien B2 es muy barato en términos de almacenamiento, no lo es per se en términos de recuperación y operaciones. Hacer copias de seguridad grandes y frecuentes con el patrón de acceso actual de restic (donde extrae los índices / árboles del repositorio) puede ser costoso.
Por supuesto, nada de eso importará una vez que haya un caché local para esos datos. En ese caso, B2 podría ser la opción más atractiva disponible para el almacenamiento remoto.
https://www.backblaze.com/b2/cloud-storage-pricing.html dice que 1GB de salida es gratis por 24 horas. ¿No debería ser suficiente para los datos del índice?
Backblaze no tiene una instancia de prueba. Estoy implementando uno yo mismo para probar mi biblioteca, ya que mis pruebas de integración tienen algunos límites que no pueden alcanzar razonablemente (por ejemplo, la autenticación de credenciales expira después de 24 horas). Probablemente consiga completar esa función en su mayoría en las próximas semanas.
También estaba interesado en esta función, y armé el PR # 694 para implementar el soporte de backend B2 usando el paquete blazer de
Un backend b2 potencial todavía necesita algo de trabajo y necesitamos encontrar una estrategia para probar. Creé una cuenta con Backblaze y envié una solicitud para una cuenta patrocinada que podemos usar para ejecutar las pruebas.
Para usar esta cuenta para acceder incluso al nivel gratuito de b2, necesitará un número de teléfono para activar la autenticación de dos factores, y (todavía) no estoy dispuesto a darles mi número de teléfono. ;)
Continuemos la discusión aquí.
fwiw, las pruebas de integración del blazer son del orden de varios cientos de MB por prueba (ya que necesito empujar> 100 MB a b2 para probar todas las cosas complejas) y realmente no noto mucho en mi factura. También puede establecer límites estrictos en las solicitudes, por tipo de RPC, para que las solicitudes posteriores fallen. El límite es diario.
Gracias por la información @kurin.
Para su información: Backblaze no patrocinará una cuenta de prueba gratuita. Tal vez experimente un poco con su nivel gratuito ...
¿Cómo se necesita la cuenta de prueba gratuita cuando 1 GB de descarga por día es gratis? (Lo siento, debo haberme perdido en los comentarios de arriba aquí)
Ya no creo que sea necesario. Actualmente estoy reelaborando las pruebas de CI de backend para que utilicen muchos menos datos que antes (al menos para los backends que se prueban con un servicio de terceros en vivo). Así que probablemente podamos usar el nivel gratuito. Necesito encontrar tiempo para investigar esto, está en mi lista (justo después del rápido backend).
Agregué un PR con un backend B2 basado en la @kurin : # 978
¿Alguien interesado en probarlo? ¡Me encantaría recibir comentarios!
Acabo de subir 14,738 GiB (51459 elementos) a B2. Esto tomó unos 90 minutos. Según la página "Informes" de Backblaze, esto provocó alrededor de 2700 b2_get_upload_url
, 2700 b2_upload_file
y 2700 b2_list_file_names
llamadas a la API. ¿Existe la posibilidad de que la cantidad de b2_list_file_names
llamadas a la API se pueda optimizar para reducir el costo?
Editar: La creación de una segunda instantánea del mismo directorio sin cambios tomó 22 minutos. Resultó en alrededor de 8500 b2_download_file_by_name
llamadas y 8600 b2_list_file_names
llamadas adicionales.
Edit2: Creé una tercera instantánea ahora usando --force
. Tardó 4.5 minutos en completarse. Los contadores de uso de API de B2 solo se incrementaron de 10 a 50 recuentos para varias funciones.
Acabo de subir 2 repositorios diferentes en diferentes cubos. El cubo tiene 29,5 GB y el otro 47,5 MB. Las llamadas de subida en realidad parecen correctas. La gran cantidad de descargas es extraña porque nunca intenté restaurar. La lista de nombres de archivos de 6K es algo muy malo.
Intenté crear una segunda instantánea del pequeño repositorio con solo un par de archivos de texto modificados y generó mucha actividad. Lo ejecuté de nuevo, esta vez con el registro de depuración y sin cambios en el repositorio ...
El directorio de origen tiene 866 archivos y 47 MB. Después de 4 instantáneas, este depósito / repositorio solo contiene 21 archivos. Solo debería haber necesitado llamar a b2_list_file_names una vez. Y todavía estoy aprendiendo sobre restic, pero no estoy seguro de por qué necesitaría descargar más que el índice. Se descargó de todos los archivos de datos en numerosas ocasiones.
Aquí hay un grep para X-Blazer-Method en el registro para la ejecución de la copia de seguridad donde no hubo cambios:
Método X-Blazer: b2_authorize_account Método X-Blazer: b2_list_buckets Método X-Blazer: b2_list_file_names Método X-Blazer: b2_get_file_info Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_get_upload_url Método X-Blazer: b2_upload_file Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_get_upload_url Método X-Blazer: b2_upload_file Método X-Blazer: b2_list_file_names Método X-Blazer: b2_get_upload_url Método X-Blazer: b2_upload_file Método X-Blazer: b2_list_file_names Método X-Blazer: b2_download_file_by_name Método X-Blazer: b2_list_file_names Método X-Blazer: b2_get_upload_url Método X-Blazer: b2_upload_file Método X-Blazer: b2_list_file_names Método X-Blazer: b2_get_upload_url Método X-Blazer: b2_upload_file Método X-Blazer: b2_list_file_names Método X-Blazer: b2_delete_file_version
En blazer, descargar un objeto, ya sea en su totalidad o en parte, llamará a b2_list_file_names primero para completar un objeto interno con datos del lado del servidor, similar a stat. No lo recuerdo de repente, pero sospecho que esto es para obtener, entre otras cosas, el tamaño del objeto, para admitir lecturas de rango.
Exploraré si se puede eludir esta verificación.
He introducido un cambio en blazer que elimina la llamada a b2_list_file_names en cada (nuevo) archivo leído; actualice y vea si esto ayuda.
¡Oh, genial! Prepararé un PR :)
Ver # 997
Tuve la oportunidad de probar esto; parece más razonable en las descargas; para una restauración de ~ 250 MB obtengo:
$ grep X-Blazer-Method /tmp/restic-debug.log | sort | uniq -c
1 X-Blazer-Method: b2_authorize_account
2 X-Blazer-Method: b2_delete_file_version
8166 X-Blazer-Method: b2_download_file_by_name
1 X-Blazer-Method: b2_get_file_info
2 X-Blazer-Method: b2_get_upload_url
1 X-Blazer-Method: b2_list_buckets
10 X-Blazer-Method: b2_list_file_names
2 X-Blazer-Method: b2_upload_file
de los cuales solo unos pocos son extraños:
$ grep '416 Requested' /tmp/restic-debug.log | wc -l
9
Parece que estas 8k lecturas provienen de ~ 60 archivos de datos. No conozco los aspectos internos de restic, pero apuesto a que cualquier mejora en el número de llamadas download_file_by_name tendrá que provenir de algún tipo de lógica de captación previa que pueda leer varios fragmentos a la vez.
Las cargas seguirán siendo 1: 1 con list_file_names y las llamadas de carga, porque restic llama a Attrs para cada objeto b2 antes de guardar para asegurarse de que no existe. No veo una forma de evitar esta verificación, pero puedo omitir esto y simplemente llamar a get_file_info, que es clase C en lugar de clase B y un 10% más caro.
Está bien, recuerdo por qué lo hice de esta manera. b2_get_file_info
, la llamada que queremos hacer, requiere el (B2 interno) fileId
, que no podemos derivar del nombre excepto haciendo otra llamada a la API. Los doctores dicen:
El ID del archivo, como lo devuelve b2_upload_file, b2_hide_file, b2_list_file_names o b2_list_file_versions.
Pensaré en eliminar la llamada Attrs
para guardar un nuevo archivo en ciertos casos (por ejemplo, para archivos de datos), pero eso llevará algo de tiempo. El backend B2 se beneficiará automáticamente de él.
Obtuve una solución al descargar un solo byte: /
download_file_by_name es más barato que list_file_names.
Lo estoy probando ahora, pero debería funcionar.
$ grep X-Blazer-Method /tmp/restic-debug.log | sort | uniq -c
1 X-Blazer-Method: b2_authorize_account
1 X-Blazer-Method: b2_delete_file_version
73 X-Blazer-Method: b2_download_file_by_name
1 X-Blazer-Method: b2_get_file_info
63 X-Blazer-Method: b2_get_upload_url
1 X-Blazer-Method: b2_list_buckets
6 X-Blazer-Method: b2_list_file_names
63 X-Blazer-Method: b2_upload_file
Hmhm, eso es feo. : ojos_cerrados_ lengua_atacada:
¿Existe tal vez una manera de cargar un archivo en B2 con O_EXCL
, es decir, la llamada falla si el archivo ya existe?
No. Las cargas nuevas "ocultan" las cargas anteriores. Si subes "foo" a "x", y luego "barra" a "x", y luego lees "x", obtendrás "barra". Si luego borra "x" y lee "x", obtendrá "foo".
Hm, con el repositorio restic que funcionará bien. Solo necesitaría agregar un código especial para eliminar un archivo, de modo que elimine todas las versiones. Lo pensare.
¿Podemos mover esto a un nuevo número? Hablar de ello en las relaciones públicas se siente mal.
Seguro.
Entonces, la discusión se mueve al # 1000 (yay)
Comentario más útil
Agregué un PR con un backend B2 basado en la @kurin : # 978