Skip to content

Latest commit

 

History

History
144 lines (96 loc) · 5.22 KB

README.md

File metadata and controls

144 lines (96 loc) · 5.22 KB

Backend

Segue uma coletânea de informações e exemplos de uso de frameworks e ferramentas.

A ideia deste repositório é ter vários exemplos de pequenos projetos backend para posteridade.

Nest.JS

Nest.JS é um dos melhores frameworks para NodeJS com fácil desenvolvimento e extensão.

Ficou muito famoso pela fácil implementação de Microservices.

O maior benefício de usá-lo é a facilidade de integrar tecnologias como Microservices, GraphQL e WebSockets. O maior contra é por ele ser super opinativo graças aos decorators.

Segue alguns comandos iniciais:

yarn global add @nestjs/cli
nest new boilerplate
cd boilerplate
yarn install
nest g resource

Express

Diferente do anterior, Express oferece mais liberdade. Ideial para aplicar sua própria estrutura a padrões.

Usado por baixo do Nest.JS, este é o mais conhecido framework para NodeJS.

Prisma

export DB_URL=postgresql://postgres:docker@localhost:5432/db
# others
npx prisma migrate dev
npx prisma migrate generate
npx prisma studio

Referências

Kafka

Trabalha com tópicos onde nem sempre a primeira que entrar será a primeira a sair tal como HabbitMQ porque ele utiliza partições.

Num Consumer pode ter uma partição mais rápida que outra e com isso o offset da fila de um ou outro pode ser diferente.

As mensagens são armazenadas e mesmo que ele caia, consegue voltar a processar todas mensagens novamente.

Uma mensagem no Kafka não é removida. Ela é armazenada e marcada como processada.

Você pode configurar o período de retenção dessas mensagens processadas por mais que tenha um período padrão.

Principais características:

  • Segurança;
  • Resiliência;
  • Features essênciais;
  • Stream de dados;

Comandos

docker exec -it 102-express-basic-microservices-refactored_kafka_1 bash
kafka-topics.sh --list --bootstrap-server kafka:9092
kafka-topics.sh --create --bootstrap-server kafka:9092 --partitions 3 --replication-factor 1 --topic test
kafka-topics.sh --describe --bootstrap-server kafka:9092 --topic test
kafka-console-producer.sh --bootstrap-server kafka:9092 --topic purchases.new-product
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic purchases.new-product
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic purchases.new-product --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic purchases.new-product --group purchases
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --group purchases --describe

Kafka Cluster

image

Cada Broker é um servidor e um conjunto de brokers formam um Cluster.

Os brokers são responsáveis por armazenar os dados de uma partição.

Ou seja: Cada partição de um Topic está distribuído em diferentes brokers.

Com isso, entendemos que o Kafka é distribuído e as mensagens podem ficar em partições e servers diferentes.

Replication Factor

image

O Kafka trabalha com réplicas para que caso uma morra, você não perca o processamento de nenhum mensagem.

Com isso, você pode ter vários Brokers e Topics espalhados para garantir a entrega delas.

Consumer group

image

Quando uma mensagem é lida por um Consumer, ela não será lida por outro.

Group serve para ter um grupo de Consumers por sistema onde você poderá ter adicionar mais Consumers.

HabbitMQ

Diferentemente do Kafka, o HabbitMQ não tem partições, apenas filas. Então ele lê tudo e após processar, as mensagens somem.

MongoDB

Banco de dados não relacional mais conhecido baseado em documentos.

Nas últimas versões possui funcionalidades incríveis como Realtime e Relationship.

É possível criar um banco gratuitamente via https://cloud.mongodb.com.

Docker Compose

Alguns comandos útils usados neste repositório.

# Pausando containers
docker stop $(docker ps -q)
# Derrubando containers
docker kill $(docker ps -q)
# Verificar se estão rodando
docker-compose logs zookeeper | grep -i binding
docker-compose logs kafka | grep -i started
# Para quando Kafka não ter tido tempo de sincronizar
docker-compose restart kafka
# Criar um tópico
docker-compose exec kafka kafka-topics --create --topic purchases --partitions 1 --replication-factor 1 --if-not-exists --zookeeper localhost:2181
docker-compose exec kafka kafka-topics --describe --topic purchases --zookeeper localhost:2181
# Reproduzindo mensagens com Producer
docker-compose exec kafka bash -c "seq 4 | kafka-console-producer --request-required-acks 1 --broker-list localhost:9092 --topic purchases && echo 'Produced 4 messages.'"
# Consumindo mensagens com o Consumer
docker-compose exec kafka kafka-console-consumer --bootstrap-server localhost:9092 --topic purchases --from-beginning --max-messages 100
# Criar uma network manualmente caso utilize VPN
docker network create traefik --subnet=10.50.0.2/24