Slide 1

Slide 1 text

ADOTANDO NOVAS* TECNOLOGIAS: COMO NÃO TORNAR O SONHO EM PESADELO Renan Ranelli

Slide 2

Slide 2 text

Milhouse (@renanranelli)

Slide 3

Slide 3 text

Software Engineer @ Milhouse (Renan Ranelli)

Slide 4

Slide 4 text

(former) Software Engineer @ Milhouse (Renan Ranelli)

Slide 5

Slide 5 text

AGENDA • Adotar novas tecnologias: pra quê? • O novo na real não é tão “novo” • O que deve guiar a decisão de usar uma tecnologia? • Historias em que “deu ruim” (não seja ousad{a,o}). • Historias em que “deu bom” (na verdade, seja sim) • Reflexão (seja pragmatic{a,o})

Slide 6

Slide 6 text

ADOTAR NOVAS* TECNOLOGIAS: PRA QUÊ?

Slide 7

Slide 7 text

PRA QUÊ? • O mundo da tecnologia não fica “parado”

Slide 8

Slide 8 text

PRA QUÊ? • O mundo da tecnologia não fica “parado”. • Tecnologia ajuda a resolver problemas de negócio.

Slide 9

Slide 9 text

PRA QUÊ? • O mundo da tecnologia não fica “parado”. • Tecnologia ajuda a resolver problemas de negócio. • Evoluções radicais em hardware e infraestrutura nas ultimas 1~2 decadas.

Slide 10

Slide 10 text

PRA QUÊ? • O mundo da tecnologia não fica “parado”. • Tecnologia ajuda a resolver problemas de negócio. • Evoluções radicais em hardware e infraestrutura nas ultimas 1~2 decadas. • É super divertido.

Slide 11

Slide 11 text

CONTEXTO: HARDWARE

Slide 12

Slide 12 text

HARDWARE Procure na internet “no more free lunch”, se você nunca procurou (e leia o artigo!)

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

O QUE TA ROLANDO NA HARDWARE­ LÂNDIA? Procure na internet “no more free lunch”, se você nunca procurou (e leia o artigo!) • O resumo é: – CPU clock não está ficando mais rápido exponencialmente – Mas o número de transistores sim (+ cores) – Não há tanto ganho de performance sequencial* – Concurrency is the next major revolution in how we write software

Slide 15

Slide 15 text

> Efficiency and performance optimization will get more, not less, important

Slide 16

Slide 16 text

Isso foi escrito em março de 2005.

Slide 17

Slide 17 text

2005

Slide 18

Slide 18 text

Em 2005: – Java 5 era novidade. – Windows XP. Vista só em 2007. – Não tinha AWS, Twitter, Netflix. – Ruby on Rails só em dezembro. – Youtube ainda era startup. – Você nunca tinha ouvido falar de Justin Bieber.

Slide 19

Slide 19 text

This was written in March 2005

Slide 20

Slide 20 text

PROGRAMAÇÃO FUNCIONAL (!)

Slide 21

Slide 21 text

PROGRAMAÇÃO FUNCIONAL • Toda* linguagem de programação criada desde então tem concorrência como foco: – Scala, Clojure – Elixir – Go, Rust – A redescoberta de Erlang & Haskell – Kotlin, Nim, Pony, Crystal, etc...

Slide 22

Slide 22 text

PROGRAMAÇÃO FUNCIONAL • Na verdade é coisa velha, que faz muito sentido no mundo de hoje. – 1960 → Lisp – 1973 → ML – 1980s → Lazy langs: Miranda, KRC, SASL, Orwell... – 1986 → Erlang – 1990 → Haskell 1.0

Slide 23

Slide 23 text

https://www.youtube.com/watch?v=njAMVB02Ag0 https://www.youtube.com/watch?v=kiaZd8dmbtI EXISTE VIDA ALÉM DE OOP SE VC QUISER SABER MAIS SOBRE ESSES DOIS TEMAS, VEJA AS MILTALKS:

Slide 24

Slide 24 text

DATABASES (!!)

Slide 25

Slide 25 text

DATABASES • Notou que nos ultimos tempos a galera vem falando de uma cacetada deles ?? • E a culpa disso é na verdade do hardware (denovo).

Slide 26

Slide 26 text

DATABASES

Slide 27

Slide 27 text

DATABASES

Slide 28

Slide 28 text

DATABASES

Slide 29

Slide 29 text

