um lançamento significativo do sistema de processamento de eventos distribuídos , destacando-se pela transição para uma nova arquitetura implementada na linguagem Java, em vez da linguagem Clojure anteriormente utilizada.
O projeto permite a organização de processamento garantido de diversos eventos em tempo real. Por exemplo, o Storm pode ser utilizado para analisar fluxos de dados em tempo real, executar tarefas de aprendizado de máquina, organizar cálculos contínuos, implementar RPC, ETL, etc. O sistema suporta a criação de clusters, configuração de alta disponibilidade, modo de processamento garantido de dados e possui um desempenho elevado, suficiente para processar mais de um milhão de solicitações por segundo em um único nó do cluster.
Suporta integração com diversos sistemas de processamento de filas e tecnologias de bancos de dados. A arquitetura do Storm prevê a recepção e processamento de fluxos de dados não estruturados e constantemente atualizados, utilizando manipuladores complexos arbitrários com a possibilidade de particionamento entre diferentes estágios de computação. O projeto foi transferido para a comunidade Apache após a aquisição da BackType pelo Twitter, que originalmente desenvolveu o framework. Na prática, o Storm foi utilizado na BackType para analisar a reflexão de eventos em microblogs, por meio da correspondência em tempo real de novos tweets e os links utilizados neles (por exemplo, realizava-se a avaliação de como links externos ou anúncios publicados no Twitter eram retransmitidos por outros participantes).
A funcionalidade do Storm é comparada à plataforma Hadoop, sendo que a principal diferença é que os dados não estão armazenados em um repositório, mas chegam de fora e são processados em tempo real. No Storm, não há uma camada embutida para organização de armazenamento, e a consulta analítica começa a ser aplicada aos dados recebidos até que seja cancelada (enquanto no Hadoop são utilizados trabalhos de MapReduce que consomem tempo finito, no Storm aplica-se a ideia de ‘topologias’ que são continuamente executadas). A execução dos manipuladores pode ser distribuída em vários servidores — o Storm automaticamente paraleliza o trabalho com fluxos em diferentes nós do cluster.
Inicialmente, o sistema foi escrito na linguagem Clojure e é executado dentro da máquina virtual JVM. No Apache, foi lançada uma iniciativa para portar o Storm para um novo núcleo escrito em Java, cujos resultados foram apresentados na versão Apache Storm 2.0. Todos os componentes base da plataforma foram reescritos em Java. O suporte para escrever manipuladores em Clojure foi mantido, mas agora é oferecido na forma de bindings. Para rodar o Storm 2.0.0, é necessário ter o Java 8. O modelo de processamento multithread foi totalmente reestruturado, permitindo um aumento significativo de desempenho (para algumas topologias, as latências foram reduzidas em 50-80%).
Na nova versão, também foi introduzido um novo API tipado de Streams, que permite definir manipuladores utilizando operações no estilo da programação funcional. A nova API é implementada sobre a API base padrão e suporta a fusão automática de operações para otimizar seu processamento. Na API Windowing, para operações de janelamento, foi adicionado suporte para salvar e restaurar o estado no backend.
No planejador de execução de manipuladores, foi adicionada a capacidade de contabilizar recursos adicionais na tomada de decisões, não se limitando
à CPU e memória, mas incluindo parâmetros de rede e GPU. Foram feitas inúmeras melhorias para garantir a integração com a plataforma . O sistema de controle de acesso foi expandido, permitindo a criação de grupos de administradores e delegação de tokens. Melhorias relacionadas ao suporte a SQL e métricas foram adicionadas. No painel de administração, novos comandos para depurar o estado do cluster foram implementados.
Áreas de aplicação do Storm:
- Processamento de streams de novos dados ou atualizações de BD em tempo real;
- Cálculos contínuos: O Storm pode executar consultas contínuas e processar streams contínuos, enviando os resultados do processamento ao cliente em tempo real.
- Chamada de Procedimento Remoto Distribuído (RPC): O Storm pode ser utilizado para garantir a paralelização da execução de requisições que demandam muitos recursos. Uma tarefa ("topologia") no Storm representa uma função distribuída entre nós, que aguarda a chegada de mensagens a serem processadas. Após receber uma mensagem, a função a processa em um contexto local e retorna o resultado. Um exemplo de utilização de RPC distribuído pode ser o processamento paralelo de consultas de pesquisa ou a execução de operações sobre um grande conjunto de conjuntos.
Características do Storm:
- Modelo de programação simples, que simplifica significativamente o processamento de dados em tempo real;
- Suporte a quaisquer linguagens de programação. Existem módulos para as linguagens Java, Ruby e Python; a adaptação para outras linguagens não é difícil, graças a um protocolo de comunicação muito simples, cuja implementação requer cerca de 100 linhas de código;
- Tolerância a Falhas: Para executar uma tarefa de processamento de dados, é necessário criar um arquivo jar com o código. O Storm distribuirá automaticamente este arquivo jar entre os nós do cluster, conectará os manipuladores relacionados e organizará a monitoração. Ao finalizar a tarefa, o código será automaticamente desconectado em todos os nós;
- Escalabilidade Horizontal. Todos os cálculos são realizados em modo paralelo; com o aumento da carga, basta conectar novos nós ao cluster;
- Confiabilidade. O Storm garante que cada mensagem recebida será completamente processada pelo menos uma vez. A mensagem será processada uma única vez se não houver erros durante a passagem de todos os manipuladores; se ocorrerem problemas, as tentativas de processamento malsucedidas serão reexaminadas.
- Rapidez. O código do Storm foi escrito com foco em alta performance e utiliza para a troca rápida de mensagens um sistema .
Fonte: opennet.ru
