Category Archives: Arquitetura

Arquitetura de micro-serviços

A arquitetura de micro-serviços pode trazer muitos benefícios para o desenvolvimento de software. Seus principais pontos fortes são a escalabilidade, a resiliência da aplicação, facilidade de implantação e aumento na eficiência da manutenção dos sistemas.

Nesse artigo, vamos entender um pouco melhor sobre a organização de um micro-serviço e as camadas o compõe, definindo o seu ecossistema e explicando como cada parte se relaciona entre si.

O ecossistema da arquitetura de microsserviços

Construir, padronizar e manter a infraestrutura de uma maneira estável, escalável, tolerante a falhas e confiável é essencial para o sucesso das operações de um micro-serviço .

Existem vários modelos distintos que sugerem como um ecossistema de micro-serviços deve ser organizado. Um modelo interessante e bem estruturado é o descrito por Susan J. Fowler, em seu livro intitulado “Production-Ready Microservices”.

Segunda ela, o ecossistema de micro-serviços pode ser dividido em quatro “camadas”, sendo elas: Hardware, comunicação, plataforma de aplicações e micro-serviços.

Apesar das camadas estarem todas interligadas, estabelecer essa divisão nos ajuda a entender melhor as diferentes responsabilidades e os diferentes módulos que compõem um ecossistema da arquitetura de micro-serviços.

Hardware

Hardware são os computadores e equipamentos onde os micro-serviços são armazenados e executados. Estes servidores podem estar dentro da empresa, ou pertencerem a provedores de infraestrutura em nuvem, como Amazon Web Services, Google Cloud Platform ou Windows Azure.

Existem algumas soluções que visam diminuir a dificuldade de se gerenciar estes equipamentos, como o emprego de tecnologias de conteinerização e clusterização para o armazenamento dos micro-serviços.

É importante que os servidores sejam providos de mecanismos de monitoramento e logging para identificar problemas de falhas de disco, rede ou processamento, por exemplo. Em um ecossistema de grande diversidade e dinamismo, é importante ter à disposição ferramentas que evidenciem dados da saúde das máquinas onde esses micro-serviços operam e mantenham um histórico destas informações. Desta maneira, eventuais problemas podem ser rapidamente identificados e resolvidos, uma vez que são facilmente detectados e rastreados. Adicionalmente, um mecanismo de monitoramento bem estruturado permite que seja possível acompanhar o impacto que a evolução das aplicações provoca na infraestrutura como um todo.

Comunicação

A Comunicação engloba todo o conjunto responsável por permitir que a interação entre micro-serviços ocorra, e é composta por elementos chave como os endpoints de APIService Discovery e Service Registry, e Load Balancers.

Endpoints de API

Dado uma API de um micro-serviço, seus endpoints são os pontos através dos quais toda a comunicação externa acontece. É nos endpoints que o micro-serviço envia e recebe informações de outros micro-serviços ou aplicações.

Service Discovery e Service Registry

Em um ecossistema de micro-serviços executados em nuvem, as configurações de rede mudam dinamicamente dadas suas características de escalabilidade, falhas e atualizações.  Diante deste cenário dinâmico, é necessário um mecanismo que mantenha a localização mais recente e atualizada de cada serviço.  Os micro-serviços registram a si mesmos no registrador de serviços quando são instanciados, e removidos quando são encerrados ou quando apresentam alguma falha.

Quando um serviço precisa se comunicar com outro, ele recorre ao Service Discovery, em busca da localização mais atualizada deste serviço. Este gerenciamento é um ponto importante e demanda muita atenção na configuração de um ecossistema de micro-serviços.

Load Balancer

Os balanceadores de carga são os responsáveis por rotear as requisições vindas dos clientes para as instâncias do micro-serviço requisitado, garantindo que nenhum servidor seja sobrecarregado e maximizando sua velocidade e capacidade. Se a instância de um determinado micro-serviço cair, o balanceador de carga para de rotear requisições de clientes para esta instância. Similarmente, quando uma nova instância fica disponível o balanceador começa a repassar requisições para ela automaticamente.

