AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 42256
Accepted
JNK
JNK
Asked: 2013-05-16 04:58:20 +0800 CST2013-05-16 04:58:20 +0800 CST 2013-05-16 04:58:20 +0800 CST

Recomendações sobre como organizar Filas no Service Broker

  • 772

Eu tenho um aplicativo de agente de serviços que atualmente possui 5 ou 6 filas em dois servidores.

O fluxo de trabalho geral é:

Servidor A

  • O usuário preenche algumas tabelas
  • O usuário dispara o procedimento armazenado que coloca uma mensagem em uma fila de cabeçalho indicando que há trabalho a ser feito
  • O Broker lê desta fila de cabeçalho e cria um número potencialmente grande de mensagens para enviar ao Servidor B

Servidor B

  • Todas as mensagens vão para 1 fila
  • Nesta fila, a mensagem é examinada e desagregada, o payload é executado e uma resposta é coletada de outro conjunto de procs/tabelas com as quais interagimos
  • A mensagem de resposta é criada e enviada de volta ao Servidor A

Servidor A

  • As mensagens de resposta vão para uma fila especial e são usadas para atualizar as tabelas que o usuário preencheu no topo
  • As mensagens do diálogo final são lidas da fila do iniciador e usadas para atualizar outra tabela que rastreia o progresso de um registro de cabeçalho (ou seja, 50 de 100 mensagens processadas)
  • Quando detectamos que o registro do cabeçalho foi totalmente processado, uma nova mensagem é enviada para outra fila que envia um e-mail de notificação

Recebi uma recomendação para consolidar algumas dessas filas no Servidor A e não tenho certeza de qual é a melhor prática para isso. Duas das filas terão um volume relativamente alto de processamento de mensagens e a fila de e-mail será bem lenta.

Fizemos (eu acho) um bom trabalho de gerenciamento de tipos de mensagens, então teoricamente poderíamos colocar tudo em uma fila e o aplicativo ainda funcionaria.

Existe uma prática recomendada sobre quando manter filas separadas e quando consolidar em um cenário como este?

sql-server sql-server-2008-r2
  • 1 1 respostas
  • 2200 Views

1 respostas

  • Voted
  1. Best Answer
    Remus Rusanu
    2013-05-16T06:16:29+08:002013-05-16T06:16:29+08:00

    Esta é uma questão em aberto, sem escolha clara. YMMV então você tem que testar. Aqui está a minha opinião:

    Ter uma fila para lidar com tudo é uma boa escolha se você quiser controlar o número de tarefas ativadas, pois não há max_queue_readers globais. Fora isso, não vejo muitas vantagens. Pode-se argumentar que um único proc ativado é mais fácil de manter, mas acho que você deve usar algum tipo de geração de modelo/código ao criar o processo ativado por SSB, já que normalmente muito é código padronizado e pouco é específico para a lógica de negócios do serviço.

    No entanto, posso ver vários problemas em potencial com uma única fila, e são todos os tipos de problemas que se manifestam apenas quando as coisas já estão indo mal (ou seja, sob estresse/carga):

    • latência e serialização de processamento. Com apenas uma fila é possível estabilizar os max_queue_readers no máximo e fazer com que as mensagens que requerem pouco processamento fiquem na fila aguardando sua vez de serem coletadas. Filas separadas permitem que os serviços de baixa latência esgotem suas filas rapidamente, enquanto as filas de alta carga se agitam em seu próprio ritmo (mais lento).
    • um pico de mensagens para qualquer serviço afeta todos os serviços. O mesmo que acima, mas para picos. Um despejo de um grande número de mensagens (por exemplo, algum manual 'oop, precisamos reprocessar esses itens de 1 milhão') fará com que todos os outros serviços na mesma fila esperem até que o pico seja drenado antes de obter acesso às suas mensagens (é um pouco mais complexo devido ao bloqueio do grupo de conversação, mas o processamento final é FIFO).
    • visitas evitáveis ​​à terra feia das grandes filas . Se ocorrerem problemas de fila grande em sua RAM/IO/CPU/código de ativação em N mensagens, uma fila para todos os serviços atingirá N mais rápido/com mais frequência do que uma fila por serviço.

    Em geral, minha recomendação é ter uma fila para cada serviço.

    • 8

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve