1 Velocidade entender MQ
Introdução Rabbitmg para resolver a transação distribuída deve dominar os cinco conceitos fundamentais
Um middleware distribuído de mensagens, poder de processamento alta concorrência com base no desenvolvimento da linguagem Erlang, com o nível de linguagem. E o Spring Framework é a mesma empresa.
persistência apoio, alta disponibilidade
Cinco conceitos fundamentais:
- Fila: dados reais do armazenamento local
- Câmbio: receber um pedido, o despejo de dados
- Bind: Depois de receber a solicitação, quando para armazenar
- dados da aplicação é transmitida: produtor mensagem
- consumidor mensagem: Remover o processamento de dados do aplicativo
2, problemas de transações distribuídas
transação distribuída é uma questão de negócios, não ser divorciada da cena específica.
Várias soluções 2.1 transações distribuídas
● banco de dados baseado XA / JTA meio de um acordo
requer o suporte do fornecedor de banco de dados; componente JAVA tem atomikos etc.
● assíncrona revisar o modo como os dados
Alipay, iniciativa pay micro-canal para verificar o status do pagamento, na forma de contas;
soluções ● são baseados em fontes confiáveis (MQ) de
assíncrona cena; universal forte; expansão da maior
● soluções de programação TCC
cuidadosamente selecionados, Ali, formigas vestido dourado próprio pacote DTX
Este artigo objetivo: para todas as pessoas, aprender a resolver o problema de transações distribuídas com base em fontes confiáveis.
Soluções para transação distribuída, o negócio altamente segmentados, é ideias importantes em vez de copiar
- Missão dos EUA arquitetura do sistema de comentário
questões transação distribuída entre vários sistemas 2.2
- ordens gerado usuário único
- Ordens precisa passar os dados, gerando assim dois problemas de consistência transacionais
Caso errado
Quando a chamada de interface falhar, a transação é rolada sistema de ordem de volta, o usuário é solicitado operação falhar
误以为这样的接口调用写法,就不会有分布式事务问题
Interface de sucesso chamada ou fracasso, terá um problemas de transação distribuída:
- Interface de chamada for bem sucedida, a transação do banco de dados do sistema a fim submissão falha, o sistema não reverter a carta de porte, gerar dados
- Interface chama um tempo limite, o sistema de banco de dados a fim de reversão de transação, interface de sistema de carta de porte continua a gerar dados
Em ambos os casos, ela pode levar a inconsistências de dados
3, para alcançar uma transação distribuída - Cinco Passo
Resolver transações distribuídas via MQ 5 passos, bem como processamento de transações distribuídas local, a nota
- Antes de sistema de pedidos para enviar todos os pedidos do sistema waybill interface HTTP, um problema!
- Portanto, nós consideramos uma mensagem para MQ, scratch assíncrona!
3.1 conceito de design global
Depois de ordens de catering, lentamente, à espera do centro de dados de geração de conhecimento aéreo, não é simultaneidade obrigatória
- produção de confiança: para garantir que a mensagem deve ser enviada para o Rabitmq serviço
- Consumo de confiança: para garantir que a mensagem deve tirar adequada consumido
E, finalmente, com dados multi-partido chegar a um consenso.
3,2 Passo 1 - produzir informação gravada fiável mensagem
- Há perigos ocultos - possíveis mensagens não conseguiu enviá-lo!
Para garantir o sucesso de certos dados são enviados para o MQ.
Na mesma operação, um aumento recorde na mesa de operação, o registro 每一条发往MQ的数据以及它的发送状态
para que adicionar uma tabela de informações de local no sistema de pedidos
Assim, na prática o código, não pelas interfaces dos sistemas HTTP chamada interface de faturamento, mas o uso de MQ
Ao gerar ordens, mas também guardar a tabela de informações locais
3.3 Passo 2 - Produção Reliable Messaging (modificação do estado de transmissão de mensagens)
- Use RabbitMQ mecanismo de publicação transacional reconhecimento (confirmar)
após a abertura, MQ mensagem de aceitação precisa Return Receipt
- Em seguida, ser capaz de saber como atualizar a tabela informações locais
- mecanismo de Confirmação para assegurar aberto em SB
- Se a confirmação não for recebida, a modificação mensagem de falha do Estado e outras circunstâncias especiais
兜底方案:定时检查消息表,超时没发送成功,再次重发
3,4 Passo 3 - o processamento de mensagens de confiança (o processamento normal)
- Depois que o sistema waybill recebe os dados da mensagem de repente vai para baixo, ou visite a carta de porte quando DB, DB repente vai para baixo, os dados da mensagem não está perdido em você !!!
Então, precisamos das seguintes características:
Idempotente
impedem o processamento duplicado dos dados de mensagem, uma operação de utilizador, os dados de processamento em tempo correspondendo a apenas
aberto 手动ACK模式
pelo consumidor controle mensagem retransmissão / remover / descarte
3,5 Passo 4 - mensagens confiável (mensagem de retransmissão)
Os consumidores processamento falhar, precisamos re-MQ novamente para o consumidor.
Anormalidades normalmente repetir várias vezes pelo próprio consumidor número recorde de tentativas, e o número de controles (nem sempre repetir!)
Passo Cinco 3,6 - mensagens confiável (mensagem de descarte)
manipulação do consumidor fracasso, ou descartados diretamente transferidos para uma fila letra morta (DLQ)重试次数过多、消息内容格式错误等情况,通过线上预警机制通知运维人员
4 Resumo e extensões
Prós e contras de programa de 4,1 MQ
vantagem de abertura
- versatilidade
- Desenvolvimento e forte
- programa madura
deficiências na boca
- middleware baseada em mensagens, apenas para cenários assíncronos
- processamento de mensagens será adiada, necessidade de ser capaz de tolerar a negócios
Tente evitar transação distribuída;
tentar fazer transações non-core assíncronas;
4,2 expansão
base teórica para soluções de transações distribuídas
CAP teoria
teoria BASE
2PC protocolo
3PC protocolo
algoritmo Paxos.
Protocolo de coerência Raft