BT

Análise de alto desempenho em ambientes IoT

| por Mahish Singh Seguir 0 Seguidores , Mayra Michels Seguir 1 Seguidores em 19 out 2017. Tempo estimado de leitura: 3 minutos |

Manish Singh é CTO da empresa MityLytics Inc, empresa fundada em julho de 2015, que desenvolve software para o gerenciamento de desempenho contínuo de aplicativos distribuídos em nuvem e localmente. Singh e suas equipes desenvolvem produtos para fornecedores de infra-estrutura e conduziram esses produtos desde o início até sua implementação em diversas empresas, incluindo GoGrid, Netscaler, Redback Networks / Ericsson, Ascend/ Lucent.

Na palestra, Singh explica como usar metodologias durante o projeto, desenvolvimento, implantação e operação para entrega de plataformas de análise em tempo real que oferecem SLAs (acordo de nível de serviço). Para aplicações IoT são necessários alguns requisitos básicos como:

  1. Tempo Real: para certificação de certas garantias e baixo tempo de resposta.
  2. Baixa latência: garante o tempo de resposta seja baixo.
  3. Alta credibilidade: o sistema deve ser resiliente.
  4. Alta disponibilidade: o sistema deve ser sempre responsivo. Quando um componente cair, outro componente terá que responder às requisições.

Além dessas garantias é necessário saber com qual plataforma trabalhar, e qual a melhor para sua aplicação. Dentre os tipos de plataforma Singh destaca as seguintes: Nuvem privada, Nuvem publica, Localmente, Nuvem híbrida, Nuvem Bare-metal e Plataformas.

Após decidir qual a melhor plataforma para o seu produto, é necessário verificar os provedores de gerenciamento de serviços, ou seja, entender um pouco mais sobre elas, como fatores a serem levados em consideração: Trade offs, Custo, Gerenciamento, Controle, Escala e Escala dinâmica.

Fonte: InfoQ

A imagem acima mostra o ciclo de vida para a ánalise. Os dados apresentam-se de diversas fontes, e precisam ser analisados em tempo real, armazenados para então chegar a um resultado que possa ser apresentado ao usuário. Para realizar essa análise é necessário realizar perguntas importantes sobre o seu sistema:

  • Quais as garantias que ele oferece?
  • Quais as diferentes componentes?
  • Onde eles estão?
  • Quais os tipos de limitações durante a performance?

A equipe de Singh realizou testes em cima de dois tipos de servidores:

O servidor tipo 1 foi escolhido para rodar o Apache Kafka, e o tipo 2 rodou Apache Spark. As medições foram realizadas de forma que pudéssemos analisar a performance dos sistemas. Para analisar essa performance foram utilizados benchmarks open source. Os dados são categorizados em diferentes streams, e para esse exemplo foram produzidas mensagens pelo Kafka e consumidas pelo Spark.

Inicialmente foram produzidos 100k mensagens por segundo, e cada mensagem possuindo 200 bytes. Por mais que sua aplicação não exija um processamento tão rápido de milissegundos, pode ser que meio segundo seja muito tempo, e isso deve ser levado em consideração ao decidir quais componentes são importantes para o seu sistema. Outras questões a serem consideradas dizem respeito à necessidade das mensagens que chegam serem persistentes. Todos esses fatores são uma base de como medir a performance de injeção no streaming e qual hardware escolher.

Para consumir os dados produzidos foi utilizado o Spark. ele foi realizado um benchmark e os resultados são apresentados na imagem abaixo:

Algumas ferramentas que podem ser utilizadas e ajudam na performance do sistema são:

  • Hadoop - maps, reduces, shuffles.
  • Kafka - message rate, partition, replication.
  • Spark - RDD, list operations.
  • Hive - maps, reduces.
  • Query - query latency, queries/sec.
  • Cassandra - gossip, read/write.

Realizar um benchmark e este produzir resultados satisfatórios não quer dizer que o mesmo resultado ocorrerá em sua aplicação. É necessário verificar as características desejáveis de sua aplicação e então buscar a performance que deseja, verificando o que cabe melhor a ela. Isso deve ser feito de forma contínua, pois os objetivos mudam com o tempo, mais dados surgem, os dados mudam, e com isso você precisa planejar para esses diferentes cenários.

A metodologia que Singh utiliza é rodar benchmarks isolados no cluster, e após isso rodar os benchmarks entre si, pois as diferentes ferramentas podem estar concorrendo para utilizar o mesmo recurso e isso dar conflito em sua aplicação. Por fim, deve ser comparado o desempenho nos 2 casos para ver se os clusters devem ser isolados ou podem estar no mesmo cluster e entender o custo/desempenho.

Você pode conferir a apresentação completa realizada por Manish Sinh no InfoQ.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT