Hola a todos!
En este artículo quiero hablar sobre cómo elegí el archivador para comprimir los registros de nuestro sistema de recepción.
La división en la que trabajo se dedica al desarrollo y mantenimiento de un sistema unificado de front office del Banco. Soy responsable de su mantenimiento, monitoreo y DevOps.
Nuestro sistema es una aplicación altamente cargada que sirve a más de 5,000 usuarios únicos diariamente. Hoy es un "monolito" con todas sus ventajas y desventajas. Pero ahora el proceso de transferencia de funcionalidad a microservicios continúa activamente.
Todos los días, nuestro sistema genera más de 130 GB de registros sin procesar, y a pesar de que usamos la pila ENG (Elasticsearch Nxlog Graylog), los registros de archivos contienen mucha más información (por ejemplo, errores de seguimiento de pila) y, por lo tanto, requieren archivado y almacenamiento.
Dado que la ubicación de almacenamiento es limitada, surge la pregunta: "Y qué archivador se encargará mejor de esta tarea".
Para resolver este problema, escribí un script de PowerShell que realizó el análisis por mí.
La tarea del script es llamar a los archivadores rar, 7z y zip con diferentes parámetros de compresión, para calcular la velocidad de la formación del archivo, así como el espacio en disco utilizado.
Trabajo preparatorio:
Analizamos con más detalle.
$table|Sort-Object -Property "Size %","Result %"|Format-Table -AutoSize
$table|Sort-Object -Property "Result %","Size %","Time %"|Format-Table -AutoSize
El resultado:
El más económico en términos de espacio en disco fue 7z con una relación de compresión de -mx = 8 y -mx = 9

El tiempo de creación de archivo más rápido fue de 7z con una relación de compresión de -mx = 1

El más óptimo en velocidad y espacio ocupado fue 7z con una relación de compresión de -mx = 3

Elegimos 7z con una relación de compresión de -mx = 8, ya que el tamaño del archivo es -mx 9, pero funciona un poco más rápido.
Genial, el archivo y la relación de compresión están seleccionados, ¡ahora archivemos los registros!
Necesitamos resolver los siguientes problemas:
- Evite la alta carga del servidor durante la operación.
- Procese todas las carpetas con una subcarpeta Registros.
- Eliminar archivos anteriores a 30 días (para no quedarse sin espacio en disco).
- Cree archivos por día según la hora en que se modificaron los archivos.
Aquí no pintaré todas las líneas de la secuencia de comandos (descrita en los comentarios), pero me centraré solo en la función Set-MMTCore, que nos permite calcular el número de subprocesos para 7z para no cargar el procesador en nuestro servidor:
Function Set-MMTCore {
Sin usar la función Set-MMTCore
Se puede ver que la CPU descansa al 100%. Esto significa que inevitablemente causaremos problemas en el servidor y recibiremos una alerta del sistema de monitoreo.

Cuando se usa la función Set-MMTCore
Se puede ver que la CPU es 30-35%. Esto significa que el uso de la función Set-MMTCore le permite archivar archivos sin afectar el funcionamiento del servidor.

El resultado del script de respaldo:
Carpeta antes de archivar:

Carpeta después de archivar:

Archivos creados durante el proceso de archivo:

Archivos en el archivo:

