SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
https://www.google.com/url?
sa=i&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWebAssembly&psig=AOvVaw01ph2uPKCm79kmbF
AW&ust=1594860562007000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCOCK-
dyEzuoCFQAAAAAdAAAAABAD
WebAssembly além da Web
Casos de uso em IoT
Alvaro Viebrantz
Google Developer Expert for IoT and Product Engineer at Leverege
aviebrantz.com
@alvaroviebrantz
MOTIVAÇÃO DESSA TALK
“CONSIGO RODAR
_INSIRA_SUA_LINGUAGEM_FAVORITA_
EM UM ARDUINO ?”
ATWOOD’S LAW
ATWOOD’S LAW
“ANY APPLICATION THAT CAN BE WRITTEN
IN JAVASCRIPT, WILL EVENTUALLY BE
WRITTEN IN JAVASCRIPT.”
ATENÇÃO
MUITAS COISAS
EXPERIMENTAIS A FRENTE
O que vamos ver hoje ?
O que é o
WebAssembly ?
Porque
faz sentido
em IoT
Demos
WebAssembly
O que é WebAssembly
Não, o Javascript não vai morrer
• Formato binário de código
• .wasm
• Existe um formato em texto .wat
• Código proximo ao Assembly
• Podemos comparar com Bytecodes
de outras VMs como a JVM
• Baixo nível
• Portável
• Rápido
• Menor uso de memória
Performance na Web
Muito tempo é usado no parse + compile
• WebAssembly
• Otimizado antes da execução
• Ao contrário de Javascript que otimiza a medida que é executado
Imagem do artigo - https://medium.com/trainingcenter/webassembly-a-jornada-o-que-%C3%A9-wasm-75e3f0f03124
Suporte ao WebAssembly
Os browsers abraçaram a especificação - 91.18% em Jul/2020
https://caniuse.com/#feat=wasm
Demo #1
WebAssembly Studio
WebAssembly por ai
Rode código feito em outras linguagens no Browser
• WASM por si não é uma linguagem
• É um target para outras linguagens
• Algumas linguagens que compilam para Wasm
• C/C++ ⭐ - Emscriptem
• Rust ⭐
• Assemblyscript ⭐ - Flavor de Typescript
• TinyGo - Flavor de Go
• Golang começou suporte também
• Pyodide - Python + Numpy stack
Coisas malucas feitas com WebAssembly
Tem uso em produção
• Figma
• Engine de manipulação de imagens
• www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/
• Autocad Web
• Engine de CAD portada de C++
• Demo no Google I/O 2018 - www.youtube.com/watch?v=D4fNcX0Q9gA
• Blazor - Framework Web .Net
• Vugu - Framework Frontend em Go
• Valerie - Framework Frontend em Rust
github.com/mbasso/awesome-wasm
Não só na Web!(que é o ponto dessa talk 😅)
WebAssembly everywhere
Outros casos de uso e também tem uso em produção
• Edge Impulse ⭐
• Roda modelos de ML em dispositivos IoT
• Fastly e Cloudflare
• Rodar código de forma segura em CDNs
• Blockchain/SmartContracts
• Projetos OSS
• Wasmer - Runtime WASM - Pode ser embutido em Go/Python/PHP/Ruby
• Wasmtime - Outro Runtime WASM Standalone
• Krustlet - WASM on Kubernetes
• Postgres-ext-wasm - github.com/wasmerio/postgres-ext-wasm
WebAssembly está crescendo
Muita coisa ainda em pesquisa
• WASI - WebAssembly System Interface
• Como trazer acesso a recursos como arquivos, rede, chamadas de
sistema em geral ?
• Como fazer isso mantendo a portabilidade e segurança ?
hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
e como chegamos em IoT ?
primeiro, o que é IoT ?
20
Por que está na moda hoje ?
Sensores, internet e processamento mais baratos
Dispositivos IoT
Bastante limitados em memoria, cpu e uso de bateria
• Apesar de contar, na maioria das vezes não estamos falando disso
• Celulares
• Roteadores/Gateways
• Raspberry Pi’s e afins
Dispositivos IoT
Bastante limitados em memoria, cpu e uso de bateria
• Dispositivos bem menores e mais baratos
• Lampadas, Sensores de porta, Fechaduras Smart, Termostatos
• Rastreadores em geral - GPS, rede celular, LoRa, etc
• Assistentes pessoais - Alexa/Google Assistant
• Na maioria das vezes, não tem sistema operacional nenhum
Dispositivos IoT
Bastante limitados em memoria, cpu e uso de bateria
CPU Memory Flash
Connectivi
ty
GPIO Arch
Power
Consumption
Price
ATMega
328p
16 Mhz 2 Kb 32 Kb None 24 AVR RISC 8 bit 40mA $1.7
STM32
“Blue Pill”
72 Mhz 20 Kb 64 kb None 32 ARM 32 bit 8mA $2.3
ESP 32
160 Mhz

