PostgreSQL para um bilhão de usuários

             Fernando Ike de Oliveira

                       B2BR - Grupo TBA


      Setembro de 2008 / PGCon-BR 2008




        Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Breve história...




        2004 libera um conjunto de ferramentas para replicação,
        balanceamento de carga e alta-disponibilidade para
        PostgreSQL.
        Essas ferramentas são conhecidas como PL/Proxy,
        PgBouncer, Skytools.
        A licença é BSD.
        Instalação à partir do código-fonte ou pacotes *.deb *.rpm.
        Oficialmente o Debian, Fedora tem pacotes binários.




                    Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PL/Proxy




      PL/Proxy é uma linguagem usada para chamadas remotas
      e particionamento de banco de dados usando hash dos
      dados.
      PL/Proxy permite criar funções de proxy usando hash para
      especificar destino (base de dados alvo).
      PL/Proxy é comparável à um roteador de rede que
      encaminha a expressão SQL para o instância correta.




                 Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PL/Proxy
Princípio de funcionamento PL/Proxy




   Exemplo
   "SELECT (hashtext(’pgcon1’))%3" = 0
   "SELECT (hashtext(’pgcon2’))%3" = -1
   "SELECT (hashtext(’pgcon3’))%3" = -2
   "SELECT (hashtext(’pgcon4’))%3" = 0
   "SELECT (hashtext(’pgcon5’))%3" = 0
   "SELECT (hashtext(’pgcon6’))%3" = 2
   "SELECT (hashtext(’pgcon7’))%3" = -1
   "SELECT (hashtext(’pgcon8’))%3" = 0
   "SELECT (hashtext(’pgcon9’))%3" = 0
   "SELECT (hashtext(’pgcon10’))%3" = 0




                     Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PL/Proxy
idéias básicas possíveis




        Como um barramento, para todos as servidores
        PostgreSQL
        Tabelas
        Particionamento usando funções de Proxy




                      Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PL/Proxy
Problema




           Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PL/Proxy
Princípio do Proxy




                     Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PL/Proxy
Particionamento de dados




                    Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PgBouncer
Um serviço de pool para o PostgreSQL



        Baixo consumo de recurso (2k por conexão)
        Suporta reconfiguração sem reiniciar o serviço
        Suporta reinício/atualização sem derrubar a conexão
        cliente
        Suporta o protocolo v3 ou superior, somente => 7.4
        O Parse SQL nao eh muito rápido e consome pouco
        tempo de cpu
        Tem uma interface console de gerenciamento
        Tem estrutura sua (própria) estrutura de autenticação mas
        similar ao arquivo similar ao arquivo de senha pg_pwd do
        PostgreSQL.
        Permite autenticação do tipo: trust, texto plano, crypt, md5.


                    Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PgBouncer
Modos de pool




       Sessão (session)
       Transação (transaction)
       Instrução (statement)




                  Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PgBouncer
Sessão




         Quando um cliente conecta, o PgBouncer retira uma
         conexão do pool e entrega para a aplicação
         Ao o cliente desconectar, o PgBouncer re-aloca a conexão
         para o pool. geralmente essa configuração é
         recomendada para aplicações legadas(Por não usarem de
         forma eficiente o pool)




                    Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PgBouncer
Transação




       Servidor mantém para o cliente a conexão somente
       durante a transação. Quando PgBouncer notifica que
       transação acabou, o servidor devolve a conexão para o
       pool.
       Essa opção não deve ser usada com servidor de
       aplicações que gerenciam pool (Jboss, por exemplo)




                  Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
PgBouncer
Instrução (Statement)




        Este é o modo usado usado com o PL/Proxy. Por ser mais
        agressivo, ele retornar o conexão para opool depois que a
        consulta termina.
        Transações muito longas com múltiplos Statements são
        desabilitados neste modo.




                        Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
O que é?




           Skytools são um conjunto de scripts para gerenciar cluster
           de servidores PostgreSQL.
           Desenvolvido em C e Python
           Permitem usar para replicação assíncrona
           Permitem replicar dados particionados nos servidores
           "slave(s)"
           Possível extender usando as API do PgQ




                      Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
Basicamente...




        Centralização de log gerenciamento de exceções.
        Gerenciamento de conexões ao banco de dados
        Gerenciamento de configuração
        Gerenciamento de scrips...




                   Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
Conteúdo




       londiste
       walmgr
       serial_consumer
       queue_mover
       queue_splitter
       table_dispatcher
       cube_dispatcher




                  Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
