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:

  1. Taxa de comunicação
  2. Unidade de medida
  3. Ordem de grandeza
  4. 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

Made with Slides.com