Provocação Konker no 1º hackday FIESP 2016
-
Upload
alexandre-cardoso -
Category
Devices & Hardware
-
view
57 -
download
0
Transcript of Provocação Konker no 1º hackday FIESP 2016
Engenharia das CoisasIoT onde hardware não é mais um desafio
Alexandre Cardoso1º Hackday FIESP – 16/Ago/2016
Quem sou eu?• Líder em Arquitetura de Software
• Bacharel em Ciências da Computação / Pós-graduação em Big Data e Data Science
• Construindo software há 16 anos
• Desenvolvedor / Consultor / Líder técnico
• Web, mobile, Big Data, Internet das Coisas
• Java, Scala, Python, Ruby, Javascript
Agenda
1.1. O que é IoT – Internet das Coisas?1.2. Evolução da tecnologia1.3. Hardware mais fácil e mais barato1.5. Conectividade e transmissão de dados1.6. Protocolos e modelos de comunicação1.7. A “nuvem” e a “névoa” – Descentralizar a computação1.8. Considerações finais
• “É a rede de objetos físicos dotados de tecnologia embarcada para comunicar e sentir ou interagir com si próprios ou o ambiente externo.” (Gartner)(1)
• “É o conceito sobre objetos do cotidiano – de máquinas industriais à wearables – que utilizem sensores e tecnologia embarcada para coletar dados e tomar ações sobre estes dados através de uma rede” (SAS)(2)
O que é IoT - “Internet das Coisas”?
(1) http://www.gartner.com/it-glossary/internet-of-things/(2) http://www.sas.com/pt_br/insights/big-data/internet-das-coisas.html
O que podemos chamar de “coisa”?
“Qualquer coisa, antes desconectada, mas agora capaz de transmitir e receber dados e/ou comandos através de uma rede”
IoT vs M2M – Machine to Machine
• Dispositivos conectados “by design”• Ponto a ponto• Intranet ou Internet• Não dependem diretamente de
intervenção humana
• Automação industrial• Formula 1• Tráfego aéreo
Na Internet, primeiro vieram as pessoas
Fonte: http://dazeinfo.com/2014/11/19/growth-internet-telecom-users-india-q2-2014-disappoints/
Agora é a vez das “coisas”
Pra chegar lá, o que aconteceu?• Desenvolvemos tecnologia:
• IPv6• Cloud computing• Tecnologia embarcada
• Microcontroladores• SoC – System on a Chip• Sensores• Dispositivos de baixo
consumo• Miniaturização
• Protocolos
Está mais fácil prototipar
• Hardware mais barato e acessível
• Linguagens e ambientes para desenvolvimento
• Open-source
• Cada vez mais didático
Está mais fácil conectar
• Conectividade de baixo consumo• Bluetooth Low Energy• Zigbee• 6LowPAN• Z-Wave (RF)
• Conectividade como “commodity”• Custo cada vez menor• Fácil de integrar com o cotidiano
• Wi-fi doméstico• Wi-fi corporativo• Bluetooth veicular
WiFiESP8266 v12E
GSMArduino Uno + Shield GSM
SoC (System on a Chip)
Raspberry PI 3 ou Zero
Se tudo é “fácil”, qual o desafio??• Distribuir
• Ampliar presença
• Escalar• Adicionar mais capacidade
sem perder desempenho/eficiência
Arquiteturas distribuídas• Principais elementos
• Processamento• Bare metal• Virtualização• Cloud computing
• Elasticidade x Granularidade
• Armazenamento (guardar e recuperar)• Dados em todo o lugar• Tolerância ao particionamento
• NoSQL, Hadoop, etc
• Transmissão
Arquiteturas distribuídas
“O recurso mais escasso e menos confiável de uma arquitetura distribuída é, e sempre será, a rede de dados que interliga seus elementos”
Redes de dados em IoT
• Wired e wireless• IP-based ou não• Maior parte com foco em baixo
consumo de energia e baixo custo de implementação
• Todas oferecem níveis diferentes de latência e largura de banda
• Todas oferecem caminhos à Internet
O “vai e vem” na nuvem • Dados são transportados mediante
protocolos estabelecidos:• TCP / UDP
• Integração se dá em vários modelos:• Request - Response• Publish - Subscribe• Message queuing
• Dados são trocados mediante protocolos de aplicação• HTTP(s)• MQTT• CoAP• AMQP
TCP vs UDPTCP UDP
Tipo de conexão Orientado à conexão Orientado à troca de pacotes
Uso Confiabilidade antes de velocidade Velocidade antes de controle de integridade
Protocolos que utilizam
HTTP (S), FTP, SMTP, Telnet DNS, DHCP, TFTP, SNMP, RIP, VoIP
Ordenação Garante Não garante
Velocidade Mais lento que UDP Rápido, pois não há controle de erros
Confiabilidade Garantia de integridade e ordenação de todo os pacotes
Sem garantias (best effort)
Tamanho de cabeçalho
20-60 bytes 8 bytes
Overhead Pesado (criação de conexões, ack) Leve (QA é responsabilidade do app)
Controle de tráfego
Possui Não possui
Controle de erros Verificação e recuperação de erros Apenas verificação (descarte)
• Infraestrutura de IoT, normalmente, impõe restrições• Redes de banda estreita• Redes com latência moderada a alta• Uso de suprimento instável e finito de energia (baterias, painéis
solares, etc)
• Controle de erros e recuperação, em dispositivos embarcados, pode exigir tempo adicional para transmissão• Mais tempo -> Maior consumo -> Menor autonomia
• Fique atento aos detalhes, por muito tempo, ocultos e “transparentes”
TCP vs UDP
• Request -> Response• Troca de mensagens• Síncrono• Bom para comando-controle• Ponto a ponto• Tempo de resposta é sensível a:
• Latência e largura de banda• Tempo de processamento
Modelo de Integração
• Publish / Subscribe• Distribuição de mensagens• Assíncrono• Múltiplos pontos de interesse• Elemento adicional: Message broker• Bom para “empurrar”, não para “puxar”
Modelo de Integração
• Message queuing• Troca de mensagens• Assíncrono• Ponto a ponto• Elemento adicional: Message broker• Bom para comando-controle
Modelo de Integração
• HTTP/HTTPS• Request / response• Baseado em texto• Ponto a ponto• Seguro (via TLS/SSL)• Largamente utilizado• Escalabilidade e disponibilidade• Bom para comando-controle• REST• Transporte por TCP• Não desenhado para microdispositivos• Alto overhead
Protocolos de aplicação
• MQTT• Publish / subscribe• Binário• Seguro (via TLS)• Desenhado para microdispositivos• Otimizados para redes restritas
• Baixa largura• Alta latência
• Transporte via TCP• Last will• QoS (3 níveis, dependendo do broker)• Não é fácil escalar (depende do broker)
Protocolos de aplicação
• CoAP• Request / Response• Baseado em texto• Síncrono / Assíncrono• Seguro (via DTLS)• Desenhado para microdispositivos• Transporte via UDP• REST model (headers, content negotiation, etc)• QoS (confirmable / nonconfirmable)• Padrão ainda não “maduro”
Protocolos de aplicação
• AMQP• Message queuing• Binário• Assíncrono• Ponto a ponto ou distribuído (via bindings)• Foco em durabilidade e garantia de
entrega• Normalmente utilizado para escalar
processamento de mensagens no servidor• Várias implementações• Não muito utilizado para integrar
microdispositivos
Protocolos de aplicação
Muitas opções, alguns tradeoffs• Tecnologias e protocolos disponíveis
para agregar eficiência e segurança (entrega e violação) na transmissão
• Tecnologia disponível para embarcar processamento e sensoreamento em “coisas” do cotidiano
• A “nuvem” está aí pra guardar e processar os dados. CERTO??
Muitas opções, alguns tradeoffs
“Não é tão simples quanto parece”
Qual é a “real”?“Há uma INTERNET de distância entre a nuvem e seu dispositivo
mais frágil e remoto”
“O recurso mais escasso e menos confiável de uma arquitetura distribuída é, e sempre será, a rede de
dados que interliga seus elementos”
“Dispositivos são restritos, frágeis, feitos para falhar. Não confie a eles a guarda de dados”
Como lidar?• Fog/Edge Computing
• Computação descentralizada• Localização próxima da fonte do dado• Composto de “fog nodes”
• Dispositivo de baixo custo• Processar e armazenar pequenos
volumes de dados “em trânsito”• Controlar grupos de dispositivos,
mesmo na ausência temporária da nuvem
• Gateway / router / data noise cleaning
Fog Computing
Fog Computing• Fog node – Raspberry PI 3
• Baixo custo (~ USD40)• Pequeno (standard credit card size)• Recursos
• Wifi / Ethernet / Bluetooth 4.0 BLE• GPIO / USB / HDMI / Camera• Full Linux Distro
• 4 vCPU• Armazenamento expansível (até 32GB
em SD card)• Java / Python / Node.js / whatever
Pra encerrar
1. Internet das coisas não se faz apenas com hardware2. Lembre-se: Redes não são infalíveis (nunca serão)3. Toda solução de IoT deve conduzir aos “dados”. Desenhe o projeto
para garantir a sobrevida dos dados4. Toda integração flue melhor na abordagem certa. Escolha a sua5. A “névoa” veio pra ficar. Descentralizar para escalar e garantir
Obrigado!