Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Quanto mais você sabe, mais você não sabe

Prefácio

As filas de mensagens são amplamente utilizadas no armazenamento de tecnologia da Internet. Quase todos os entrevistadores técnicos de back-end têm que criar dificuldades de 360 ​​° para seus amigos no uso e nos princípios das filas de mensagens.

Como um tirano de rosto que uma vez aceitou uma oferta na cara de uma empresa de Internet, ele derrotou inúmeros concorrentes, e todas as vezes ele viu inúmeras figuras solitárias saindo desapontadas, sentindo-se um pouco culpadas (permita-me usar uma retórica exagerada).

Então, em uma noite solitária e intolerável, eu aprendi a dor do homem caloroso e decidi começar a escrever a série "Pendurando o Entrevistador", na esperança de ajudar os leitores no futuro. A entrevista será como um contra-ataque de 360 ​​° contra o entrevistador, e o entrevistador será atacado. Deixe os colegas que estavam me entrevistando ficarem perplexos e colhendo ofertas de grandes fábricas!

Falar

Esta edição foi preparada originalmente para que todos votassem e, em seguida, escolhessem um dos princípios básicos do Java e filas de mensagens para escrever, mas pensei, o básico do Java é apenas uma coleção de cada tipo de coleção, posso escrever vários artigos, o básico tem que escrever alguns Meses, posso escrever a fila de mensagens curtas primeiro?

Minha mente disparou e tirei uma foto da mesa, então vamos tomar uma decisão!

Então, há esse problema haha.

importante! Antes de começar, gostaria de perguntar, você gostaria que eu falasse sobre os pontos de conhecimento diretamente na minha própria língua, ou falo como cenas de entrevista?

Porque encontrei uma questão muito séria. Se minha abertura e meu final forem centenas de artigos, você ficará entediado no final?

Resumindo, essa sugestão é muito útil para mim, ou se você tiver alguma sugestão por escrito, pode me adicionar ao WeChat e me contar em voz baixa.

Entrevista começa

Um belo homem de meia-idade vestindo uma camisa xadrez veio até você com um macacão arranhado, olhou para sua cabeça brilhante e pensou que ele devia ser o arquiteto de Nima! No entanto, vimos a série de Nuan Nan Ao Bing, e há poemas e livros em sua barriga, e não há vazio.

Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

O jovem perguntou-lhe muito sobre Redis. Não só teve uma boa resposta, como também pode explicar as soluções, vantagens e desvantagens dos respetivos cenários de forma harmoniosa. Já viu a série "Enforcando o Entrevistador" escrita por Ao Bing? ?

choque! ! ! Professor, como você sabe? Não consigo parar de assistir a série dele.

Hehe, Redis não o impede, mas não posso impedi-lo quando pedir uma nova pilha de tecnologia. Deixe-me perguntar: você usou filas de mensagens em seu projeto? Por que você usa filas de mensagens?

Puff, isso também é chamado de problema? Não posso usá-lo se outros o usarem? Quando os outros usam, eu uso. Eu uso apenas para usar.

Apenas sussurre em seu coração, não diga isso, não diga se você não receber a oferta, não apenas fale aí quando chegar a hora, o canalha do Ao Bing me ensinou a dizer isso!

Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Olá entrevistador: O volume de negócios da nossa empresa é muito pequeno, então pode ser feito diretamente em uma única máquina, mas o volume de negócios continua a se expandir, adotando o conceito de design de microsserviços e o método de implantação distribuída. Muitos serviços estão divididos. À medida que o volume aumenta e os cenários de negócios se tornam cada vez mais complexos, a pilha de tecnologia independente e o middleware em muitos cenários não são suficientes e a facilidade de uso do sistema também diminui. Por fim, muitas tecnologias foram criadas. Para o trabalho de seleção, decidimos introduzir o middleware de fila de mensagens.

Oh? Você disse que os cenários de negócios estão ficando cada vez mais complexos. Em quais cenários você usa as filas de mensagens?

Bem, deixe-me falar sobre a cena que uso sob três aspectos.

Dica: essas três cenas também são cenas clássicas de filas de mensagens. Basicamente, todos devem estar familiarizados com o tipo de fila de mensagens. Quando você fala sobre filas de mensagens, precisa pensar em assíncrono, recorte de pico, desacoplamento e reflexo condicionado.

assíncrono:

Em nosso cenário anterior, há muitas etapas que precisam ser concluídas em um processo. Por exemplo, meu sistema de pedidos. Originalmente, nosso negócio é simples. Precisamos apenas pagar pelo pedido e o processo está concluído.

No entanto, um gerente de produto veio mais tarde e configurou um sistema de cupons. OK, não é um grande problema. Haverá 100 ms extras no processo para deduzir cupons.

Mais tarde, o gerente de produto teve um lampejo de inspiração e disse que poderíamos construir um sistema de pontos, certo, havia 200ms extras no processo para aumentar ou diminuir os pontos.

Mais tarde, o produto Faraó ao lado disse: Depois que o pedido for bem-sucedido, enviaremos uma mensagem de texto para o usuário, portanto, enviaremos uma mensagem de texto em 100 ms.

depois disso. . . (Ao Bing, você nunca acaba !!)
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Enfim, o processo é um pouco assim ↓

Princípios básicos da fila de mensagens da série "Hanging the Interviewer"
Você pode ver que apenas três foram adicionados. Posso dizer categoricamente que há definitivamente mais de 10 sistemas envolvidos no processo de pedido real (e-commerce convencional), quanto maior, mais.

Este link continua assim, e leva muito tempo. Os usuários acham que leva dezenas de segundos para comprar algo para você. Não comprarei lixo eletrônico de você, mas se for tão barato quanto Bin Xixi, é realmente perfumado!

Mas nossa empresa não tem a força econômica do Xixi, então só podemos otimizar o sistema.

Dica: Minha antiga empresa de comércio eletrônico exige que o Rt (ResponseTime) de todas as interfaces esteja dentro de 200 ms e todas as otimizações além dele. O QPS do sistema que agora estou no comando também é 9W +. Ou seja, se o cluster da rede estiver abalado, pode ser o tipo de fritadeira. A RT deve estar dentro de 50ms.
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Todos sentem esse QPS.

Sim, o link é longo e lento, então como você resolve isso?

O link é longo e lento, mas descobrimos que o processo acima pode ser feito ao mesmo tempo. Depois de pagar com sucesso, posso verificar o cupom e aumentar ou diminuir os pontos ao mesmo tempo. Também posso enviar uma mensagem de texto ao mesmo tempo. .

Não podemos implementar o processo normal, o que devemos fazer, assíncrono.

Você compara e descobre que leva apenas 100 milissegundos para o usuário saber que o pedido foi bem-sucedido, mas ele não se importa se você enviar a mensagem de texto para ele alguns segundos depois, certo?
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Garoto, deixe-me interrompê-lo. Você disse assíncrono, não é a mesma coisa para mim usar threads e pools de threads?

Ah, não se preocupe com o entrevistador, falarei sobre isso mais tarde, Sao e assim por diante.

Dissociação:

Agora que o entrevistador pergunta isso, direi por que não podemos fazer com threads, porque fazemos com threads, você quer escrever código?

Você tem um processo de pedido, você deduz pontos, deduz cupons, envia mensagens de texto e deduz estoque. . . Espere que tantas empresas chamem tantas interfaces. Cada vez que você adiciona uma, precisa chamar uma interface e republicar o sistema. Não há problema em escrever uma ou duas vezes. Se você escrever demais, basta dizer: Não estou fazendo isso!

E se estiver tudo escrito junto, não é apenas o problema de acoplamento, também é difícil para você solucionar os problemas. Se ocorrer um problema em qualquer parte do processo, pode afetar outros pontos. Meu amigo disse que todos os processos que tenho Tentar pegar não é suficiente. Acredite em mim, não faça isso. Este código é como uma bomba-relógio. Você não sabe quando ela vai explodir. Se você não explodir, ela explodirá quando você estiver fazendo atividades. Você terá uma falha de P0 e embalará sua mochila com antecedência. Família de ano novo.

Dica: P0 — PN é um mecanismo frequentemente usado por empresas da Internet para determinar o nível de acidentes e P0 é o nível mais alto.

Mas se você usar uma fila de mensagens, o problema de acoplamento será resolvido.

Oh, o que Shuai Bing disse?

Deixe-me falar sobre isso:

Depois de fazer um pedido, você dirá aos outros sistemas que seu pagamento foi bem-sucedido e eles cuidarão do problema quando o receberem. Você só precisa seguir seu próprio processo e enviar sua mensagem, então a qual sistema se conectará mais tarde? Simples, assine diretamente a mensagem de sucesso do pagamento enviada por você, e eu irei monitorá-la após o seu pagamento ser bem sucedido.

Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Então o seu processo está concluído, você não precisa se preocupar se os outros estão tendo sucesso? Por exemplo, se você fizer um pedido, os pontos não serão adicionados e o cupom não será deduzido.

A pergunta é uma boa pergunta, mas não há necessidade de pensar sobre isso. O próprio sistema de negócios é mantido por seus próprios desenvolvedores. Qual é o problema do meu pedido se sua dedução de pontos falhar? Cuide apenas do seu próprio sistema de pedidos.

Dica: Isso é o que eu disse, mas na verdade essa é uma deficiência do uso de filas de mensagens. Envolve pontos de conhecimento de transações distribuídas, que mencionarei a seguir.

Corte de pico:

Pegue o pico que escrevi na última edição (implicando que novos alunos assistam à minha última edição), seu tráfego normalmente é muito baixo, mas você deseja fazer a atividade de pico quando o tráfego chegar loucamente às 00:00, seu servidor Redis, Os respectivos recursos de resistência do MySQL não são os mesmos. Você deve ter problemas para receber todo o tráfego diretamente.

O que fazer então?

Simples, coloque a solicitação na fila e, quanto a quantas solicitações são consumidas por segundo, depende da capacidade de processamento do seu servidor. Se você pode lidar com 5000QPS, pode consumir muito. Pode ser um pouco mais lento do que o normal, mas não irá parar o servidor. Quando o pico de tráfego diminuir, seu serviço será menos estressante.

Veja o Double Eleven de Ali às 12:00, com tanto tráfego inundado instantaneamente. Ele às vezes diminui a velocidade, mas as pessoas não desligam, ou rebaixado para dar a você uma página de lembrete amigável, e quando o pico acabar, haverá outro. Cara legal.
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"
Para aumentar o tráfego de um serviço para este gráfico

Ouvi dizer que tem tantos alimentos picantes, mas como eles são bons? Aí eu pergunto se há algum problema em usar a fila de mensagens?

Ei, todos que leram os artigos que escrevi antes sabem disso, o que costumo dizer é que a tecnologia é uma faca de dois gumes!

Isso mesmo, o entrevistador, eu uso ele porque ele traz muitos benefícios para a gente, mas depois de usar, os problemas vão surgindo.

O mesmo homem caloroso, também apresento suas principais deficiências em três pontos:

Complexidade do sistema

Originalmente um sistema bastante simples, posso escrever o código casualmente, mas agora que você conecta um middleware do nada, devo considerar mantê-lo e devo considerar vários problemas durante o uso, como a duplicação de mensagens? Consumo, perda de mensagens, consumo sequencial de mensagens, etc., enfim, depois de usá-los, será problemático.

Deixe-me interromper. Você pode apresentar os problemas acima (consumo repetitivo, perda de mensagem, consumo sequencial) separadamente e como resolvê-los?

Não! Eu disse o que Ao Bing escreveu no próximo capítulo?

Na verdade, não quero escrever aqui porque não sou um cara caloroso. Pensei nessas três perguntas. São todas as questões-chave do MQ. Se você retirar uma delas, será um artigo. O comprimento é muito longo. Vou apresentá-las uma a uma no próximo capítulo. Novamente.

A consistência dos dados

Na verdade, este é um problema existente nos próprios serviços distribuídos, não apenas um problema de fila de mensagens, mas é dito aqui porque o problema de usar uma fila de mensagens será mais sério.

Como eu disse no início, o serviço que você colocou garante que sua lógica seja processada com sucesso, e você envia uma mensagem com sucesso, mas com tantos sistemas como o sistema de cupons, o sistema de pontos, etc., você se importa se eles tiverem sucesso ou falharem?

Eu disse que é bom ter certeza de que seus dados de negócios estão corretos. Na verdade, é bastante irresponsável. É como um lixo sem um padrão, então seu caminho ficará cada vez mais estreito.
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Todos os serviços são bem-sucedidos para serem considerados um sucesso neste momento, como podemos garantir a consistência dos dados?

Transações distribuídas: faça pedidos, cupons e pontos. . . Todos eles são colocados na mesma transação. Para ter sucesso e falhar juntos, eles devem falhar juntos.
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Dica: As transações distribuídas são muito comuns em empresas de Internet, e não as apresentarei muito aqui, mas falarei sobre elas mais tarde.