Dual Core
512 Kb
Up to
16MiB
Wifi/Ble 36 XTensa 32 bit 200mA $3
Dispositivos IoT
Bastante limitados em memoria, cpu e uso de bateria
• Tem que se levar muito a serio questões de performance
• Uso de memoria e CPU
• Também influência em uso de bateria
• Segurança - o “S” de IoT
• Ainda assim conseguir evoluir o projeto
• Over the Air updates - OTA
• Maior parte do desenvolvimento embarcado é em C/C++
25
Mas peraí, não é só em C/C++ né ?
Existem varias outras formas por ai
• MicroPython
• TinyGo
• Lua
• Várias Engine Javascript
• Duktape
• Jerryscript
• MongooseOS
• Mais usados em prototipos
mas infelizmente não são
production ready
Mas aqui temos o link entre
IoT e WebAssembly
WebAssembly + IoT
Compartilham muitos principios
• Código otimizado
• Menor uso de memoria
• Rapidez e Performance
• Sandbox e segurança
E se pudemos usar qualquer linguagem
e ainda ter boa performance ?
Esforços para trazer WebAssembly a devices embarcados
Em 2017 isso começou, mas era bem ruim
• Em 2017 o WebAssembly estava já sendo bem suportado na web
• Hoje temos vários runtimes Wasm para embarcados
• Wasm3 - Blynk
• Wasm Micro Runtime - Intel/Redhat/Fastly/Mozilla - Bytecode
Alliance
• Zephyr RTOS - Linux Foundation
• Mas ainda não resolve 100% a questão da portabilidade
• Talvez alguma variante do WASI venha a resolver isso
WASI for IoT ?
WASI define coisas como acesso a arquivos, rede e syscalls
• WASI é o bastante para o mundo embarcado ?
• Requisitos mais específicos
• Acesso a pinos
• Interação com sensores
• “Network” - Bluetooth/WiFi/Zigbee/LoRa
• Isso é um grande desafio, mesmo usando a mesma stack, pode
ser completamente diferente dependendo do hardware
Demo #2
Rodando Wasm como linguagem principal
Rodando Wasm como linguagem principal
Programar em qualquer linguagem para ambiente embarcado
• Aplicação embarcado funciona quase que como um SO primitivo
• Inicia o código em Wasm
• Provê os “drivers” para acesso a rede e outros recursos
• Provê interface para OTA do código em Wasm
Rodando Wasm como linguagem principal
Programar em qualquer linguagem para ambiente embarcado
• O que foi feita na demo
• ESP32 como dispositivo embarcado
• TinyGo/Rust/AssemblyScript compilado para Wasm
• Código Wasm fazem acesso ao hardware e rede
• Conecta na rede Wifi
• Pisca Led
• https://github.com/alvarowolfx/wasm-arduino-wifi
Rust
AssemblyScript
TinyGo
Foi apresentado na WebAssembly Summit 2020
https://webassembly-summit.org/speakers/6/
Demo #3
Usando Wasm como um motor de regras
Usando Wasm como um motor de regras
Reaproveitar código base do embarcado
• Embarcado ainda é programado nativamente
• Provê uma interface que permite customização do seu funcionamento
• Consegue criar regras mais complexas do que apenas mudar
parâmetros ou passar novas configurações
• Imagine um usuário mais avançado podem descrever algumas regras
em código para atualizar o device, sem quebrar o código principal
• O mesmo código pode rodar no servidor usando runtimes Wasm
para server side
Usando Wasm como um motor de regras
Reaproveitar código base do embarcado
• O que foi feita na demo
• ESP32 escaneia dispositivos bluetooth
• A regra para filtrar os devices é definida via Wasm
• Embarcado busca nova versão do Wasm a cada boot para se
atualizar e pegar regras atuais
• https://github.com/alvarowolfx/wasm-ble-edge-filter
Regra de negocio em AssemblyScript
Um exemplo de como poderia ser customizado
REFERENCIAS
Referencias
Mais material de estudo
• https://github.com/AssemblyScript/assemblyscript
• https://github.com/wasmerio/postgres-ext-wasm
• https://github.com/wasmerio/vscode-wasm
• https://medium.com/trainingcenter/webassembly-a-jornada-o-que-%C3%A9-wasm-75e3f0f03124
• https://dev.to/emmanuelantony2000/valerie-rethinking-web-apps-in-rust-4cl3
• https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts
• https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/
• Autocad WASM - Demo no Google I/O 2018 - www.youtube.com/watch?v=D4fNcX0Q9gA
Obrigado!
aviebrantz.com
youtube.com/alvaroviebrantz
twitch.tv/alvaroviebrantz
Alvaro Viebrantz
Google Developer Expert for IoT and Product Engineer at Leverege
aviebrantz.com
@alvaroviebrantz

