[quote=raf4ever][quote=saoj]
Traballho com isso e gostaria de fazer contato com outras pessoas com experiência nessa área. Algumas perguntas para facilitar:
-
Qual a solução de queue que vc utiliza e o que acha dela? (ZeroMQ, ActiveMQ, RabbitMQ, Proprietário, etc.)
-
Qual o tipo de sistema que vc trabalhou com mensagens assíncronas? (Financeiro, Hedge Fund, Bolsas de Valores, etc.)
[/quote]
Rapaz,tai um negócio que eu sempre tive vontade de trabalhar mas nunca tive a chance…conte um pouco mais da experiencia…[/quote]
Rafael, dá para escrever um livro sobre isso, então vou tentar resumir tudo em algumas frases.
Sistema distribuído = várias máquinas conversando entre si. Vários sub-sistemas conversando entre si.
Como essa comunicação pode se dar?
Comunicação Síncrono => RPC, RMI, HTTP, Web Services, blah. Basicamente vc faz uma requisição para um outro sub-sistema e recebe uma resposta imediatamente. Problema => ponto-a-ponto. Como vc faz se quiser enviar uma mensagem para o sistema inteiro? O que acontece se o outro sistema não responde?
Comunicação Assíncrona => MQ (Messaging Queue). Basicamente um queue central (middleware) recebe mensagens e redistribui para quem estiver interessado num esquema publish-subscribe. Se feito direito, esse modelo promove desacoplamente e performance.
Claro que isso acima só se justifica para sistemas extramemente parrudos num ambiente realmente distribuído. Não faz qualquer sentido usar algo assim no sistema da sua micro-empresa ou no seu website, por isso que pouca gente vai precisar mexer com isso.
Num sistema onde performance é fundamental (banco, bolsa, financeira, corretora, fábrica, correios, cia aérea, <complete aqui com a sua experiência>, etc) vc só consegue performance com desacoplamento via mensagens assíncronas, ou seja: ao invés de um só sistema fazer tudo (e são muitas coisas!), vc compartilha o que tem que ser feito entre vários sistemas que se comunicam entre si. Com desacoplamento vc tb ganha alta-disponibilidade, failover e essas coisas, ou seja, um sub-sistema pode morrer e ser restartado sem comprometer o sistema inteiro. 