cassio greco - qconsp...go node python rust laravel ruby. 2018 2017. alguns projetos em go....
TRANSCRIPT
Cassio GrecoFundador da Conta Simples
em serviços financeirosPorquê usar Go
Agenda
1. Uma básica introdução sobre Go
2. Porquê e como usamos Go na Conta Simples
3. Resolvendo problemas complexos em Go
4. Conclusão
O básico sobre Go
● Procedural, assim como C
● Possui estruturas normalmente encontradas em OO, i.e. "polimorfismo" (interfaces)
● Possui ponteiros
● Fortemente e estaticamente tipado
● Utiliza garbage collection para livrar memória
● Compila diretamente em código de máquina compatível com vários SOs. Não precisa de VM
● Compilação muito rápida
● Criado para a nova web
● Opinionated, há uma única maneira de se fazer as coisas
● Não há exceptions. Erros são retornados pelas funções
O básico sobre Go
Porque e como usamos Go na Conta Simples
Motivação
● Estamos criando um banco do zero.
● Queremos criar um sistema que possa escalar daqui alguns anos
● Queremos uma linguagem que nasceu pra nova web e que possa se manter moderna nos próximos anos
● Queremos poder contratar desenvolvedores prontos para trabalharem ou que possam aprender e se adaptar rapidamente
● Queremos criar um sistema que seja performante
● Queremos escolher uma linguagem que nos permita ser produtivo
● Queremos uma linguagem que nos permita aproveitar as melhores tecnologias disponíveis hoje para facilitar a nossa vida
Motivação
Precisamos de uma linguagem que nos permite atender a todos os pontos mencionados
Java 8 vs Go
Porque escolhemos Go?
● Go é uma linguagem altamente opinionated. Mais fácil escrever código em Go
● Mais fácil trabalhar com concurrency em Go
● Go é mais rígido com tipos (valores nulos, ponteiros, referência, slices, etc.)
● Go é mais explícito, o que leva a menos bugs
● A compilação do código é muito rápida, especialmente comparada com Java
● Requer menos dependências para se criar um micro serviço e testá-lo
● Não precisa de uma máquina virtual, compila para quase código de máquina
● É muito fácil criar um micro serviço em Go. Ótimo para sistemas distribuídos
Criando um sistema distribuído em Go
API Gateway
Microservice
gRPC gRPC
gRPC
gRPC
Client
Client
Client Microservice
.
.
.
REST
REST
REST
● Criado para a nova web => facílimo a criação de servidores REST ou de RPC, precisando de poucas linhas e utilizando somente a standard library de Go
● Biblioteca de networking extensa dentro da biblioteca padrão de Go
● Criação de endpoints e chamadas de APIs não necessitam de bibliotecas de terceiros
Criando um sistema distribuído em Go
Sistemas distribuídos em Go
● Mas também há suporte para os mais diversos frameworks e bibliotecas para o desenvolvimento web em Go, como gRPC, Protocol Buffers, JWT, etc.
Sistemas distribuídos em Go
● Suporte para os mais diversos bancos de dados, queues, etc.○ Nos permite escolher a melhor ferramenta para a tarefa
Microservice
SQS
Microservice
Put Read
Sistemas distribuídos em Go
● O código é compilado para código de máquina compatível com os principais SOs: Linux, Windows e MacOS
○ Não precisa necessariamente de containers, apenas jogue o executável no servidor e rode
○ Não precisa de VM
Concorrência
Concorrência
● Altamente performante e concorrente
○ Compilado em código de máquina => nos permite economizar no número de servidores que usamos
○ Concorrência em Go é feita através de Goroutines○ Use a palavra chave go para executar código de maneira concorrente, e criar uma
nova goroutine
Concorrência● Comunicação entre goroutines através de channels
○ Permite compartilhar dados sem utilizar locks○ É blocking. A execução do programa irá esperar o envio de uma mensagem antes de
continuar
● Altamente performante e concorrente
Microservice
Processar pagamento
Enviar notificação
Atualizar limite
Concorrência
. . .
● Altamente performante e concorrente
Microservice
Batch
Gerar relatórios
Enviar relatórios
Concorrência
Produtividade em Go
Produtividade com Go
● Não precisa de um framework. Talvez alguma biblioteca de terceiro como gRPC ou Gorilla (para criação de endpoints). Mas são uma camada fina.
● Mensagens de erro são facilmente entendidas, apesar de não serem tão claras quanto em Elixir
● Go é altamente opinionated○ Há uma forma de se fazer as coisas. Um for loop, um if
● Testes são extremamente fáceis de escrever e rápidos de rodar
● Muito fácil de achar e instalar dependências: github.com/repositorio/biblioteca○ Inclusive dependências em repositórios privados
● Compilação do código muito rápida
● Bugs são menos comuns e mais facilmente resolvidos
● Código altamente explícito○ Mais boilerplate, menos erros
Produtividade com Go
● Go é extremamente produtivo
● Possível criar um micro serviço de geração de relatórios ou de notificações totalmente testado, com um único desenvolvedor, em 1 semana
● Extremamente fácil de aprender
● Comunidade enorme. Fácil de achar a resposta de suas dúvidas no StackOverflow ou em blogs
Produtividade com Go
A comunidade e integrações com Go
● Go foi criado para a nova geração da web
● Possui suporte para os mais diversos frameworks e bibliotecas para o desenvolvimento web
○ i.e. gRPC, JWT, SDKs para o AWS e GCE, Drivers para todos os bancos de dados, etc.
● Comunidade gigante e ativa no nível mundial○ Ainda não muito grande no Brasil, mas crescente
● Algumas das principais ferramentas e banco de dados modernos são escritos em Go
Go Node Python Rust Laravel Ruby
20172018
Alguns projetos em Go
Resolvendo problemas complexos em Go
Quando usar Go?Go é ideal para:
○ Sistemas web em geral
○ Sistemas distribuídos
○ Sistemas que requerem alta performance e/ou uso intenso de CPU
■ Há uma implementação do TensorFlow para Go■ O serviço com maior QPS, e de maior uso intensivo de CPU no Uber é escrito em
Go■ Background services
○ Sistemas que requerem alta escalabilidade
○ Sistemas financeiros
○ Sistemas que requerem alta concorrência
○ CLIs
Quando não usar Go?
● Protótipos e aplicações bootstrapped○ Go pode ser usado para micro serviços, mas é overkill para protótipos e scripts básicos
● Sistemas simples que não requerem muita performance ou garantias de tipos de dado
● Sistemas que requerem controle maior sobre a memória do sistema, como com Rust ou C
● Sistemas de telecomunicações. Use Erlang ou Elixir
● Se precisar de tipos genéricos
Quem está usando Go?
Go em Serviços Financeiros
Características de Serviços Financeiros
● Serviços financeiros hoje estão marcados por grandes bancos e instituições financeiras que usam tecnologias ultrapassadas
● Um setor que, até recentemente, não inovava há muito tempo
● Altamente regulamentado
● Sistemas que não deveriam cair nunca. É a sua conexão com o mundo
● Sistemas que atendem a milhões de pessoas e empresas
● Base de sustentação da economia
● Não pode falhar. Um zero a mais ou a menos pode causar muitos problemas
Go em Serviços Financeiros
Go nos permite desafiar o status quo, criando um sistema moderno, altamente performante, seguro e escalável e que ao mesmo tempo nos permite inovar de forma constante.
● Nos dá acesso às mais novas tecnologias
● Nos permite criar um sistema que possa ser usado por milhões de pessoas ao mesmo tempo
● Concorrência em Go é muito simples e segura
● Temos segurança aritmética e de tipos de dados (i.e. ints de 64 bits)
● Determinante. Compila para código de máquina e para vários SOs. Nos dá a segurança que o código que roda em nossas máquinas, rodará igual no servidor
● Nos permite testar nosso código de forma constante e de maneira muito rápida
● Nos permite ser altamente produtivos, conseguindo trazer a inovação de forma mais rápida para nossos clientes
Fintechs
Conclusão
Conclusão
Use Go
Conclusão
● Go é uma ótima linguagem para criar serviços web modernos, seguros e performantes
● Go permite a utilização do seu sistema com as mais diversas ferramentas
● Go foi criada para a nova web e é ideal para sistemas distribuídos
● Go também é uma ótima escolha para serviços financeiros pela segurança de tipos de dados, aritmética, velocidade e determinismo
● Go é uma linguagem muito produtiva de se trabalhar e fácil de aprender
● Consegue-se trabalhar com concorrência de uma maneira extremamente fácil com Go: use apenas a palavra-chave go e channels
● A comunidade e a adoção de Go por parte das empresas já está muito alta, incluindo Fintechs
● Go não é a linguagem ideal para algumas circunstâncias, como para a criação de protótipos
Obrigado