Com que bibliotecas se escrevem métricas em Go?
Golang
Que métricas? Com que ferramentas vamos a registrar essas métricas?
Para que é que este código foi escrito? Que problema técnico de negócio resolve?
// Tarefa 4 // Num serviço CRUD "típico", em algum momento, alguns métodos começaram a funcionar lentamente e o serviço começou a dar timeout. // O serviço consiste em: // * Balanceador de carga de aplicação (L7) - recepção de pedidos entrantes e terminação TLS // * Backend (rest, java/kotlin ou golang) - processamento de pedidos e lógica de negócio // * Base de dados (postgres) - armazenamento e processamento de consultas SQL // Como agir corretamente para entender a causa dos problemas e desenvolver soluções para melhorar a situação?
// Tarefa 3 // Descreva qual tarefa este código resolve // Quais problemas existem nesta solução? // Como você reescreveria este código?
O que fizeste no trabalho?
O que fazer com a base de dados e o load balancer em caso de problemas de desempenho?
Como aceder ao perfilador pprof no servidor de produção?
Como funciona a partição no PostgreSQL por baixo do capô?
// Tarefa 3 // Descrever qual tarefa este código resolve // Quais problemas existem nesta solução? // Como reescreveria este código? var c int type Trace struct { // Alguns campos aqui } type Sender interface { Send(Trace) } func Do(sender Sender, tr Trace) { c++ if c == 100 { sender.Send(tr) c = 0 } }
Que índices utilizou no trabalho? O que aplicou na prática? Na Wildberries?
Em qual gráfico você viu o problema ao usar pprof?
O que fará quando as prioridades na sua equipa mudarem todos os dias e surgirem novas tarefas urgentes?
Que índices utilizas no PostgreSQL?
Como tornar o Increaser universal — não ligado ao número 100?
Quais problemas existem no código com o contador global? Como corrigir?
// Questão 3 // Descrever qual a tarefa que este código resolve // Quais os problemas nesta solução? // Como reescreveria este código? var c int var mu sync.RWMutex type Trace struct { // Alguns campos aqui } type Sender interface { Send(Trace) } func Do(sender Sender, tr Trace) { mu.Lock() defer mu.Unlock() c++ if c == 100 { go func() { sender.Send(tr) }() c = 0 } }
func normalize2(str []rune) []rune { result := str[:0] for val := range str { if val != ' ' { result = append(re) } } l, r := 0, 0 isSpace := false for i := 0, i < len(str); i++ { val := string(str[i]) if val == " " { if isSpace { continue } else { str[r] = val r++ isSpace = true } } else { str[r] = val r++ isSpace = false } } return str[:r] }
Podes contar como projetaste e implementaste a API REST e gRPC para os serviços internos e externos da plataforma?
O Increaser pode tornar-se uma implementação do Sender? Em que difere logicamente o Increaser do Sender?