Cómo garantizar la idempotencia de la interfaz

¿Qué es la idempotencia?

Se llama repetidamente a una interfaz y el impacto en el sistema es consistente. Ya sea una o más veces, los datos son consistentes y el efecto es el mismo.

¿Cuándo se necesita idempotente?

SELECCIONE col1 DESDE tab1 WHER col2 = 2, no importa cuántas veces se ejecute, no cambiará el estado, que es un idempotente natural.
ACTUALIZAR tab1 SET col1 = 1 DONDE col2 = 2, el estado es constante sin importar cuántas veces la ejecución sea exitosa, por lo que también es una operación idempotente.
ACTUALIZAR tab1 SET col1 = col1 + 1 DONDE col2 = 2, el resultado de cada ejecución cambiará, esto no es idempotente.
insertar en los valores de usuario (userid, name) (1, 'a') Si userid es la única clave primaria, es decir, para repetir la operación anterior, solo se insertará una pieza de datos de usuario, que es idempotente.
Si el ID de usuario no es la clave principal, puede repetirse.Si el negocio anterior se opera varias veces, se agregarán múltiples datos sin idempotencia.
eliminar del usuario donde userid = 1, múltiples operaciones, el mismo resultado, con idempotencia

Cómo garantizar la idempotencia

Clave primaria única

Use las características únicas de la clave primaria de la base de datos para resolver el problema de idempotencia al ejecutar la instrucción de inserción. (No válido en caso de división de subbibliotecas y tablas)

Tabla de deduplicación

Aplicable al escenario de inserción con un identificador único. Cree una nueva tabla de deduplicación y agregue un índice único. Al realizar la operación de inserción, guarde el identificador único en el campo de índice único de la tabla de deduplicación. Cuando se repite la solicitud, la base de datos se restringe debido a restricciones únicas. Lanza una excepción y retrocede.

Mecanismo de bloqueo optimista

Adecuado para escenarios de actualización, actualizar t_goods set count = count -1, version = version + 1 donde good_id = 2 y version = 1
el bloqueo optimista solo bloquea la tabla en el momento de actualizar los datos, y no bloquea la tabla en otros momentos

Control de máquina de estado

Este método es adecuado en el caso de la circulación de máquinas de estado, como la creación y el pago de pedidos. El pago del pedido debe ser anterior. En este momento, podemos usar el tipo int y el tipo de valor al diseñar el campo de estado. El tamaño es idempotente, por ejemplo, la creación del pedido es 0 y el pago es 100. Pago fallido por 99

Cómo garantizar la idempotencia de la API que proporciona la interfaz al mundo exterior

Para proporcionar interfaces externas Para admitir llamadas idempotentes, la interfaz tiene dos campos que deben pasarse, uno es la fuente de origen y el otro es la secuencia de número de serie de origen. Estos dos campos se combinan e indexan de forma única en el sistema del proveedor para que cuando un tercero llame Primero, verifique en el sistema local si se ha procesado y devuelva el resultado de procesamiento correspondiente; si no se ha procesado, realice el procesamiento correspondiente y devuelva el resultado.

19 artículos originales publicados · Me gusta2 · Visitas 721

Supongo que te gusta

Origin blog.csdn.net/qq_40977118/article/details/103735229
Recomendado
Clasificación