Optimización del rendimiento de reproducción de copias de transacciones según el modelo Ractor

1. Antecedentes

Cuando la base de datos en espera reproduce transacciones, se pueden reproducir simultáneamente múltiples transacciones independientes entre sí. Este método se utiliza principalmente para resolver el problema de la reproducción simultánea de múltiples transacciones que se pueden reproducir al mismo tiempo. A través de múltiples subprocesos de escaneo simultáneos, la cola de reproducción de cosas se escanea simultáneamente, se generan múltiples cosas que se pueden reproducir simultáneamente y se notifica al subproceso de reproducción para la reproducción simultánea.

2. Diseño de estructura de datos

Los datos de transacciones de la base de datos en espera se segmentan y almacenan en la cola de datos de transacciones de la base de datos en espera de acuerdo con el ID de la transacción. Consulte la Figura 1 a continuación. De acuerdo con la naturaleza completamente desordenada del ID de la transacción UUID, el UUID se puede escanear al mismo tiempo. por segmentos de ID de transacción. Después de segmentar el ID de objeto UUID, se entrega a múltiples rutinas de subprocesos de escaneo. Cada subproceso de escaneo es responsable de que una determinada partición UUID realice un escaneo simultáneo mediante múltiples subprocesos de escaneo y escanee elementos que se pueden reproducir.

3. Ciclo de vida del hilo

Cuando el hilo de escaneo encuentra algo que se puede reproducir, agregará el ID del objeto a txnList y realizará la operación de puesta en cola. Después de agregar el ID del objeto, el hilo de escaneo realizará la operación de notificación y despertará el hilo de reproducción inactivo para realizar la operación. Operación de reproducción de transacciones Para obtener un diagrama esquemático, consulte la Figura 2 a continuación.

El ciclo de vida de la rutina del subproceso de reproducción se muestra en la Figura 3. El subproceso de reproducción está en estado de suspensión justo después de iniciarse. Cuando hay reproducción de transacciones, se activará aleatoriamente. La rutina del subproceso de reproducción despertada realizará tareas de reproducción de transacciones y limpiará las dependencias de las transacciones.

Cuando se encuentra una transacción reproducible, si se encuentra que el número de transacciones reproducibles es igual a 1, la rutina actual realizará la reproducción para reducir el costo de un cambio de CPU; cuando se encuentre más de una transacción reproducible, la rutina del hilo de reproducción lo hará; elimine la primera Para una transacción reproducible, agregue txnList para activar otras corrutinas para la reproducción de transacciones para lograr un mejor rendimiento de reproducción concurrente.

4. Problema de conmutación concurrente

Cuando se adopta la limpieza concurrente, debido al problema del cambio de CPU, es necesario procesar las transacciones reproducibles que se descubren repetidamente y realizar un procesamiento idempotente defensivo para la misma ID de transacción que se descubre repetidamente, como se muestra en la Figura 4 a continuación. Por lo tanto, es necesario introducir txnIDSet para cada transacción reproducible para el procesamiento idempotente.

5. Cómo juzgar si la reproducción ha terminado

Debido a que se adoptan el escaneo y la reproducción concurrentes, el proceso de reproducción debe finalizar después de que se complete la reproducción de todas las transacciones reproducibles. La definición de fin de reproducción se proporciona aquí.

Cuando se hayan reproducido todas las transacciones reproducibles, se considera que la reproducción ha terminado. Las transacciones reproducibles se dividen en tres categorías: transacciones reproducibles descubiertas en el pasado/transacciones reproducibles descubiertas ahora/transacciones reproducibles descubiertas en el futuro.

Las transacciones reproducibles descubiertas en el pasado se agregarán a txnList. Las transacciones reproducibles descubiertas ahora están siendo reproducidas por el subproceso de reproducción. Las transacciones reproducibles descubiertas en el futuro son descubiertas por los UUID de escaneo del subproceso.

  • La condición para finalizar la reproducción de transacciones descubiertas en el pasado es que txnList esté vacío;
  • La condición encontrada ahora para el final de la reproducción de la transacción es que la suma de todos los estados de los trabajadores sea 0;
  • La condición para el final de la reproducción de transacciones descubiertas en el futuro es que el escaneo de GatherAll no pueda descubrir todos los subprocesos de escaneo en busca de transacciones reproducibles.

6. Ajuste del rendimiento

Según la cantidad de CPU, la cantidad de rutinas de reproducción del subproceso de escaneo y el subproceso de reproducción se pueden ajustar dinámicamente para distribuir razonablemente la carga de las dos rutinas. Al hacerlo, se aprovecha al máximo el rendimiento de los procesadores multinúcleo y se mejora el rendimiento y la capacidad de respuesta del sistema.

Decidí renunciar al software industrial de código abierto. Eventos importantes: se lanzó OGG 1.0, Huawei contribuyó con todo el código fuente y se lanzó oficialmente Ubuntu 24.04. El equipo de la Fundación Google Python fue despedido por la "montaña de código de mierda" . ". Se lanzó oficialmente Fedora Linux 40. Una conocida compañía de juegos lanzó Nuevas regulaciones: los obsequios de boda de los empleados no deben exceder los 100.000 yuanes. China Unicom lanza la primera versión china Llama3 8B del mundo del modelo de código abierto. Pinduoduo es sentenciado a compensar 5 millones de yuanes por competencia desleal. Método de entrada en la nube nacional: solo Huawei no tiene problemas de seguridad para cargar datos en la nube.
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/5148943/blog/11045388
Recomendado
Clasificación