Disponibilidade

Não há nada de errado com o sistema em si. De repente, você insere um middleware e o deixa lá. E se ele travar? Eu fiz um pedido MQ e os cupons não são deduzidos e os pontos não são reduzidos. Isso não é algo que pode ser feito matando um programador. Parece uma morte.

Quanto a como garantir alta disponibilidade, essa frase não será discutida aqui, vou escrevê-la mais tarde, como o Redis.

Não se preocupe, Ao Bing, não sou um canalha. Com certeza serei responsável por você. gostar!

Não sei dizer, você tem algo, então deixe-me perguntar, como você escolhe a tecnologia?

Atualmente, o middleware de fila de mensagens principal no mercado inclui principalmente Kafka, ActiveMQ, RabbitMQ, RocketMQ, etc.

Mas o que eu quero dizer sobre Ao Bing é que ActiveMQ e RabbitMQ basicamente desapareceram nas principais empresas de Internet por causa do rendimento e da atividade da comunidade do GitHub. Haverá empresas com volumes de negócios médios. Sim, mas cada vez mais empresas preferem middleware de mensagens como o RocketMQ.

Kafka e RocketMQ sempre foram brilhantes em suas respectivas áreas de especialização, mas ao escrever este artigo, perguntei a amigos da Ant Financial, Bytedance e Meituan. Parece que cada um usa um pouco diferente. Devem estar todos no meio um do outro. O software pode ser modificado ou desenvolvido pelo próprio, a maioria dos quais não é de código aberto.

Assim como nossa empresa é um middleware de fila de mensagens autodesenvolvido, baseado nas vantagens do Kafka e do RocketMQ, o rendimento, a confiabilidade e a oportunidade são impressionantes.

Vamos voltar ao tópico, aqui eu uso o gráfico de comparação que encontrei online para que todos vejam onde está a lacuna:
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Você pode ver a lacuna imediatamente. Em termos de taxa de transferência, ActiveMQ e RabbitMQ, que eram mais ativos no início, basicamente não são rivais dos dois últimos. Nesta era de big data, a taxa de transferência é muito importante.

Por exemplo, há uma explosão repentina de notícias super quentes. Seus usuários registrados no APP chegam a centenas de milhões. Você tem que encontrar uma maneira de enviar todas as explosões para todos na primeira vez. Você não tem um middleware de fila de mensagens de alta capacidade. Empurrar?

Além disso, esses usuários inundaram para assistir suas notícias e geraram uma série de tráfego incidental. Como você lida com esses dados? Em muitos cenários, sair da fila de mensagens é basicamente insustentável.

Em termos de métodos de implantação, os dois primeiros também não são tão bons quanto os dois últimos irmãos com arquitetura distribuída natural.Ambos são arquiteturas distribuídas altamente disponíveis, e os dados de várias cópias de dados também podem atingir perda zero.

Vamos falar sobre RabbitMQ. O middleware é realmente bom, mas a linguagem de desenvolvimento dessa coisa é realmente erlang. Eu ouso dizer que a maioria dos engenheiros definitivamente não aprenderá deliberadamente uma linguagem para um middleware. Os custos de desenvolvimento e manutenção estão além da sua imaginação. , Demora muito para investigar um problema.

Quanto ao RocketMQ (código aberto por Ali), a atividade do git não é ruim. Basicamente, você empurrou seu próprio bug e confirmou que há um problema. O chefe Ali tentará responder e consertá-lo com você. Eu pessoalmente recomendo isso. Sua parte de design de arquitetura é verdadeira com um framework RPC que também é open source de Ali. É muito parecido (Dubbo) .Talvez seja pelo mesmo motivo.

Dica: Dubbo espera que eu escreva RPC, vou apresentá-lo em detalhes.

Kafka, coloquei no final, você também deve saber que este é um irmão mais velho no final. O campo de big data, a coleta de registros da empresa, o cálculo em tempo real e outros cenários são inseparáveis ​​dele. Ele é basicamente considerado um nível mundial. A fila de mensagens é a referência.

Os itens acima são apenas algumas de minhas opiniões pessoais. A seleção real ainda precisa ser estudada em profundidade. Caso contrário, sua empresa terá um UV 1000 por dia. Diga-me que você vai usar Kafka. Só posso dizer que você pode obter o suficiente.

