fbpx
Publicado em: sexta-feira, 18 de out de 2019
Dapr – Distributed Application Runtime – Primeiras Impressões

Nessa quarta-feira a Microsoft anunciou no Open Source Blog um projeto curioso chamado Dapr. Entre os principais pontos, o que me chama a atenção é que tem muita cara de servidor de aplicação/componente. E isso de certa forma me chama a atenção pelas possibilidades.

Na versão alpha, versão atual, vemos alguns building blocks muito interessantes, como:

  • Service-to-service Invocation
  • State Management
  • Pub/Sub
  • Resource Binding & Triggers
  • Actors
  • Distributed Tracing
  • Extensibility

Valle lembrar que o projeto está na versão 0.1.0, e nada do que temos agora é compromisso firmado com a versão final, eles deixam isso bem claro. Ainda está em alpha.

O post original está aqui Announcing Distributed Application Runtime (Dapr), an open source project to make it easier for every developer to build microservice applications e apenas vou traduzir algumas partes para dar prosseguimento aos comentários.

Diagnóstico e motivação

It is remarkable to see the transformation over the last few years as more and more developers build scalable, cloud native applications, taking advantage of managed services to deploy and run them. With this transformation, microservice architectures have become the standard for building cloud native applications, and it is predicted that by 2022, 90% of new apps will feature microservice architectures. A microservice architecture offers compelling benefits, including scalability, loose service coupling and independent deployments. However, this approach can come at a high cost of understanding and skilling on distributed systems.

Developers want to focus on business logic, frequently and incrementally migrating legacy code, while leaning on the platforms to provide their applications with the required scale, resiliency, maintainability, elasticity and the other attributes of cloud-native architectures. What developers find though, is limited portability between cloud and edge and they continually end up solving the same distributed system problems such as state management, resilient method calling and handling events. In addition, many programming runtimes often have narrow language support and tightly controlled feature sets, making it challenging to build microservice architectures.
É notável ver a transformação nos últimos anos, à medida que mais e mais desenvolvedores criam aplicações escaláveis ​​cloud native, aproveitando os serviços gerenciados para implantá-los e executá-los. Com essa transformação, as arquiteturas de microsserviço tornaram-se o padrão para a criação de aplicações nativos da nuvem, e prevê-se que até 2022, 90% dos novas aplicações apresentem arquiteturas de microsserviço. Uma arquitetura de microsserviço oferece benefícios atraentes, incluindo escalabilidade, acoplamento de serviço flexível e implantações independentes. No entanto, essa abordagem pode ter um alto custo de entendimento e habilidade em sistemas distribuídos.

Os desenvolvedores desejam se concentrar na lógica de negócios, migrando com frequência e incrementalmente o código legado, enquanto se apoiam nas plataformas para fornecer às aplicações a escala, resiliência, capacidade de manutenção, elasticidade e outros atributos necessários das arquiteturas nativas da nuvem. O que os desenvolvedores descobrem é a portabilidade limitada entre a nuvem e a borda e eles acabam resolvendo os mesmos problemas de sistema distribuído, como gerenciamento de estado, chamada de método resiliente e manipulação de eventos. Além disso, muitos tempos de execução de programação geralmente têm suporte a idiomas estreitos e conjuntos de recursos rigidamente controlados, tornando difícil a construção de arquiteturas de microsserviços.

Dapr: Microservice building blocks for cloud and edge

Dapr is an open source, portable, event-driven runtime that makes it easy for developers to build resilient, microservice stateless and stateful applications that run on the cloud and edge. Dapr embraces the diversity of all programming languages and developer frameworks and simplifies building applications such as the e-commerce example.

Dapr consists of a set of building blocks accessed by standard HTTP or gRPC APIs that can be called from any programming language. These building blocks empower all developers with proven, industry best practices and each building block is independent; you can use one, some, or all of them in your applications. In addition, through the open source project, we welcome the community to add new building blocks and contribute new components into existing ones. Dapr is completely platform agnostic, meaning you can run your applications locally, on any Kubernetes cluster, and other hosting environments that Dapr integrates with. This enables developers to build microservice applications that can run on both the cloud and edge with no code changes.
O Dapr é um runtime de código aberto, portátil e orientado a eventos, que facilita para os desenvolvedores a criação de aplicações resilientes, sem estado e sem estado de microsserviço, executados na nuvem e na borda. O Dapr abraça a diversidade de todas as linguagens de programação e estruturas de desenvolvedores e simplifica a criação de aplicações como o exemplo do comércio eletrônico.

O Dapr consiste em um conjunto de blocos de construção acessados ​​pelas APIs HTTP ou gRPC padrão que podem ser chamadas a partir de qualquer linguagem de programação. Esses blocos de construção capacitam todos os desenvolvedores com as melhores práticas comprovadas do setor e cada bloco de construção é independente; você pode usar um, alguns ou todos eles em suas aplicações. Além disso, por meio do projeto de código aberto, damos as boas-vindas à comunidade para adicionar novos componentes e contribuir com novos componentes nos já existentes. O Dapr é totalmente independente da plataforma, o que significa que você pode executar suas aplicações localmente, em qualquer cluster Kubernetes e em outros ambientes de hospedagem aos quais o Dapr se integra. Isso permite que os desenvolvedores criem aplicações baseadas em microsserviço que podem ser executados na nuvem e na borda sem alterações de código.

Get Started e Primeiras Impressões

A home do projeto está disponível em dapr.io. De lá o get started nos leva para o github do projeto onde encontramos alguns poucos links, mas o principal é o configure Dapr locally. Não depender do Kubernetes é um ponto alto para o projeto. Poder rodar com Docker puro, faz diferença, e dá a dimensão de que sim, é capaz de rodar em qualquer lugar, sem nos empurrar para o uso do Kubernetes.

Vale lembrar que Kubernetes embora seja standard, diversos grandes nomes da comunidade nacional e internacional não recomendam k8s para a maioria dos workloads pequenos. Nesses cenários docker swarm atende perfeitamente, e tem melhor fit. Consideramos workloads pequenos, até 7 nós masters em um cluster (detalhes). Entre os nomes que respaldam essa afirmação está Bret Fisher, um Docker Captain (detalhes sobre essa treta)

A configuração inicial é super simples, consiste em instalar uma CLI. Eu optei pelo setup com powershell pois, como eu já imaginava, uma vez instalado, poderia ser executado a partir do bash com windows terminal. Então essa foi minha opção.

Uma vez com a CLI instalada foi hora de instalar o runtime. Super simples também.

Agora era hora de rodar os samples, e ver como funciona.

Segui o passo-a-passo do primeiro hello world e tudo funcionou de primeira.

Para uma versão alpha eu achei o projeto incrível. Vale lembrar que o Hello workd é em NodeJS. A propósito, se for rodar a demo, não deixe de rodar npm install na pasta da demo.

É assim que começa “o jogo”. Uma vez sem container nenhum rodando, basta rodar dapr init para que os containers sejam inicializados. O próximo passo é rodar sua aplicação.

dapr run --app-id mynode --app-port 3000 --port 3500 node app.js

Note que ao rodar, você já enxerga um log no console estruturado como todo bom application server.

Entendendo sua arquitetura

Um das coisas que me chamou a atenção era a falta de um dockerfile no projeto node, e a necessidade de rodar um npm install no windows.

Enquanto eu esperava que mesmo que a CLI rodasse no windows, TODO o workload seria executado completamente no Linux, em containers docker. Mas a abordagem escolhida pelo projeto ainda nessa versão alpha é diferente. Nessa versão (e não há nada que eu tenha lido que aponta para uma mudança) o seu projeto é executado junto com a CLI. Assim, se a CLI está no Windows, o daprd também está no windows, e consequentemente sua aplicação roda no Windows. Por outro lado, recursos adicionais são executados diretamente no linux. Como o redis e uma instância do dapr.

E rodando estão os seguintes processos

Isso me chamou muito a atenção, pois a aplicação está rodando no Windows e apenas consumindo serviços hospedados com docker.

Nessa imagem fica claro que a CLI dapr está chamando o daprd (daemon) que hospeda algum serviço de comunicação, como um sidecar para minha aplicação node.

Essa topologia é descrita aqui:

Do outro lado, alguns serviços são hospedados como containers mas fazem parte da infraestrutura do daprd.

E assim nasce um modelo super interessante e funcional.

O máximo que pude ver foi essa conectividade, a parte de armazenamento de estado (ainda não dá para chamar de gerenciamento pois estado é controlado de forma ativa), mas enfim, já temos grandes avanços, muito interessantes. E dá para vislumbrar muito potencial para o projeto.

Outra característica muito relevante é a afinidade e proximidade com gRPC como protocolo de comunicação entre os nossos serviços e o dapr. Essa iteração vem dando poder e respaldo ao gRPC e apresenta, inclusive, um novo modelo de uso, muito interessante.

Ainda faltam dashboards, faltam algumas coisas para consolidar essa estratégia mas o que vemos já é fantástico.

Em linhas gerais esses são os serviços providos nessa versão alpha. Acredito e imagino que esses mesmos serviços vão ganhando capacidades, e suas implementações passam a ser mais amigáveis e automáticas.

A estratégia de deploy que utilizei é bem parecida com a imagem acima.

No entanto o projeto também está disponível para ser executado em clusters Kubernetes, como mostra a imagem abaixo:

O que eu tinha para apresentar do projeto hoje era só isso.

Vale a pena o teste, mas como o próprio site diz: ainda é cedo para pensar em produção. Mas já há uma boa oportunidade para contribuir com o projeto.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.