Encontro 1
Modelos de comunicação e revisão MQTT
AGENDA
Sprint 1
Simulador MQTT
ENCONTROS
Encontro 2
- TDD
Encontro 1
- Apresentação do módulo
- Revisão MQTT
- Paho MQTT
apresentação do material
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
}