Londsite é...




         ... um sistema de replicação
         ... Master/Slave(s) como tipo de replicação
         ... de replicação é assíncrona
         ... baseada fortemente nas idéias do no Slony-1.
         ... um replicador baseado em gatilhos




                     Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
Walmgr é...




        ... uma ferramenta para gerenciar replicação por WAL
        ... similar ao pg_standby (contrib)
        ... possível gerenciar replicação baseada em PITR (Warm
        Standby).
        ... escrito em python
        ... uma ferramenta de replicação que usa túnel SSH.




                    Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
queue_mover e queue_splitter



   Ambos
      Usa o PgQ como transporte dos dados
        Move/copia os dados para os servidores Slave
        Move/copia os dados em lote(batch)
        O processamento é/são nos slave(s)

   queue_mover
        Usado para mover/copia os dados para OLTP, Web

   queue_splitter
        Usado para BI



                    Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Skytools
cube_dispacher e table_dispacher

   Ambos
      Ferramentas para replicar dados em tabelas particionadas.
        Usados para preparar os dados para outros servidores

   cube_dispacher
        Prepara os dados para banco de dados do tipo BI, OLAP,
        Cubo...
        Não tem suporte para operações de remoção de registro
        Caso haja duas versões do mesmo registro, ele irá enviar
        somente a última versão.

   table_dispacher
        script para configuraro particionamento de uma ou mais
        tabela.
        possibilita particionar uma tabela por mês, por exemplo.
                     Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Exemplo 1




            Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Exemplo 2




            Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Dúvidas




  Links e Listas de discussão:
      https://developer.skype.com/SkypeGarage/DbProjects/SkypePostgresqlWhitepaper

      https://developer.skype.com/SkypeGarage/DbProjects/PlProxy

      http://pgfoundry.org/mailman/listinfo/plproxy-users

      https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer

      http://pgfoundry.org/mailman/listinfo/pgbouncer-general

      https://developer.skype.com/SkypeGarage/DbProjects/SkyTools

      http://pgfoundry.org/mailman/listinfo/skytools-users

      http://joaocosme.wordpress.com/2008/07/03/comecando-com-o-plproxy/




                      Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools
Conclusão


  Contatos:
     fernando.ike@b2br.com.br
      fernando.ike@gmail.com
      http://www.midstorm.org/~fike/weblog

  PGCon Brasil 2008
     http://pgcon.postgresql.org.br




  Imagens
      Joao Comes http://joaocosme.wordpress.com


               Fernando Ike de Oliveira   Pgbouncer, plproxy, skytools