Weitere ähnliche Inhalte

Was ist angesagt?

Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google Cloud
Alvaro Viebrantz
 

Was ist angesagt? (20)

Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google Cloud
 
DevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaDevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na prática
 
Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
 
Iac & DevOps no Azure: Automatizando deployments
Iac & DevOps no Azure: Automatizando deploymentsIac & DevOps no Azure: Automatizando deployments
Iac & DevOps no Azure: Automatizando deployments
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWS
 
UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...
UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...
UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...
 
AWS SUMMIT São Paulo - DEV02 AWS e DevOps - Explore e aproveite o melhor dos ...
AWS SUMMIT São Paulo - DEV02 AWS e DevOps - Explore e aproveite o melhor dos ...AWS SUMMIT São Paulo - DEV02 AWS e DevOps - Explore e aproveite o melhor dos ...
AWS SUMMIT São Paulo - DEV02 AWS e DevOps - Explore e aproveite o melhor dos ...
 
Soluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseSoluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e Firebase
 
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
 
Webinar: Como obter valor comercial com Big Data
Webinar: Como obter valor comercial com Big DataWebinar: Como obter valor comercial com Big Data
Webinar: Como obter valor comercial com Big Data
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2
 
O que uma enterprise deveria fazer nos primeiros 90 dias
O que uma enterprise deveria fazer nos primeiros 90 diasO que uma enterprise deveria fazer nos primeiros 90 dias
O que uma enterprise deveria fazer nos primeiros 90 dias
 
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na PráticaAzure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWS
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Criando e conectando seu datacenter virtual
Criando e conectando seu datacenter virtualCriando e conectando seu datacenter virtual
Criando e conectando seu datacenter virtual
 
Arquitetura de Internet das Coisas usando Google Cloud
Arquitetura de Internet das Coisas usando Google CloudArquitetura de Internet das Coisas usando Google Cloud
Arquitetura de Internet das Coisas usando Google Cloud
 