DATABASES • Notou que nos ultimos tempos a galera vem falando de uma cacetada deles ?? • E a culpa disso é na verdade do hardware: – RAM ficou barato. – Disco ficou barato. – Rede ficou barato. – Ta tudo barato (… menos o dollar)

Slide 30

Slide 30 text

DATABASES

Slide 31

Slide 31 text

DATA TECHNOLOGIES

Slide 32

Slide 32 text

CLOUD COMPUTING (!!!)

Slide 33

Slide 33 text

BIG DATA (!!!!)

Slide 34

Slide 34 text

{MACHINE,DEEP} LEARNING (!!!!!!)

Slide 35

Slide 35 text

MACHINE LEARNING (!!!!!!)

Slide 36

Slide 36 text

DA HORA! QUERO USAR TUDO, COMOFAS?

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei.

Slide 39

Slide 39 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech?

Slide 40

Slide 40 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech?

Slide 41

Slide 41 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech? • 3: Quão {central,crítica} é essa tech? – dev < test < deps < deploy & infra < lang <<< DB

Slide 42

Slide 42 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech? • 3: Quão {central,crítica} é essa tech? – dev < test < deps < deploy & infra < lang <<< DB • 4: Comunidade, maturidade, googlabilidade*.

Slide 43

Slide 43 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech? • 3: Quão {central,crítica} é essa tech? – dev < test < deps < deploy & infra < lang <<< DB • 4: Comunidade, maturidade, googlabilidade*. • 5: Tem gente* pra trabalhar com isso?

Slide 44

Slide 44 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech? • 3: Quão {central,crítica} é essa tech? – dev < test < deps < deploy & infra < lang <<< DB • 4: Comunidade, maturidade, googlabilidade*. • 5: Tem gente* pra trabalhar com isso? • 6: Substituível por coisas que vc já tem em prod?

Slide 45

Slide 45 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER • 1: Contexto é rei. • 2: Você precisa mesmo dessa tech? • 3: Quão {central,crítica} é essa tech? – dev < test < deps < deploy & infra < lang <<< DB • 4: Comunidade, maturidade, googlabilidade*. • 5: Tem gente* pra trabalhar com isso? • 6: Substituível por coisas que vc já tem em prod? • 7: Performance, escalabilidade, metricabilidade, operabilidade, suporte, dinheiros.

Slide 46

Slide 46 text

COISAS QUE IMPORTAM NA HORA DE ESCOLHER *: QUAIS AS CONSEQUÊNCIAS DA SUA ESCOLHA? (pensa bem nelas)

Slide 47

Slide 47 text

AGORA VAMOS FALAR DE COISA RUIM

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

• Eu trabalhei no big-scary-rewrite da hospedagem da Locaweb.

Slide 50

Slide 50 text

• Eu trabalhei no big-scary-rewrite da hospedagem da Locaweb. – E quase 100% do tempo no projeto de rewrite bizonho & gigante do provisionamento de hospedagem, em Ruby

Slide 51

Slide 51 text

• Eu trabalhei no big-scary-rewrite da hospedagem da Locaweb. – E quase 100% do tempo no projeto de rewrite bizonho & gigante do provisionamento de hospedagem, em Ruby – … fazendo integrações por API HTTP

Slide 52

Slide 52 text

• Eu trabalhei no big-scary-rewrite da hospedagem da Locaweb. – E quase 100% do tempo no projeto de rewrite bizonho & gigante do provisionamento de hospedagem, em Ruby – … fazendo integrações por API HTTP – … saindo de uma arquitetura “integrada via DB”

Slide 53

Slide 53 text

• Eu trabalhei no big-scary-rewrite da hospedagem da Locaweb. – E quase 100% do tempo no projeto de rewrite bizonho & gigante do provisionamento de hospedagem, em Ruby – … fazendo integrações por API HTTP – … saindo de uma arquitetura “integrada via DB” – … e trocando o banco de dados.

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

Pra fazer isso ai funcionar foram mais de 6 meses. SEIS MESES

Slide 60

Slide 60 text

Moral da história: Trocar o data-storage é *muito* treta.

Slide 61

Slide 61 text

Moral da história: Trocar o data-storage é *muito* treta. Outro case super legal (e honesto!) do Stack Overflow: http://jasonpunyon.com/blog/2015/02/12/provide nce-failure-is-always-an-option/

Slide 62

Slide 62 text