Plataforma de aplicações

A Plataforma de aplicações é a terceira camada, e engloba todas as ferramentas que são independentes de um micro-serviço. Estas ferramentas devem ser construídas e dispostas de maneira que o time de desenvolvimento não tenha que se preocupar com nada além da lógica de sua própria aplicação.

Padrões nos processos de desenvolvimento com uso de repositórios de código como GitHub e Bitbucket, por exemplo, e mirroring de ambiente de produção são eficientes para manter a base de código organizada, e simular todas as dependências que a aplicação terá quando for ao ar.

Builds centralizados e automatizados com integração e deploys contínuos são essenciais. Dependendo do tamanho de sua aplicação e do número de micro-serviços que ela possui, dezenas de deploys podem ocorrer diariamente. Por isso, é importante que as ferramentas sejam corretamente configuradas, e que sejam capazes de executar testes automaticamente, adicionar novas dependências conforme necessário, e preparar os releases a medida que novas versões são codificadas.

Por último, ter um mecanismo de log centralizado e monitoramento a nível de micro-serviço é crucial para entender eventuais problemas que ocorrem no serviço implementado. Dado que a natureza de micro serviços é de sofrer alterações constantemente, os logs permitem entender o que aconteceu no sistema em um momento específico. O monitoramento, por sua vez, é utilizado para verificar a saúde e status de um serviço em tempo real.

Micro-serviços

Os micro-serviços concentram a lógica para resolver o problema para o qual se propõe. A ideia é que o serviço seja totalmente abstraído dos demais componentes explicados acima, sem contato com as especificidades de hardware, service registry e service discovery, balanceamento de carga e processos de deploy, por exemplo. O micro-serviço em si consiste apenas do código e configurações específicas que devem ser aplicadas sobre ele para que possa entregar as funcionalidades para qual foi idealizado.

De maneira geral, este é um modelo de ecossistema da arquitetura de micro-serviços. Para serem aplicados em projetos reais, os tópicos citados devem ser estudados e compreendidos mais a fundo, tendo sempre em mente que esse tipo de arquitetura possui componentes muito dinâmicos, e que estão em constante aprimoramento.

Image API

Este post demonstra o conceito da API de tratamento de imagem, publicada no Github.

Introdução

Este projeto foi desenvolvido utilizando Spring Boot, Swagger e REST.

Spring Boot

Spring Boot é um projeto da Spring que veio para facilitar o processo de configuração e publicação de nossas aplicações. Você escolhe os módulos que deseja através dos starters que inclui no pom.xml do seu projeto. Eles, basicamente, são dependências que agrupam outras dependências.

Swagger

O Swagger é um dos frameworks mais usados para se documentar API’s REST. Ele facilita para que os clientes que consomem nossas API’s saibam quais os parâmetros nossas operações recebem, qual o retorno, o modelo, o media type retornado JSON, XML, CSV, binário etc. Sendo assim os clientes não precisam necessariamente discutir com a equipe de desenvolvimento da APIsobre como usá-la.

REST

REST é acrônimo de Representational State Transfer, e tem como objetivo primário a definição de características fundamentais para a construção de aplicações Web seguindo boas práticas.