Ähnlich wie WebAssembly além da Web - Casos de Uso em IoT

TDC SP 2015 - Criando aplicações ASP.NET no Mac
TDC SP 2015 - Criando aplicações ASP.NET no MacTDC SP 2015 - Criando aplicações ASP.NET no Mac
TDC SP 2015 - Criando aplicações ASP.NET no Mac
Andre Baltieri
 

Ähnlich wie WebAssembly além da Web - Casos de Uso em IoT (20)

AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps Modernas
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
Explorando o mundo serverless
Explorando o mundo serverlessExplorando o mundo serverless
Explorando o mundo serverless
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JS
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec Cafelândia
 
Application Servers e Ruby
Application Servers e RubyApplication Servers e Ruby
Application Servers e Ruby
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
TDC SP 2015 - Criando aplicações ASP.NET no Mac
TDC SP 2015 - Criando aplicações ASP.NET no MacTDC SP 2015 - Criando aplicações ASP.NET no Mac
TDC SP 2015 - Criando aplicações ASP.NET no Mac
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
 
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 

Mehr von GDGFoz

Dart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideDart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client Side
GDGFoz
 

Mehr von GDGFoz (20)

Apresentação GDG Foz 2023
Apresentação GDG Foz  2023Apresentação GDG Foz  2023
Apresentação GDG Foz 2023
 
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoDesenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
 
Introdução do DEVSECOPS
Introdução do DEVSECOPSIntrodução do DEVSECOPS
Introdução do DEVSECOPS
 
Aquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesAquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e Microservices
 
Robótica Sucational
Robótica SucationalRobótica Sucational
Robótica Sucational
 
A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile
 
Qualidade em Testes de Software
Qualidade em Testes de SoftwareQualidade em Testes de Software
Qualidade em Testes de Software
 
Dart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideDart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client Side
 
UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?
 
Dicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsDicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOps
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com Opensource
 
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
 
Desmistificando a programação funcional
Desmistificando a programação funcionalDesmistificando a programação funcional
Desmistificando a programação funcional
 
Microsserviços com Kotlin
Microsserviços com KotlinMicrosserviços com Kotlin
Microsserviços com Kotlin
 
Autenticação de dois fatores
Autenticação de dois fatores Autenticação de dois fatores
Autenticação de dois fatores
 
Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!
 
Hooks em React: o novo jeito de fazer componentes funcionais
Hooks em React: o novo jeito de fazer componentes funcionaisHooks em React: o novo jeito de fazer componentes funcionais
Hooks em React: o novo jeito de fazer componentes funcionais
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativo
 
Styled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleStyled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto Tauille
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

