Encontro 1
Modelos de comunicação e revisão MQTT

apresentação do material


comunicação
MODELO OSI

MODELO TCP/IP

Revisão mqtt


TCP vs UDP

paho mqtt


Publisher

Subscriber
ponderada/dev

Skill
Issue
Simule um dispositivo IoT utilizando o Eclipse Paho (escolha a implementação que quiser). Atente-se às seguintes specs:
- Taxa de comunicação
- Unidade de medida
- Ordem de grandeza
- Geolocalização (bonus)
Encontro 2
Conceitos de TDD

Index
TDD

Testes com python


Testes com go


testes com mqtt
Encontro 4
Introdução ao HiveMQ

sprint 2
Broker em cloud e Dashboard
Encontro 3
- Segurança da informação
Encontro 4
- MQTT
- HiveMQ
Encontro 5
- BI
- Introdução ao Metabase
Encontro 6
- Integração do metabase
encontros




AGENDA
MQTT QoS

MQTT persistent sessions

MQTT retained messages

MQTT last will

MQTT keep alive

MQTT Client Takeover

MQTT client takeover

MQTT client takeover

MQTT wildcards



segurança mqtt - antes do broker

segurança mqtt - tls

segurança mqtt - payload
client-broker encryption

segurança mqtt - payload

E2E encryption
segurança mqtt - payload
integridade

segurança mqtt - payload

segurança mqtt - payload

segurança mqtt - payload

segurança mqtt - payload

segurança mqtt - payload

ponderada/dev

ponderada/dev

ponderada/dev

Skill
Issue
Nessa atividade, deve-se desenvolver a integração entre o simulador desenvolvido nas duas primeiras atividades ponderadas e um cluster configurado no HiveMQ. Para tal, deve-se garantir que o simulador é capaz de se comunicar utilizando autenticação em camada de transporte (TLS).
Encontro 5
Introdução ao Metabase

Encontro 3
- Segurança da informação
Encontro 4
- MQTT
- HiveMQ
Encontro 5
- BI
- Introdução ao Metabase
Encontro 6
- Integração do metabase
encontros




AGENDA
business intelligence

business intelligence

Metabase


AUR

Metabase questions

Metabase dashboards

smartcitizen
ponderada/dev

Skill
Issue
ETAPA 1 - Dashboard Metabase
ETAPA 2 - Integração Sqlite+HiveMQ
Encontro 6
Integração Metabase


Encontro 3
- Segurança da informação
Encontro 4
- MQTT
- HiveMQ
Encontro 5
- BI
- Introdução ao Metabase
Encontro 6
- Integração do metabase
encontros




AGENDA
persistencia no metabase



configurações
persistencia no metabase
configurações




map
persistencia no metabase
configurações



Metabase + SQLITE
dados



ponderada/dev

Skill
Issue
ETAPA 1 - Dashboard Metabase
ETAPA 2 - Integração Sqlite+HiveMQ
Encontro 7
Introdução ao MongoDB

sprint 3
Aprimoramento DB e Dashboard
Encontro 6
- SQL vs NoSQL
- MongoDB
Encontro 7
- Segurança em bancos de dados
Encontro 8
- MongoDB Atlas
Encontro 9
- Integração Atlas
encontros




AGENDA
SQL vs noSQL

tipos de nosql

escalabilidade

por que sql não escala bem?

ACID vs BASE

acid
Atomicidade (Tudo ou nada)
Consistência (Sempre o mesmo estado, mesmo quando distribuído)
Isolamento (Uma operação pode afetar a outra)
Durabilidade (Sem perdas de dados)
BASE
BAsicamente disponível (Sempre disponível, nem sempre consistente)
Estado Suave (Permite períodos de inconsistência em transição)
Eventual consistência (Eventualmente o estado se torna consistente)
mongodb

mongodb + iot

Modelagem de dados mongodb

Modelagem de dados mongodb

Modelagem de dados mongodb

Modelagem de dados mongodb

Modelagem de dados mongodb

Modelagem de dados mongodb

Modelagem de dados mongodb

dev

Skill
Issue
Não tenho ponderada para vocês essa semana. Podem usar esse tempo para dev =)
MongoDB Atlas
Encontro 9
Encontro 10
Integração MongoDB Atlas
Encontro 11
Introdução ao Apache Kafka

sprint 4
Gerenciamento de escalabilidade
Encontro 11
- Introdução ao Kafka
Encontro 12
- Kafka na nuvem
Encontro 13
- Integração kafka - hivemq
Encontro 14
- Armazenamento de longo prazo / parquet
encontros




