В мире электронной коммерции создание заказов — важнейший процесс, требующий эффективной синхронизации данных между различными системами. Система отслеживания измененных данных (CDC) и шаблон исходящих сообщений — это два мощных метода, которые обеспечивают распространение данных в реальном времени и обеспечивают согласованность между несколькими службами. В этой статье мы рассмотрим различные методы и предоставим примеры кода для реализации CDC с шаблоном «Исходящие» в сценарии создания заказов электронной коммерции.
Метод 1: триггеры базы данных
Один из способов реализации CDC — использование триггеров базы данных. Триггеры можно настроить на таблицах, отвечающих за создание заказов. Всякий раз, когда происходит операция вставки или обновления, триггер фиксирует изменения и публикует их в шине событий или очереди сообщений. Затем подписчики могут использовать эти события и соответствующим образом обновлять свои соответствующие системы.
Пример (MySQL):
CREATE TRIGGER order_insert_trigger AFTER INSERT ON orders
FOR EACH ROW
BEGIN
INSERT INTO outbox_events (event_type, event_data)
VALUES ('order_created', NEW.order_id);
END;
Метод 2: CDC на основе журналов.
Другим популярным методом является CDC на основе журналов, который использует журналы транзакций базы данных для фиксации изменений. Читая журналы транзакций, вы можете извлечь необходимую информацию и опубликовать ее в шине событий или очереди сообщений. Этот метод обеспечивает неинтрузивный способ фиксации изменений без изменения схемы базы данных.
Пример (PostgreSQL с использованием pg_wal):
import psycopg2
from psycopg2 import sql
from psycopg2.extras import LogicalReplicationConnection
conn = psycopg2.connect("dbname=mydb user=myuser")
cur = conn.cursor()
cur.execute("SELECT pg_create_logical_replication_slot('order_slot', 'wal2json')")
with LogicalReplicationConnection(conn, 'order_slot') as repl_conn:
repl_conn.start_replication(slot_name='order_slot')
while True:
try:
for message in repl_conn:
if message['change']:
event_data = message['change']['columnvalues']
publish_event(event_data)
except KeyboardInterrupt:
repl_conn.close()
break
Метод 3: Debezium
Debezium — это платформа сбора данных об изменениях с открытым исходным кодом, которая поддерживает различные базы данных. Он фиксирует изменения на уровне строк и отправляет их как события в стандартизированном формате. Настроив Debezium для вашей базы данных, вы можете легко реализовать CDC с помощью шаблона Outbox.
Пример (Debezium с Apache Kafka):
{
"name": "order-connector",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "localhost",
"database.port": "3306",
"database.user": "mysqluser",
"database.password": "mysqlpassword",
"database.server.name": "orderdb",
"table.whitelist": "orders",
"database.history.kafka.bootstrap.servers": "localhost:9092",
"database.history.kafka.topic": "dbhistory.order"
}
}
Внедрение системы отслеживания измененных данных с помощью шаблона «Исходящие» имеет решающее значение для обеспечения согласованности данных и обеспечения синхронизации в реальном времени в системах создания заказов электронной коммерции. Используя такие методы, как триггеры базы данных, CDC на основе журналов или такие инструменты, как Debezium, разработчики могут эффективно распространять изменения и создавать масштабируемые и производительные архитектуры.