Diretório do artigo
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
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
- Nós só precisa usar uma
@GlobalTransactional
anotaçã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