AGENDA
Arquitetura do projeto
filas
streaming de eventos
kafka

kafka - partitions

kafka - offset

kafka - zookeeper

kafka - performance

kafka - performance

kafka - performance

kafka - performance

kafka - limitações
- Não minimiza latência;
- Não foi feito para escalar tópicos;
- Não foi feito para escalar producers;
- Pode ser incompatível com load balancers L4;
dev

Skill
Issue
Seguindo os autoestudos do encontro de hoje, implemente um cluster kafka, criando drivers para um producer e um consumer na linguagem de sua preferência.
Encontro 14
Apache Parquet + acompanhamento

AGENDA
Armazenamento de longo prazo
- Por que não deixar tudo no mongo?
armazenamento de dados

layout de dados

dev

Skill
Issue
Implementação da integração entre Kafka e HiveMQ
Encontro 15
Concorrência e paralelismo

AGENDA
concorrência vs PAralelismo

No SO

Como as linguagens implementam?
concorrência + paralelismo = go
package main
import (
"fmt"
"time"
)
// Função que exibe uma mensagem após um sleep de 2 segundos
func printWithDelay(msg string) {
time.Sleep(2 * time.Second)
fmt.Println(msg)
}
func main() {
start := time.Now() // Início da medição do tempo
// Chamando a função 3 vezes
printWithDelay("Mensagem 1")
printWithDelay("Mensagem 2")
printWithDelay("Mensagem 3")
elapsed := time.Since(start) // Tempo total de execução
fmt.Printf("Tempo total de execução: %s\n", elapsed)
}
concorrência + paralelismo = go
package main
import (
"fmt"
"time"
)
// Função que exibe uma mensagem após um sleep de 2 segundos
func printWithDelay(msg string) {
time.Sleep(2 * time.Second)
fmt.Println(msg)
}
func main() {
start := time.Now() // Início da medição do tempo
// Chamando a função 3 vezes
go printWithDelay("Mensagem 1")
go printWithDelay("Mensagem 2")
go printWithDelay("Mensagem 3")
elapsed := time.Since(start) // Tempo total de execução
fmt.Printf("Tempo total de execução: %s\n", elapsed)
}
waitgroups
package main
import (
"fmt"
"sync"
"time"
)
// Função que exibe uma mensagem após um sleep de 2 segundos
func printWithDelay(msg string, wg *sync.WaitGroup) {
defer wg.Done() // Indica que a goroutine foi concluída
time.Sleep(2 * time.Second)
fmt.Println(msg)
}
func main() {
var wg sync.WaitGroup // Cria um WaitGroup
start := time.Now() // Início da medição do tempo
// Adiciona 3 ao contador de tarefas do WaitGroup
wg.Add(3)
// Chamando a função 3 vezes de forma concorrente
go printWithDelay("Mensagem 1", &wg)
go printWithDelay("Mensagem 2", &wg)
go printWithDelay("Mensagem 3", &wg)
wg.Wait() // Aguarda todas as goroutines serem concluídas
elapsed := time.Since(start) // Tempo total de execução
fmt.Printf("Tempo total de execução: %s\n", elapsed)
}
channels
package main
import (
"fmt"
"time"
)
// Função que envia uma mensagem para um canal após um sleep de 2 segundos
func printWithDelay(msg string, ch chan string) {
time.Sleep(2 * time.Second)
ch <- msg // Envia a mensagem para o canal
}
func main() {
ch := make(chan string, 3) // Cria um canal com buffer para 3 strings
start := time.Now() // Início da medição do tempo
// Chamando a função 3 vezes de forma concorrente
go printWithDelay("Mensagem 1", ch)
go printWithDelay("Mensagem 2", ch)
go printWithDelay("Mensagem 3", ch)
// Recebe as mensagens do canal e imprime
for i := 0; i < 3; i++ {
msg := <-ch
fmt.Println(msg)
}
close(ch)
elapsed := time.Since(start) // Tempo total de execução
fmt.Printf("Tempo total de execução: %s\n", elapsed)
}
...mais um exemplo


vector padding
type paddedInt struct {
value int
_ [56]byte
}
wtf!?

ponderada?
nos vemos no módulo 11


nos vemos no módulo 11






M9 EC Encontros
By Rodrigo Mangoni Nicola
M9 EC Encontros
Slides dos encontros do módulo 9 de EC - Inteli
- 25