Distributed Transaction --- Seata

distribuído Problem

Aplicação do monómero é dividido em aplicações de micro-serviço, os três módulos originais dividido em três aplicações separadas, cada uma usando três fontes de dados separados, três necessidade operacional para serviços de conclusão de chamadas. Neste momento, a consistência dos dados dentro de cada serviço é garantido pela transação local, mas a consistência de dados global não pode ser garantida.

O que Seata isso?

Seata é um soluções de transações de origem distribuídos abertos, proporcionando alto desempenho e facilidade de uso de serviços de transações distribuídas. Seata irá fornecer aos usuários com AT, TCC, uma saga e modelo de transação XA para usuários distribuídos para criar uma solução one-stop.

Seata você pode fazer?

  • processamento de transações distribuídas de uma de três componentes modelo de ID +:
Transação ID XID ID de transação exclusivo global
Transaction Coordinator (TC) Coordenador de transações: a manutenção de execução global de transação, é responsável por coordenar e dirigir a transação confirmação ou anulação
Transaction Manager (TM) Transaction Manager: transações globais de controle da fronteira, é responsável por abrir uma transação global, e, eventualmente, lançar uma resolução global para confirmar ou reverter mundial
Gestor de Recursos (RM) Explorer: Controle assuntos ramo, o ramo é responsável pelo registro, relatórios de status, e receber coordenador assuntos de instrução, ramo de unidade (local) de transação confirmação ou anulação

modo AT

premissa

  • Suporte para transações ACID com base no banco de dados relacional local.
  • aplicações Java acessar o banco de dados via JDBC.

Whole Systems

  • A evolução da confirmação de duas fases protocolo:
    • Stage: registro de dados de negócios e rollback submetido na mesma transação local, o bloqueio será liberado e os recursos de conexão locais.
    • Duas etapas:
      • Submeter não sincronizada, muito rapidamente concluída.
      • Reversão compensada por uma inversa de fase log de rolamento.

Escrever isolamento

  • commits transação local antes de um estágio, você precisa ter certeza de obter o bloqueio global.
  • Não se o bloqueio global não pode ser submetido a assuntos locais.
  • Tome tentativas de bloqueio globais é limitado dentro de um determinado intervalo, fora do alcance vai desistir, e reverter a transação local, o bloqueio será liberado localmente.

isolamento de leitura

  • O sentido global padrão foi submetido (Read Committed) ou mais com base, Seata (AT mode) no nível local isolamento nível de isolamento de transação de banco de dados é leitura não consolidada (Leia Uncommitted).

modo de TCC

  • A transação global distribuído, o modelo geral é de duas fases. Global Services transação é composto de vários ramos, modelo de transação ramo para atender aos requisitos de consolidação de duas fases, o que exige que cada ramo tem sua própria transação são:

    • Prepara-se uma fase de comportamento
    • Duas fases cometer ou comportamento de reversão
  • Dependendo dos padrões de comportamento de duas etapas, vamos ramificar transação em Automatic (Branch) Modo de Transação e Manual (Branch) Modo de Transação.

  • AT modo suporta transações ACID locais com base em bancos de dados relacionais:

    • A preparar comportamento de fase: nos assuntos locais, enviar os dados de tráfego e atualizar o registro de rollback correspondente.
    • Duas fases actos: conclusão sucesso imediato, log assíncrono automático de reversão de limpeza lote.
    • Duas fases comportamento de reversão: Jornal reversão gerando automaticamente uma operação de compensação, dados completos retroceder.
  • Apropriado, de modo TCC, não é dependente dos recursos subjacentes de suporte de transação de dados:

    • A preparar comportamento de fase: Chamando preparar lógica personalizada.
    • Duas fases atos: chamada cometer lógica personalizada.
    • comportamento de reversão de dois estágios: chamando personalizado lógica de reversão.
  • O modo chamado TCC se refere ao costume do suporte para o ramo de negócios da gestão global da transação.

modo de saga

  • Saga é um Seata soluções modelo longo de transação fornecido no modo de Saga, um processo de negócio a cada participante que enviar assuntos locais, quando um participante não compensar os participantes já apareceu bem sucedido, um palco e serviço para a frente serviços de desenvolvimento de negócios de compensação de dois estágios são realizados.

cena aplicável

  • processos de negócios longa, processos multi-negócios
  • Os participantes incluem outras empresas de serviços ou sistemas legados não pode fornecer modo TCC requer três interfaces

superioridade

  • Fase confirmar uma transação local, sem bloqueio, de alto desempenho
  • arquitetura orientada a eventos, os participantes podem executar de forma assíncrona, alto rendimento
  • serviço de compensação é fácil de implementar

deficiência

  • não garante o isolamento

Exemplos

exemplo

  • Os usuários compram a lógica de negócio da mercadoria. A lógica de negócio inteiro é suportado por três micro-serviços:
    • Serviços de armazenagem: para uma dada quantidade de uma dedução de commodities armazenagem.
    • Ordens Serviços: Criar pedidos com base nas necessidades de aquisição.
    • Serviços de Conta: dedução da conta do usuário.

gráfico

Aqui Insert Picture Descrição

Serviços de armazenagem

public interface StorageService {

    /**
     * 扣除存储数量
     */
    void deduct(String commodityCode, int count);
}

Encomendar Serviços

public interface OrderService {

    /**
     * 创建订单
     */
    Order create(String userId, String commodityCode, int orderCount);
}

Serviços de conta

public interface AccountService {

    /**
     * 从用户账户中借出
     */
    void debit(String userId, int money);
}

A lógica do negócio principal

public class BusinessServiceImpl implements BusinessService {

    private StorageService storageService;

    private OrderService orderService;

    /**
     * 采购
     */
    public void purchase(String userId, String commodityCode, int orderCount) {

        storageService.deduct(commodityCode, orderCount);

        orderService.create(userId, commodityCode, orderCount);
    }
}
public class OrderServiceImpl implements OrderService {

    private OrderDAO orderDAO;

    private AccountService accountService;

    public Order create(String userId, String commodityCode, int orderCount) {

        int orderMoney = calculate(commodityCode, orderCount);

        accountService.debit(userId, orderMoney);

        Order order = new Order();
        order.userId = userId;
        order.commodityCode = commodityCode;
        order.count = orderCount;
        order.money = orderMoney;

        // INSERT INTO orders ...
        return orderDAO.insert(order);
    }
}

Seata Distribuído Solutions Transação

Aqui Insert Picture Descrição

  • Nós só precisa usar uma @GlobalTransactionalanotação em métodos de negócio
    @GlobalTransactional
    public void purchase(String userId, String commodityCode, int orderCount) {
        ......
    }

Quanto mais você sabe, mais você não sabe.
maneira correta, sem cirurgia, os pacientes ainda podem procurar, não há nenhuma maneira de cirurgia, terminando a cirurgia.
Se você tiver outras dúvidas, mensagem de boas vindas, podemos discutir, aprender juntos e progredir juntos

Ele publicou 193 artigos originais · ganhou elogios 116 · vista 10000 +

Acho que você gosta

Origin blog.csdn.net/qq_40722827/article/details/105161929
Recomendado
Clasificación