O lado bom: – Ruby mostrou que faz concorrência sim. 1 processo Ruby segurava o tranco do hodor com quase 20x de folga. (teve até talk na Rubyconf sobre isso)

Slide 63

Slide 63 text

LEELA

Slide 64

Slide 64 text

LEELA

Slide 65

Slide 65 text

LEELA (https://github.com/locaweb/leela) • Sistema interno e distribuído de métricas

Slide 66

Slide 66 text

LEELA (https://github.com/locaweb/leela) • Sistema interno e distribuído de métricas • *Muito* parrudo: 100k writes/sec •

Slide 67

Slide 67 text

LEELA (https://github.com/locaweb/leela) • Sistema interno e distribuído de métricas • *Muito* parrudo: 100k writes/sec • • • Haskell, Clojure, C, Ruby, Python, Bash, Javascript • Cassandra & Redis

Slide 68

Slide 68 text

LEELA (https://github.com/locaweb/leela) • Sistema interno e distribuído de métricas • *Muito* parrudo: 100k writes/sec • • • Haskell, Clojure, C, Ruby, Python, Bash, Javascript • Cassandra & Redis • Desenvolvido por 1* cara:

Slide 69

Slide 69 text

LEELA (https://github.com/locaweb/leela) • Sistema interno e distribuído de métricas • *Muito* parrudo: 100k writes/sec • • • Haskell, Clojure, C, Ruby, Python, Bash, Javascript • Cassandra & Redis • Desenvolvido por 1* cara: • … que saiu da Locaweb

Slide 70

Slide 70 text

AGORA VAMOS FALAR DE COISA BOA

Slide 71

Slide 71 text

AGORA VAMOS FALAR DE COISA BOA

Slide 72

Slide 72 text

• Padronização com Ruby-inho. (compartilha muuuuita infraestrutura, bibliotecas internas, CI, testes, etc, etc.) BIG WIN. • Padronização de empacotamento de aplicações, artefatos, monitoração, metricas, deployment. Debão Rulez! • O impacto humano dessas coisas é enorme. • Resolver esses problemas te da folego pra atacar coisas mais importantes e acelera o “ramp-up” da moçada jovem. • Se você já tem essas coisas NÃO AS IGNORE

Slide 73

Slide 73 text

Slide 74

Slide 74 text

Slide 75

Slide 75 text

Slide 76

Slide 76 text

• ESTAMOS CONTRATANDO (principalmente se vc manjar frontend)

Slide 77

Slide 77 text

• As tecnologias que resolvemos usar: – Elixir no backend (!!) [Phoenix]

Slide 78

Slide 78 text

• As tecnologias que resolvemos usar: – Elixir no backend (!!) [Phoenix] – Clojurescript no frontend (!!!!!) [Reagent/React] … foi rewrite

Slide 79

Slide 79 text

• As tecnologias que resolvemos usar: – Elixir no backend (!!) [Phoenix] – Clojurescript no frontend (!!!!!) [Reagent/React] … foi rewrite – Postgresql 9.4, (Cassandra e Kafka em breve) – ElasticSearch, Redis, C#/Mono (!)

Slide 80

Slide 80 text

• As tecnologias que resolvemos usar: – Elixir no backend (!!) [Phoenix] – Clojurescript no frontend (!!!!!) [Reagent/React] … foi rewrite – Postgresql 9.4, (Cassandra e Kafka em breve) – ElasticSearch, Redis, C#/Mono (!) – InfluxDB, Sensu & Grafana – Jenkins, Ansible, Terraform, AWS e muito Bash \o/ – Não tem Docker, microserviços, nem service discovery.

Slide 81

Slide 81 text

• Elixir em produção a 8 meses: 2k commits, 300 PRs, +- 24k linhas de código, 4 devs É tudo programação funcional. (Mas não é vidalouquice!)

Slide 82

Slide 82 text

• Elixir – Baseado na VM do Erlang. Aguenta muita pancada.

Slide 83

Slide 83 text

• Elixir – Baseado na VM do Erlang. Aguenta muita pancada. – Stack Web não perde em nada para o Rails.

Slide 84

Slide 84 text

• Elixir – Baseado na VM do Erlang. Aguenta muita pancada. – Stack Web não perde em nada para o Rails. – Ecossistema ainda jovem, mas em rápida evolução.

Slide 85

Slide 85 text

• Elixir – Baseado na VM do Erlang. Aguenta muita pancada. – Stack Web não perde em nada para o Rails. – Ecossistema ainda jovem, mas em rápida evolução. – Muitas vezes você precisa implementar sua própria lib. (exmagick, client elastic search, json-api, authentication & authorization etc)

Slide 86

Slide 86 text

• Elixir – Baseado na VM do Erlang. Aguenta muita pancada. – Stack Web não perde em nada para o Rails. – Ecossistema ainda jovem, mas em rápida evolução. – Muitas vezes você precisa implementar sua própria lib. (exmagick, client elastic search, json-api, authentication & authorization etc) – Muita treta pra deploy. Não fazemos nada rebuscado como “hot code reload” e afins. (um passo de cada vez)

Slide 87

Slide 87 text

• Clojurescript – Não é javascript.

Slide 88

Slide 88 text

• Clojurescript – Não é javascript.

Slide 89

Slide 89 text

• Clojurescript – Não é javascript. – Reagent é a coisa mais genial que eu descobri desde o que eu descobri o que é um banco de dados.

Slide 90

Slide 90 text

• Clojurescript – Não é javascript. – Reagent é a coisa mais genial que eu descobri desde o que eu descobri o que é um banco de dados. – É LISP (s2), e o ferramental é FANTASTICO. MESMO.

Slide 91

Slide 91 text

• Clojurescript – Não é javascript. – Reagent é a coisa mais genial que eu descobri desde o que eu descobri o que é um banco de dados. – É LISP (s2), e o ferramental é FANTASTICO. MESMO. – Até eu consigo ajudar no frontend. (Fiz meu primeiro CSS em janeiro. Sério.)

Slide 92

Slide 92 text

• Clojurescript – Não é javascript. – Reagent é a coisa mais genial que eu descobri desde o que eu descobri o que é um banco de dados. – É LISP (s2), e o ferramental é FANTASTICO. MESMO. – Até eu consigo ajudar no frontend. (Fiz meu primeiro CSS em janeiro. Sério.) – Erramos bastante, mas no final deu muito bom.

Slide 93

Slide 93 text

• Elasticsearch – Quando decidimos usar, não *precisavamos* na verdade. – Tem gente no time que manja *muito* de Solr, mas nunca tinha usado ES. – Quando funciona é lindo. Quando não funciona é trágico. Vários probleminhas, e a doc é estranha. – Virou um backbone *fundamental* pra várias features do produto. Os usuários *amam*. Foi uma surpresa excelente.

Slide 94

Slide 94 text

• InfluxDB: – É ultra-jovem, versão 0.10 ainda. – Mas é métrica, é tangencial, não pega nada se der ruim. – ... tinha lib pra Erlang, e vários plugins (statsd, collectd, etc) • Grafana: – É só dashboard. Mó facil integrar com o InfluxDB então foi uma escolha no-brainer.

Slide 95

Slide 95 text

• Jenkins: – Começamos com o GO da TW. Escolhemos ele por que parecia Sexy. Ninguém nunca tinha usado. – Depois de brigar um bom tanto com o GO, desistimos. – 2 pessoas do time ja usaram muito o Jenkins. Em menos de 2 dias tava tudo migrado e funcionando. – Por favor, não dê ouvidos ao seu vizinho dizendo “Jenkins is dead”

Slide 96

Slide 96 text

• Cassandra e Kafka: – Temos (eu não) experiência com ambos em produção, e com bastante escala. – Ainda não estamos *precisando*, mas ta quase. – Seguimos a vida sem.

Slide 97

Slide 97 text

No content

Slide 98

Slide 98 text

• Conclusões – Não escolha tecnologia pensando no que está quente e no que faz bem pro currículo. (Faça de conta que vc tem CREA). – Seja BORING nessa hora. Minimize a quantidade de peças móveis no seu stack. Adote uma coisa por vez. – CONHEÇA a tecnologia antes de levar pra prod. Não vacile. Seu cliente não liga se vc usa shiny-tech. – Não faça deploy depois da meia noite. Vá pra casa.

Slide 99

Slide 99 text

OBRIGADO !

Slide 100

Slide 100 text

@renanranelli /rranelli Renan Ranelli (Milhouse) milhouseonsofware.com

Slide 101

Slide 101 text

• http://jasonpunyon.com/blog/2015/02/12/providence-fail ure-is-always-an-option/ • https://www.youtube.com/watch?v=njAMVB02Ag0 • https://www.youtube.com/watch?v=kiaZd8dmbtI