WebAssembly além da Web - Casos de Uso em IoT

  • 5. ATWOOD’S LAW “ANY APPLICATION THAT CAN BE WRITTEN IN JAVASCRIPT, WILL EVENTUALLY BE WRITTEN IN JAVASCRIPT.”
  • 7. O que vamos ver hoje ? O que é o WebAssembly ? Porque faz sentido em IoT Demos
  • 9. O que é WebAssembly Não, o Javascript não vai morrer • Formato binário de código • .wasm • Existe um formato em texto .wat • Código proximo ao Assembly • Podemos comparar com Bytecodes de outras VMs como a JVM • Baixo nível • Portável • Rápido • Menor uso de memória
  • 10. Performance na Web Muito tempo é usado no parse + compile • WebAssembly • Otimizado antes da execução • Ao contrário de Javascript que otimiza a medida que é executado Imagem do artigo - https://medium.com/trainingcenter/webassembly-a-jornada-o-que-%C3%A9-wasm-75e3f0f03124
  • 11. Suporte ao WebAssembly Os browsers abraçaram a especificação - 91.18% em Jul/2020 https://caniuse.com/#feat=wasm
  • 13. WebAssembly por ai Rode código feito em outras linguagens no Browser • WASM por si não é uma linguagem • É um target para outras linguagens • Algumas linguagens que compilam para Wasm • C/C++ ⭐ - Emscriptem • Rust ⭐ • Assemblyscript ⭐ - Flavor de Typescript • TinyGo - Flavor de Go • Golang começou suporte também • Pyodide - Python + Numpy stack
  • 14. Coisas malucas feitas com WebAssembly Tem uso em produção • Figma • Engine de manipulação de imagens • www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/ • Autocad Web • Engine de CAD portada de C++ • Demo no Google I/O 2018 - www.youtube.com/watch?v=D4fNcX0Q9gA • Blazor - Framework Web .Net • Vugu - Framework Frontend em Go • Valerie - Framework Frontend em Rust github.com/mbasso/awesome-wasm
  • 15. Não só na Web!(que é o ponto dessa talk 😅)
  • 16. WebAssembly everywhere Outros casos de uso e também tem uso em produção • Edge Impulse ⭐ • Roda modelos de ML em dispositivos IoT • Fastly e Cloudflare • Rodar código de forma segura em CDNs • Blockchain/SmartContracts • Projetos OSS • Wasmer - Runtime WASM - Pode ser embutido em Go/Python/PHP/Ruby • Wasmtime - Outro Runtime WASM Standalone • Krustlet - WASM on Kubernetes • Postgres-ext-wasm - github.com/wasmerio/postgres-ext-wasm
  • 17. WebAssembly está crescendo Muita coisa ainda em pesquisa • WASI - WebAssembly System Interface • Como trazer acesso a recursos como arquivos, rede, chamadas de sistema em geral ? • Como fazer isso mantendo a portabilidade e segurança ? hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
  • 18. e como chegamos em IoT ?
  • 19. primeiro, o que é IoT ?
  • 20. 20 Por que está na moda hoje ? Sensores, internet e processamento mais baratos
  • 21. Dispositivos IoT Bastante limitados em memoria, cpu e uso de bateria • Apesar de contar, na maioria das vezes não estamos falando disso • Celulares • Roteadores/Gateways • Raspberry Pi’s e afins
  • 22. Dispositivos IoT Bastante limitados em memoria, cpu e uso de bateria • Dispositivos bem menores e mais baratos • Lampadas, Sensores de porta, Fechaduras Smart, Termostatos • Rastreadores em geral - GPS, rede celular, LoRa, etc • Assistentes pessoais - Alexa/Google Assistant • Na maioria das vezes, não tem sistema operacional nenhum
  • 23. Dispositivos IoT Bastante limitados em memoria, cpu e uso de bateria CPU Memory Flash Connectivi ty GPIO Arch Power Consumption Price ATMega 328p 16 Mhz 2 Kb 32 Kb None 24 AVR RISC 8 bit 40mA $1.7 STM32 “Blue Pill” 72 Mhz 20 Kb 64 kb None 32 ARM 32 bit 8mA $2.3 ESP 32 160 Mhz
 Dual Core 512 Kb Up to 16MiB Wifi/Ble 36 XTensa 32 bit 200mA $3
  • 24. Dispositivos IoT Bastante limitados em memoria, cpu e uso de bateria • Tem que se levar muito a serio questões de performance • Uso de memoria e CPU • Também influência em uso de bateria • Segurança - o “S” de IoT • Ainda assim conseguir evoluir o projeto • Over the Air updates - OTA • Maior parte do desenvolvimento embarcado é em C/C++
  • 25. 25 Mas peraí, não é só em C/C++ né ? Existem varias outras formas por ai • MicroPython • TinyGo • Lua • Várias Engine Javascript • Duktape • Jerryscript • MongooseOS • Mais usados em prototipos
  • 26. mas infelizmente não são production ready
  • 27. Mas aqui temos o link entre IoT e WebAssembly
  • 28. WebAssembly + IoT Compartilham muitos principios • Código otimizado • Menor uso de memoria • Rapidez e Performance • Sandbox e segurança
  • 29. E se pudemos usar qualquer linguagem e ainda ter boa performance ?
  • 30. Esforços para trazer WebAssembly a devices embarcados Em 2017 isso começou, mas era bem ruim • Em 2017 o WebAssembly estava já sendo bem suportado na web • Hoje temos vários runtimes Wasm para embarcados • Wasm3 - Blynk • Wasm Micro Runtime - Intel/Redhat/Fastly/Mozilla - Bytecode Alliance • Zephyr RTOS - Linux Foundation • Mas ainda não resolve 100% a questão da portabilidade • Talvez alguma variante do WASI venha a resolver isso
  • 31. WASI for IoT ? WASI define coisas como acesso a arquivos, rede e syscalls • WASI é o bastante para o mundo embarcado ? • Requisitos mais específicos • Acesso a pinos • Interação com sensores • “Network” - Bluetooth/WiFi/Zigbee/LoRa • Isso é um grande desafio, mesmo usando a mesma stack, pode ser completamente diferente dependendo do hardware
  • 32. Demo #2 Rodando Wasm como linguagem principal
  • 33. Rodando Wasm como linguagem principal Programar em qualquer linguagem para ambiente embarcado • Aplicação embarcado funciona quase que como um SO primitivo • Inicia o código em Wasm • Provê os “drivers” para acesso a rede e outros recursos • Provê interface para OTA do código em Wasm
  • 34. Rodando Wasm como linguagem principal Programar em qualquer linguagem para ambiente embarcado • O que foi feita na demo • ESP32 como dispositivo embarcado • TinyGo/Rust/AssemblyScript compilado para Wasm • Código Wasm fazem acesso ao hardware e rede • Conecta na rede Wifi • Pisca Led • https://github.com/alvarowolfx/wasm-arduino-wifi
  • 35. Rust
  • 38. Foi apresentado na WebAssembly Summit 2020 https://webassembly-summit.org/speakers/6/
  • 39. Demo #3 Usando Wasm como um motor de regras
  • 40. Usando Wasm como um motor de regras Reaproveitar código base do embarcado • Embarcado ainda é programado nativamente • Provê uma interface que permite customização do seu funcionamento • Consegue criar regras mais complexas do que apenas mudar parâmetros ou passar novas configurações • Imagine um usuário mais avançado podem descrever algumas regras em código para atualizar o device, sem quebrar o código principal • O mesmo código pode rodar no servidor usando runtimes Wasm para server side
  • 41. Usando Wasm como um motor de regras Reaproveitar código base do embarcado • O que foi feita na demo • ESP32 escaneia dispositivos bluetooth • A regra para filtrar os devices é definida via Wasm • Embarcado busca nova versão do Wasm a cada boot para se atualizar e pegar regras atuais • https://github.com/alvarowolfx/wasm-ble-edge-filter
  • 42. Regra de negocio em AssemblyScript Um exemplo de como poderia ser customizado
  • 44. Referencias Mais material de estudo • https://github.com/AssemblyScript/assemblyscript • https://github.com/wasmerio/postgres-ext-wasm • https://github.com/wasmerio/vscode-wasm • https://medium.com/trainingcenter/webassembly-a-jornada-o-que-%C3%A9-wasm-75e3f0f03124 • https://dev.to/emmanuelantony2000/valerie-rethinking-web-apps-in-rust-4cl3 • https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts • https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/ • Autocad WASM - Demo no Google I/O 2018 - www.youtube.com/watch?v=D4fNcX0Q9gA
  • 45. Obrigado! aviebrantz.com youtube.com/alvaroviebrantz twitch.tv/alvaroviebrantz Alvaro Viebrantz Google Developer Expert for IoT and Product Engineer at Leverege aviebrantz.com @alvaroviebrantz