Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Projeto Octopus - Sete anos de história

thiagopradi
November 17, 2017

Projeto Octopus - Sete anos de história

A RubyGem Octopus (https://github.com/thiagopradi/octopus) é a biblioteca mais utilizada para adicionar suporte a Sharding e Replicação com o ActiveRecord. A biblioteca é um resultado de um trabalho efetuado durante o Ruby Summer of Code de 2010, e completa sete anos de existência em 2017. Nesta palestra, irei falar sobre como o projeto iniciou, como seu desenvolvimento foi efetuado e quais as lições aprendidas ao longo destes sete anos de trabalho. As lições vão desde funcionamento dos “internals” do ActiveRecord, melhores práticas de código, até mesmo detalhes de gerenciamento de um projeto open-source.

thiagopradi

November 17, 2017
Tweet

More Decks by thiagopradi

Other Decks in Technology

Transcript

  1. Thiago Pradi • Líder técnico na JobScore • Desenvolvedor de

    Software desde 2008 • Bacharel em Ciência da Computação - FURB • Mestre em Informática - UFPR • Contribuidor do Grupo IMAGO de Pesquisas
  2. octopus: environments: - development - production development: shard_one: host: localhost

    adapter: mysql database: app_development production: shard_one: host: localhost adapter: mysql database: app_production
  3. module Octopus class Proxy attr_accessor :current_shard def initialize() # Initialize

    the connections and other dependencies end def method_missing(*args) conn = select_connection conn.send(method, *args, &block) end private def select_connection safe_connection(shards[current_shard]) end def safe_connection #Safely select the connection end end end
  4. # syntax 1 User .where(name: “Boba”) .using(:brazil) # syntax 2

    Octopus.using(:canada) do User.create(:name => "Thiago") end
  5. # Find user user = User .where(name: “Boba”) .using(:canada) #

    Sends query to canada user.items.create!(name: “Pen”)
  6. octopus: replicated: true environments: - staging - production production: brazil:

    host: 194.32.45.61 adapter: mysql database: octopus_shard4 canada: host: 194.32.45.62 adapter: mysql database: octopus_shard5
  7. # Sent to brazil User.where(name: “Joe”).first # Sent to canada

    User.where(name: “Bob”).all # Sent to master User.create(:name => "Joe")
  8. Kenya Security Plataforma de Inteligência e Gestão de Vulnerabilidades Uso:

    particionar suas tabelas com mais de 1.8 bilhões de registros.
  9. Cliente - Nick Marden Email Service Provider (ESP) Uso: 10

    milhões de emails por dia processados, com diferentes bases por cliente.
  10. # syntax 1 User .where(name: “Boba”) .using(:brazil) # syntax 2

    Octopus.using(:canada) do User.create(:name => "Thiago") end
  11. Fonte: Desconhecido. Projetos de código livre são iguais a projetos

    comerciais: com a diferença que você não tem dinheiro, recursos ou tempo para trabalhar em projetos de código livre