Veja o post sobre boas práticas REST (http://whs.com.br/dicas/rest-boas-praticas)

Github

https://github.com/lfchaim/image-api

Swagger UI

Para visualizar o Swagger da aplicação, devemos iniciar através da classe ImageApiApplication.

Depois de iniciar, pode-se acessar através do endereço:

http://localhost:8080/swagger-ui.html

Postman

O Postman é uma ferramenta que tem como objetivo testar serviços RESTful (Web APIs) por meio do envio de requisições HTTP e da análise do seu retorno. Com ele é possível consumir facilmente serviços locais e na internet, enviando dados e efetuando testes sobre as respostas das requisições.

Instale o Postman e importe o Collection para efetuar os testes. O download pode ser feito aqui.

https://github.com/lfchaim/image-api/blob/master/postman/ImageAPI.postman_collection.json

 

REST – Boas Práticas

Este post visa apresentar as boas práticas na implementação de serviços REST.

REST – Conceito

REST (Representational State Transfer) é um modelo arquitetural que foi apresentado em uma tese de doutorado de Roy Fielding, co-autor do protocolo HTTP.

RESTful, existe uma confusão entre os dois termos REST e RESTful, resumidamente REST é o modelo arquitetural e RESTful é um sistema que é capaz de aplicar integralmente os princípios de REST. Mais adiante, veremos exemplos de RESTful.

Nomenclatura de URIs

Para facilitar o uso de sua aplicação REST, é bom utilizar versionamento na URI (também conhecido como endpoint).

Exemplo:

  • http://[DOMINIO]/api/v1 (URI sem contexto e subdomínio)
  • http://[SUBDOMINIO].[DOMINIO]/api/v1 (URI sem contexto e com subdomínio)
  • http://[DOMINIO]/[CONTEXTO/api/v1 (URI com contexto e sem subdominio)
  • http://[SUBDOMINIO].[DOMINIO]/[CONTEXTO]/api/v1 (URI com contexto e com subdomínio)

Recursos da URI

Após a definição de Subdomínio, Contexto e Versão, definimos os recursos de nossa API, geralmente, utilizando identificadores no plural.

Exemplo:

  • /customers
  • /products
  • /invoices

Métodos HTTP

É boa prática utilizar métodos HTTP para identificar as operações permitidas.

Exemplo:

  • GET solicita dados do recurso. Requisições utilizando o Método GET devem retornar apenas dados e não devem produzir nenhuma alteração na base.
  • POST solicita que o servidor crie um recurso no banco de dados.
  • PUT solicita que o servidor atualize o recurso.
  • DELETE solicita que os recursos, ou sua instância, sejam removidos do banco de dados.
  • PATCH solicita que o servidor realize modificações parciais em um recurso.

Cadastrar um documento

[POST] /documents

Buscar todos os documentos

[GET] /documents

Buscar o documento de id 1

[GET] /documents/1

Alterar o documento de id 1

[PATCH] /documents/1

Excluir o documento de id 1

[DELETE] /documents/1

Resposta HTTP

Ao invocar um método, o cliente precisa receber uma resposta sobre a execução do método, se ocorreu tudo bem ou se apresentou erro. Para ajudar a identificar o erro, a API deve utilizar o código HTTP da maneira mais usual de mercado.

Categorias:
2xx (Categoria de sucesso)
Esses códigos de status representam que a ação solicitada foi recebida e processada com sucesso pelo servidor.

200 OK
Código de resposta padrão representando sucesso para o GET, PUT ou POST.

201 Created
Deve ser retornado sempre que uma nova instância for criada.

204 No Content
O servidor processa corretamente a requisição, mas não precisa retornar nenhum conteúdo.

4xx (Categoria de erros causados pelo cliente)
Esses códigos de status representam que solicitação realizada pelo cliente está incorreta.

400 Bad Request
Indica que a solicitação realizada pelo cliente não foi processada, pois o servidor não conseguiu entender o que o ele está solicitando.

401 Unauthorized
Indica que o cliente não tem permissão para acessar recursos e deve solicitar novamente com as credenciais necessárias.

403 Forbidden
Indica que a solicitação é válida e o cliente está autenticado, mas o cliente não tem permissão para acessar a página ou recurso por qualquer motivo. Por exemplo, às vezes, o cliente autorizado não tem permissão para acessar o recurso específico.

404 Not Found
Indica que o servidor não encontrou nada que corresponda à URI solicitada.

5xx (categoria de erro do servidor)
Categoria de erros gerados pelo servidor ao processar a solicitação.

500 Internal Server Error
Indica que a solicitação é válida, mas o servidor encontrou uma condição inesperada que impediu o cumprimento da solicitação.

503 Service Unavailable
Indica que o servidor está inoperante ou indisponível para receber e processar a solicitação. Principalmente se o servidor está em manutenção.

A lista completa de Código HTTP pode ser consultada em https://httpstatuses.com

Filtragem(Filtering)

Para filtrar o conjunto de dados, podemos passar várias opções por meio de parâmetros de consulta.
Por exemplo, GET /pessoas?tipo=pf&localizacao=SC filtraria os dados da lista de pessoas físicas de Santa Catarina.

Pesquisa(Searching)

Ao pesquisar o nome da pessoa na lista de pessoas, o endpoint a ser exporto deve ser do tipo GET = /pessoas?Search=fernando

Paginação(Pagination)

Quando o conjunto de dados é muito grande, dividimos o conjunto de dados em partes menores, o que ajuda a melhorar o desempenho e é mais fácil de lidar com a resposta(controlar itens por página e quantas páginas podem ser mostradas).
Por exemplo: GET /pessoas?Page=23 significa obter a lista de pessoas da 23ª página.
Se adicionar muitos parâmetros de consulta em métodos GET tornar o URI muito longo, o servidor poderá responder com 414 URI Status HTTP muito longo. Nesses casos, params também podem ser passados no corpo da solicitação do método POST.

RESTful

Uma API RESTful significa que ela possui a capacidade de evoluir e ajudar a identificação de métodos relacionados. Por exemplo, no método de consulta de um pedido, podemos incluir no retorno, a URI para consultar os dados do Cliente, facilitando a codificação das aplicação que usam a API.

Exemplo (veja o atributo permalink):

{
   "invoiceNumber": 21564879821,
   "invoiceDate": "2012-10-09 12:00:00 +05:30",
   "customer": {
      "document": "01698798166215",
      "name": "John Baker",
      "permalink": "/v2/customers/3a22b041-8d45-496a-946d-bd2252a0d28c"
   }
}

 

Soluções e Ferramentas de TI

Introdução

Este post tem por objetivo mapear as soluções de mercado em Tecnologia da Informação e respectivas ferramentas que podem ser utilizadas.

NoSQL

Redis

A Redis é uma biblioteca de estrutura de dados em memória livre, usada como banco de dados, cache e message broker.

JOhm

É uma biblioteca de mapeamento object-hash, em Java, para armazenar objetos no Redis.

https://github.com/xetorthio/johm

 

Perfil – Arquiteto Sistemas

  1. Front End
    1. jQuery (link)
      1. jQuery é uma biblioteca de funções JavaScript que interage com o HTML, desenvolvida para simplificar os scripts interpretados no navegador do cliente. Usada por cerca de 74.4% dos 10 mil sites mais visitados do mundo, jQuery é a mais popular das bibliotecas JavaScript.
    2. Prototype (link)
      1. Prototype é um framework de código aberto em JavaScript, utilizado para o auxílio no desenvolvimento de aplicações Web. As principais características do Prototype são o fato dele ser muito bem estruturado, modular e orientado a objetos. Outro fato marcante é o excelente suporte ao Ajax.
    3. DWR (link)
      1. O DWR, ou Direct Web Remoting, é uma biblioteca de código aberto Java que ajuda os desenvolvedores a escrever sites que incluem a tecnologia Ajax. Ele permite que o código em um navegador da Web use funções Java em execução em um servidor da Web como se essas funções estivessem no navegador.
    4. Angular (link)
      1. AngularJS é um framework JavaScript código aberto, mantido pelo Google, que auxilia na execução de single-page applications.
    5. JSF2
      1. Primefaces
    6. Gulp
      1. O gulp é um kit de ferramentas JavaScript de código aberto da Fractal Innovations e da comunidade de código aberto do GitHub, usado como um sistema de criação de fluxo contínuo no desenvolvimento web de front-end.
    7. SASS
      1. Sass é uma linguagem de folhas de estilo concebida inicialmente por Hampton Catlin e desenvolvida por Natalie Weizenbaum. Depois de suas versões iniciais, Weizenbaum e Chris Eppstein continuaram a estender Sass com SassScript, uma simples linguagem de script usada em arquivos Sass.
  2. Back End
    1. JEE
    2. Persistence
      1. JPA (link)
        1. Java Persistence API é uma API padrão da linguagem Java que descreve uma interface comum para frameworks de persistência de dados. A JPA define um meio de mapeamento objeto-relacional para objetos Java simples e comuns, denominados beans de entidade.
      2. Hibernate (link)
        1. O Hibernate é um framework para o mapeamento objeto-relacional escrito na linguagem Java.
      3. MyBatis (link)
        1. O projeto iBATIS é um framework de mapeamento objeto-relacional usado para programas escritos em Java, .NET e Ruby. Ele une objetos com Stored Procedures ou declarações SQL usando um descritor XML. A maior vantagem desse programa é a sua simplicidade em relação ao outros mapeadores.
    3. Design Patterns
      1. Em Engenharia de Software, um padrão de desenho ou padrão de projeto é uma solução geral para um problema que ocorre com frequência dentro de um determinado contexto no projeto de software.
    4. Spring
      1. MVC
      2. SpringBoot
        1. Exemplo – Desenvolvendo uma aplicação Spring Data, REST e H2
    5. JMS
      1. ActiveMQ
      2. RabitMQ
      3. AMQP (link)
      4. Apache Camel (link)
    6. Streaming de Dados
      1. Kafka (link)
        1. Apache Kafka é uma plataforma distribuída de mensagens e streaming. Veja mais aqui.
      2. Kinesis
        1. Kinesis possui as mesmas características do Kafka, porém mais robusta. Veja mais aqui.
    7. Go (Golang)
      1. Go é uma linguagem de programação criada pela Google e lançada em código livre em novembro de 2009. É uma linguagem compilada e focada em produtividade e programação concorrente, baseada em trabalhos feitos no sistema operacional chamado Inferno.
    8. Kotlin
      1. Kotlin é uma Linguagem de programação que compila para a Máquina virtual Java e que também pode ser traduzida para JavaScript e compilada para código nativo. É desenvolvida pela JetBrains, seu nome é baseado na ilha de Kotlin onde se situa a cidade russa de Kronstadt, próximo à São Petersburgo.
  3. Arquitetura
    1. Nefflix OSS (microservices)
    2. Circuit Breaker (microservices)
      1. Hystrix
    3. CDI
    4. RSA – Rational Software Architect
    5. RSM – Remote Support Manager
    6. PWA (Progressive Web App)
      1. Os Progressive Web Apps são um conjunto de técnicas para desenvolver aplicações web, adicionando progressivamente funcionalidades que antes só eram possíveis em apps nativos.
    7. TOGAF (link)
    8. IASA (link)
      1. Cinco pilares
    9. Zachman (link)
    10. BiZZDesign (link)
    11. BIAN – Banking Industry Architecture Network (link)
    12. CBAP (link)
    13. BFF (Backend for Frontend)
    14. ACL (Access Control List)
  4. SOA
    1. JAX-WS
    2. JAX-RS
    3. REST
  5. Cloud
    1. Openshift (link)
      1. OpenShift é um produto de software de computador da Red Hat para implantação e gerenciamento de softwares baseados em container. Ele é uma distribuição suportada do Kubernetes usando Docker e ferramentas DevOps para desenvolvimento acelerado de aplicações.
    2. Spring Cloud (link)
  6. Database
    1. Redis (link)
      1. Redis é um armazenamento de estrutura de dados de chave-valor de código aberto e na memória. ORedis oferece um conjunto de estruturas versáteis de dados na memória que permite a criação de várias aplicações personalizadas.
    2. Cassandra (link)
      1. Apache Cassandra é um projeto de sistema de banco de dados distribuído altamente escalável de segunda geração, que reúne a arquitetura do DynamoDB, da Amazon Web Services e modelo de dados baseado no BigTable, do Google.
    3. MongoDB (link)
      1. MongoDB é uma aplicação de código aberto, de alta performance, sem esquemas, orientado a documentos. Foi escrito na linguagem de programação C++. Além de orientado a documentos, é formado por um conjunto de documentos JSON.
    4. ElasticSearch (link)
      1. Elasticsearch é um servidor de buscas distribuído baseado no Apache Lucene. Foi desenvolvido por Shay Banon e disponibilizado sobre os termos Apache License.
    5. Kibana
      1. O Kibana é um plugin de visualização de dados de fonte aberta para o Elasticsearch. Ele fornece recursos de visualização em cima do conteúdo indexado em um cluster Elasticsearch.
  7. Data Processing
    1. Apache Beam
      1. O Apache Beam é um modelo de programação unificada de código aberto para definir e executar pipelines de processamento de dados, incluindo o processamento de ETL, lote e fluxo.
  8. Big Data
    1. Linguagens
      1. Python
        1. Python é uma linguagem de programação de alto nível, interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991.
      2. Java
        1.  
      3. R
        1. R é uma linguagem e também um ambiente de desenvolvimento integrado para cálculos estatísticos e gráficos.
      4. Scala
        1. Scala é uma linguagem de programação de propósito geral, diga-se multiparadigma, projetada para expressar padrões de programação comuns de uma forma concisa, elegante e type-safe. Ela incorpora recursos de linguagens orientadas a objetos e funcionais. Também é plenamente interoperável com Java.
        2.  
      5. Julia
        1. Julia é uma linguagem de programação dinâmica de alto nível projetada para atender os requisitos da computação de alto desempenho numérico e científico, sendo também eficaz para a programação de propósito geral.
      6. GNU Octave
      7. Closure
    2. Framework
      1. Hadoop (link)
        1. Hadoop é uma plataforma de software em Java de computação distribuída voltada para clusters e processamento de grandes volumes de dados, com atenção a tolerância a falhas. Foi inspirada no MapReduce e no GoogleFS.
      2. Spark (linkexemplos)
        1. Apache Spark é um framework de código fonte aberto para computação distribuída. Foi desenvolvido no AMPLab da Universidade da Califórnia e posteriormente repassado para a Apache Software Foundation que o mantém desde então. Spark provê uma interface para programação de clusters com paralelismo e tolerância a falhas.
        2. Veja mais aqui.
      3. Flink (link)
        1. O Apache Flink é uma estrutura de processamento de fluxo de código aberto desenvolvida pela Apache Software Foundation. O núcleo do Apache Flink é um mecanismo de fluxo de dados de fluxo contínuo distribuído em Java e Scala.
      4. Storm (link)
        1. O Apache Storm é um framework de computação de processamento de fluxo distribuído escrito predominantemente na linguagem de programação Clojure. Originalmente criado por Nathan Marz e pela equipe do BackType, o projeto foi aberto depois de ter sido adquirido pelo Twitter.
      5. Samza (link)
        1. Apache Samza é um framework open-source assíncrono, quase em tempo real, para o processamento de fluxos desenvolvido pela Apache Software Foundation em Scala e Java.
      6. Databricks (link)
        1. A Databricks é uma empresa fundada pelos criadores do Apache Spark, que tem como objetivo ajudar clientes com processamento de big data baseado em nuvem usando o Spark.
    3. Machine Learning
      1. TensorFlow (link)
        1. TensorFlow é uma biblioteca de código aberto para aprendizado de máquina aplicável a uma ampla variedade de tarefas. É um sistema para criação e treinamento de redes neurais para detectar e decifrar padrões e correlações, análogo à forma como humanos aprendem e raciocinam.
    4. Analytics
      1. Alteryx – É uma plataforma de Self-service Data Analytics que, em um workflow único e intuitivo, fornece os recursos necessários para acessar, preparar, enriquecer, misturar várias fontes de dados e usá-los na preparação para análises avançadas, preditivas e espaciais e na geração de relatórios sofisticados.
  9. Integração
    1. Jenkins (link)
      1. O Jenkins é um servidor de automação de código aberto escrito em Java. O Jenkins ajuda a automatizar a parte não humana do processo de desenvolvimento de software, com integração contínua e facilitando os aspectos técnicos da entrega contínua.
    2. Sonarqube (link)
      1. O SonarQube é uma plataforma de código aberto desenvolvida pela SonarSource para inspeção contínua da qualidade do código para realizar revisões automáticas com análise estática de código para detectar bugs, códigos cheirosos e vulnerabilidades de segurança em mais de 20 idiomas de programação.
    3. Testlink (link)
      1. TestLink é um software web desenvolvido para teste de software que visa facilitar testes e assegurar a qualidade de software. Foi desenvolvido e mantido por várias equipes ao longo de sua existência.
    4. Nexus (link)
    5. Ansible (link)
      1. Ansible é um software de código aberto que automatiza o provisionamento de software, o gerenciamento de configuração e a implantação de aplicativos. O Ansible se conecta via SSH, PowerShell remoto ou por meio de outras APIs remotas.
  10. Test
    1. JUnit
      1. O JUnit é um framework open-source, que se assemelha ao raio de testes software java, criado por Erich Gamma e Kent Beck, com suporte à criação de testes automatizados na linguagem de programação Java. Esse framework facilita a criação de código para a automação de testes com apresentação dos resultados.
    2. Cucumber (link)
      1. Cucumber é uma ferramenta de software usada por programadores de computador para testar outros softwares. Ele executa testes de aceitação automatizados escritos em um estilo de desenvolvimento orientado por comportamento. Central para a abordagem do BDD de pepino é seu parser de linguagem simples chamado Gherkin.
      2. Publicações: Cucumber Linguagem Gherkin / Exemplo prático de Calculadora
    3. Mockito
      1. Mockito é uma estrutura de teste de código aberto para Java lançada sob a licença MIT. A estrutura permite a criação de objetos duplos de teste em testes unitários automatizados para fins de desenvolvimento orientado a testes ou desenvolvimento orientado a comportamento.
    4. TestLink
      1. TestLink é um software web desenvolvido para teste de software que visa facilitar testes e assegurar a qualidade de software. Foi desenvolvido e mantido por várias equipes ao longo de sua existência.
    5. Appium
      1. Appium é uma ferramenta open source e multi-plataforma para automação de aplicações nativas e híbridas, para web e mobile, disponível para os principais sistemas operacionais do mercado, Android e iOS (e agora para FirefoxOS).
    6. REST-assured (link)
    7. TestCafé (link)
    8. Puppeteer (link)
    9. MockMvc (link)
    10. Katalon (link)
  11. Agile
    1. Scrum
      1. Clique aqui para ver mais.
    2. Kanban
    3. SAFe (link)
      1. O Scaled Agile Framework, é um conjunto de padrões de organização e fluxo de trabalho destinados a orientar as empresas no dimensionamento de práticas enxutas e enxutas.
    4. LeSS (link)
    5. DAD (link)
      1. O fornecimento ágil disciplinado é uma estrutura de decisão de processo que permite decisões de processo simplificadas em torno da entrega de solução incremental e iterativa.
  12. Engenharia de Software
    1. YAGNI (link)
      1. YAGNI é uma abreviação da expressão de língua inglesa You Ain’t Gonna Need It. Em engenharia de software, é uma orientação de trabalho que sugere aos programadores que não adicionem funcionalidades ao código fonte de um programa até que estas sejam realmente necessárias.
    2. SOLID (link)
    3. Lean (link)
      1. 7 Princípios (Eliminar desperdício, Fortalecer time, Entregas rápidas, Otimizar o todo, Construir qualidade, Adiar decisões e Amplificar o conhecimento)
  13. Gestão de Negócios
    1. Modelo de Negócio (link)
    2. Canvas
    3. SWOT
    4. Ishikawa
    5. BABOK
    6. BSC (Balanced ScoreCard)
      1. BSC
  14. Monitoramento
    1. Zabbix (link)
      1. O Zabbix é um software de monitoramento de código aberto para redes, sistemas operacionais e aplicativos, criado na Letônia por Alexei Vladishev. Ele é projetado para monitorar e rastrear o status de vários serviços de rede, servidores e outros hardwares de rede.
    2. Grafana (link)
    3. Kibana (link)
  15. Controle de Versão
    1. CVS
      1. O CVS, ou Concurrent Version System é um sistema de controle de versão que permite que se trabalhe com diversas versões de arquivos organizados em um diretório e localizados local ou remotamente, mantendo-se suas versões antigas e os logs de quem e quando manipulou os arquivos.
    2. SVN
      1. Apache Subversion é um sistema de controle de versão desenhado especificamente para ser um substituto moderno do CVS, que se considera ter algumas limitações. O Subversion utiliza banco de dados Berkeley BD.
    3. Git
      1. Git é um sistema de controle de versões distribuído, usado principalmente no desenvolvimento de software, mas pode ser usado para registrar o histórico de edições de qualquer tipo de arquivo.
  16. Rich Web UI
    1. Semantic UI (link)
    2. Bootstrap (link)
    3. Materialize (link)
  17. DevOps
    1. Kubernetes (link)
      1. Kubernetes é um sistema de orquestração de contêiners open-source que automatiza a implantação, o dimensionamento e a gestão de aplicações em contêiners. Ele foi originalmente projetado pelo Google e agora é mantido pela Cloud Native Computing Foundation.
  18. Demais assuntos
    1. Financeiro
      1. ZBB (Zero-Based Budgeting)
        1. Orçamento base zero é uma abordagem para planejamento e orçamentação que inverte a lógica tradicional do processo de orçamentação.
      2. CAPEX
        1. CAPEX é a sigla da expressão inglesa capital expenditure e que designa o montante de dinheiro despendido na aquisição de bens de capital de uma determinada empresa.
    2. Negócios
      1. Customer Success – Consiste em boas práticas, aplicadas ao gerenciamento de sucesso do Cliente. Tem como foco Onboarding, Expansion, Retention, Voice of Customer, NPS, Customer 360, Customer Journey, Upsells, etc.
      2. C-Level – Posições de liderança, que iniciam com “C” (Chief – CEO, CFO, CIO, CTO, etc)
  19. Segurança
    1. WAF – Web Application Firewall
    2. Injection;
    3. Broken Authentication and Session Management;
    4. Cross-Site Scripting (XSS);
    5. Broken Access Control;
    6. Security Misconfiguration;
    7. Sensitive Data Exposure
    8. Insufficient Attack Protection;
    9. Cross-Site Request Forgery (CSRF);
    10. Using Components with Known Vulnerabilities;
    11. Underprotected APIs.
    12. OAuth 2.0
    13. OpenID Connect
    14. Keycloak
    15. SAML 2.0
    16. ISRM (Information Security Risk Management)
  20. Collaboration and work management
    1. Jira
    2. Asana
    3. ClickUp
    4. Trello
    5. ProofHub
    6. Workzone
    7. Podio
    8. Wrike
    9. MeisterTask
    10. Airtable
  21. Java Compliance Checker
    1. JAPICC (Link Link2) – japi-compliance-checker OLD.jar NEW.jar
    2. pkgdiff (Link) – pkgdiff OLD.jar NEW.jar
    3. Clirr (Link) – java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar
    4. zipdiff (Link)
    5. Revapi (Link)
    6. Animal Sniffer (Link)

Links:
System Design Blueprint: The Ultimate Guide
8 System Design Courses to learn Distributed System Architecture (2025)
Diagrams as Code 2.0