Lembre-se de que não existe a melhor tecnologia, apenas a mais adequada. Não a use apenas para uso.

Fim da entrevista

Bom, o cara não é ruim, a análise está bem feita, então você lembra de falar sobre a alta disponibilidade da fila de mensagens na próxima edição, consumo repetido, perda de mensagens, sequência de mensagens, transações distribuídas etc.?

Hmm, bom entrevistador, mas não tenho certeza se vou conseguir terminar tudo de uma vez. Afinal, Ao Bing ainda não começou a escrever, e os leitores podem estar se prostituindo à toa, então a motivação pode não ser suficiente.

Hmm, isso é um problema, mas as pessoas que estão assistindo certamente lhe darão um sinal de positivo!

Acho que sim.

Resumindo

Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Apresentarei primeiro o básico sobre filas de mensagens. As filas de mensagens são basicamente as mesmas do Redis que escrevi na entrevista.

A ideia da entrevista ainda é a mesma, você tem que saber por que e por que quer saber por quê. É saber por que é usada, quais os benefícios que ela traz e quais as armadilhas que existem.

O entrevistador não gosta daquele que só sabe usar. E se houver algum problema com a antena que você só usa? Você está adorando Buda perto de você?
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Mais tarde, escreverei sobre muitas situações complicadas no processo de desenvolvimento real. Na entrevista, são basicamente questões obrigatórias do exame. Espero que você pegue um pequeno livro e o anote. Não o memorize, mas entenda. Tenho um bom trabalho no grupo de intercâmbio de talentos. Pergunte-me, como memorizei esses pontos de conhecimento?
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Tem certeza que não me provocou? Você está de volta, passou na entrevista, o que você faz quando desenvolve e escreve código? Ainda está memorizando o código? Não provoque irmão, a compreensão é a coisa mais importante.

Além disso, os entrevistadores com experiência real em desenvolvimento geralmente saberão quando você perguntar. Se houver algum buraco, ele definitivamente saberá melhor do que você. Se sim, não responderão honestamente.

Lembre-se de que você tem poemas e livros, aprendemos juntos e fazemos progressos juntos.

obrigado

O artigo anterior escreveu que muitas pessoas me adicionaram, e então uma pessoa disse que foi recomendado pelo líder do Ant Financial. De repente, percebi que o público do meu artigo parecia estar se expandindo gradualmente. Depois disso, os pontos menos rigorosos devem ser eliminados.

Posteriormente, meus artigos serão frequentemente revisados ​​por pequenos parceiros de grandes empresas e espero me ajudar a supervisionar melhor meus artigos.

Desta vez, Payne, uma empresa de comércio eletrônico experiente em Ali, me ajudou a revisar o artigo. Obrigado!
Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Elogios diários

Muito bem, pessoal, o texto acima é todo o conteúdo deste artigo. As pessoas que podem ver aqui são todos talentos.

Vou atualizar vários artigos relacionados à série "Pendurando o Entrevistador" e pilhas comuns de tecnologia da Internet todas as semanas. Sou muito grato aos talentos por ver isso. Se este artigo for bem escrito, acho que tenho algo a ver com "Ao Bing" Se gostou, por favor goste, por favor preste atenção e por favor compartilhe é realmente útil para mim! ! !

Não é fácil criar. Seu apoio e reconhecimento é a maior motivação para minha criação. Até o próximo artigo!

Ao Bing | Artigo [Original] [Entre em contato comigo para reimpressão] Se houver algum erro neste blog, por favor, critique e aconselhe, fico muito grato!

A série "Hanging the Interviewer" é continuamente atualizada todas as semanas. Você pode acompanhar minha conta oficial "JavaFamily" pela primeira vez para ler e atualizar (a conta oficial é uma ou duas anteriores ao blog). Este artigo foi incluído no GitHub e tem uma grande linha Mapa mental do site de entrevista da fábrica, seja bem-vindo ao Star e aperfeiçoe-o, há também minhas informações de contato pessoal, você pode entrar em contato comigo diretamente se tiver alguma dúvida, há também um grupo de intercâmbio de talentos, temos algo juntos.

Princípios básicos da fila de mensagens da série "Hanging the Interviewer"

Acho que você gosta

Origin blog.51cto.com/14689292/2546058
Recomendado
Clasificación