Necessidade de processar 2 milhões de 100k mensagens por segundo e encaminhá-las para um determinado evento, delegado ou delegado multicast

5

Eu preciso processar 2 milhões de mensagens por segundo (talvez em uma configuração de scale out) e rotear cada mensagem para um N delegado ou delegado multicast.

Pergunta

Como devo estruturar meu aplicativo em C # para que eu possa alcançar o melhor desempenho ao receber a mensagem e encaminhá-la para o  delegado correto?

Detalhes adicionais

Cada mensagem de entrada tem as seguintes propriedades no formato de uma matriz JSON:

  • Cliente
  • Categoria
  • TopicID
  • DateTime
  • Dados []

Cada mensagem será processada por uma função delagate que esteja interessada em uma ou mais dessas propriedades.

Exemplos simples de processamento de delegado necessários:

  • Uma função de contagem de clientes pode contar a quantidade de mensagens por cliente,
  • Um contador de categoria pode contar a quantidade de mensagens que respondem
  • Um contador de clientes contará mensagens exclusivas para esse cliente.
por random65537 09.05.2012 / 17:45
fonte

1 resposta

5

200Gb de dados por segundo?

Para fazer isso você não vai precisar de muita ajuda com o C #, todos os aplicativos de computação de alto desempenho são escritos em C / C ++, então, para começar, você deve ir nessa direção simplesmente para alavancar sua experiência. , bibliotecas e frameworks.

Dito isso, muito trabalho de telecomunicações é feito usando linguagens funcionais, e elas fornecem fluxos de entrada de magnitude semelhante à que você espera, por isso experimente o Haskel também.

Em qualquer caso, sua primeira tarefa é dividir esse fluxo de entrada em vários servidores e, em seguida, passá-los para mais servidores para processamento. Nesses casos, você não precisa de delegados, precisa de uma arquitetura completa de passagem de mensagens que seja sem estado e eficiente na memória. Tente OpenMPI para algumas dicas.

    
por 09.05.2012 / 18:33
fonte