Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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