Skytools, pgbouncer e plproxy

  • 1.
    PostgreSQL para umbilhão de usuários Fernando Ike de Oliveira B2BR - Grupo TBA Setembro de 2008 / PGCon-BR 2008 Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 2.
    Breve história... 2004 libera um conjunto de ferramentas para replicação, balanceamento de carga e alta-disponibilidade para PostgreSQL. Essas ferramentas são conhecidas como PL/Proxy, PgBouncer, Skytools. A licença é BSD. Instalação à partir do código-fonte ou pacotes *.deb *.rpm. Oficialmente o Debian, Fedora tem pacotes binários. Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 3.
    PL/Proxy PL/Proxy é uma linguagem usada para chamadas remotas e particionamento de banco de dados usando hash dos dados. PL/Proxy permite criar funções de proxy usando hash para especificar destino (base de dados alvo). PL/Proxy é comparável à um roteador de rede que encaminha a expressão SQL para o instância correta. Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 4.
    PL/Proxy Princípio de funcionamentoPL/Proxy Exemplo "SELECT (hashtext(’pgcon1’))%3" = 0 "SELECT (hashtext(’pgcon2’))%3" = -1 "SELECT (hashtext(’pgcon3’))%3" = -2 "SELECT (hashtext(’pgcon4’))%3" = 0 "SELECT (hashtext(’pgcon5’))%3" = 0 "SELECT (hashtext(’pgcon6’))%3" = 2 "SELECT (hashtext(’pgcon7’))%3" = -1 "SELECT (hashtext(’pgcon8’))%3" = 0 "SELECT (hashtext(’pgcon9’))%3" = 0 "SELECT (hashtext(’pgcon10’))%3" = 0 Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 5.
    PL/Proxy idéias básicas possíveis Como um barramento, para todos as servidores PostgreSQL Tabelas Particionamento usando funções de Proxy Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 6.
    PL/Proxy Problema Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 7.
    PL/Proxy Princípio do Proxy Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 8.
    PL/Proxy Particionamento de dados Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 9.
    PgBouncer Um serviço depool para o PostgreSQL Baixo consumo de recurso (2k por conexão) Suporta reconfiguração sem reiniciar o serviço Suporta reinício/atualização sem derrubar a conexão cliente Suporta o protocolo v3 ou superior, somente => 7.4 O Parse SQL nao eh muito rápido e consome pouco tempo de cpu Tem uma interface console de gerenciamento Tem estrutura sua (própria) estrutura de autenticação mas similar ao arquivo similar ao arquivo de senha pg_pwd do PostgreSQL. Permite autenticação do tipo: trust, texto plano, crypt, md5. Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 10.
    PgBouncer Modos de pool Sessão (session) Transação (transaction) Instrução (statement) Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 11.
    PgBouncer Sessão Quando um cliente conecta, o PgBouncer retira uma conexão do pool e entrega para a aplicação Ao o cliente desconectar, o PgBouncer re-aloca a conexão para o pool. geralmente essa configuração é recomendada para aplicações legadas(Por não usarem de forma eficiente o pool) Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 12.
    PgBouncer Transação Servidor mantém para o cliente a conexão somente durante a transação. Quando PgBouncer notifica que transação acabou, o servidor devolve a conexão para o pool. Essa opção não deve ser usada com servidor de aplicações que gerenciam pool (Jboss, por exemplo) Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 13.
    PgBouncer Instrução (Statement) Este é o modo usado usado com o PL/Proxy. Por ser mais agressivo, ele retornar o conexão para opool depois que a consulta termina. Transações muito longas com múltiplos Statements são desabilitados neste modo. Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 14.
    Skytools O que é? Skytools são um conjunto de scripts para gerenciar cluster de servidores PostgreSQL. Desenvolvido em C e Python Permitem usar para replicação assíncrona Permitem replicar dados particionados nos servidores "slave(s)" Possível extender usando as API do PgQ Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 15.
    Skytools Basicamente... Centralização de log gerenciamento de exceções. Gerenciamento de conexões ao banco de dados Gerenciamento de configuração Gerenciamento de scrips... Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 16.
    Skytools Conteúdo londiste walmgr serial_consumer queue_mover queue_splitter table_dispatcher cube_dispatcher Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 17.
    Skytools Londsite é... ... um sistema de replicação ... Master/Slave(s) como tipo de replicação ... de replicação é assíncrona ... baseada fortemente nas idéias do no Slony-1. ... um replicador baseado em gatilhos Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 18.
    Skytools Walmgr é... ... uma ferramenta para gerenciar replicação por WAL ... similar ao pg_standby (contrib) ... possível gerenciar replicação baseada em PITR (Warm Standby). ... escrito em python ... uma ferramenta de replicação que usa túnel SSH. Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 19.
    Skytools queue_mover e queue_splitter Ambos Usa o PgQ como transporte dos dados Move/copia os dados para os servidores Slave Move/copia os dados em lote(batch) O processamento é/são nos slave(s) queue_mover Usado para mover/copia os dados para OLTP, Web queue_splitter Usado para BI Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 20.
    Skytools cube_dispacher e table_dispacher Ambos Ferramentas para replicar dados em tabelas particionadas. Usados para preparar os dados para outros servidores cube_dispacher Prepara os dados para banco de dados do tipo BI, OLAP, Cubo... Não tem suporte para operações de remoção de registro Caso haja duas versões do mesmo registro, ele irá enviar somente a última versão. table_dispacher script para configuraro particionamento de uma ou mais tabela. possibilita particionar uma tabela por mês, por exemplo. Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 21.
    Exemplo 1 Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 22.
    Exemplo 2 Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 23.
    Dúvidas Linkse Listas de discussão: https://developer.skype.com/SkypeGarage/DbProjects/SkypePostgresqlWhitepaper https://developer.skype.com/SkypeGarage/DbProjects/PlProxy http://pgfoundry.org/mailman/listinfo/plproxy-users https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer http://pgfoundry.org/mailman/listinfo/pgbouncer-general https://developer.skype.com/SkypeGarage/DbProjects/SkyTools http://pgfoundry.org/mailman/listinfo/skytools-users http://joaocosme.wordpress.com/2008/07/03/comecando-com-o-plproxy/ Fernando Ike de Oliveira Pgbouncer, plproxy, skytools
  • 24.
    Conclusão Contatos: fernando.ike@b2br.com.br fernando.ike@gmail.com http://www.midstorm.org/~fike/weblog PGCon Brasil 2008 http://pgcon.postgresql.org.br Imagens Joao Comes http://joaocosme.wordpress.com Fernando Ike de Oliveira Pgbouncer, plproxy, skytools