SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Gofer
A scalable stateless proxy for DBI




                                     1
Gofer, logically
• Gofer is
  - A scalable stateless proxy architecture for DBI
  - Transport independent
  - Highly configuable on client and server side
  - Efficient, in CPU time and minimal round-trips
  - Well tested
  - Scalable
  - Cachable
  - Simple and reliable


                                                      2
Gofer, structurally
• Gofer is
  - A simple stateless request/response protocol
  - A DBI proxy driver: DBD::Gofer
  - A request executor module
  - A set of pluggable transport modules
  - An extensible client configuration mechanism


• Development sponsored by Shopzilla.com

                                                   3
Gofer Protocol
• DBI::Gofer::Request & DBI::Gofer::Response
• Simple blessed hashes
  - Request contains all required information to
    connect and execute the requested methods.
  - Response contains results from methods calls,
    including result sets (rows of data).
• Serialized and transported by transport
  modules like DBI::Gofer::Transport::http




                                                    4
Using DBD::Gofer
• Via DSN
 - By adding a prefix
 $dsn = “dbi:Driver:dbname”;
 $dsn = “dbi:Gofer:transport=foo;dsn=$dsn”;


• Via DBI_AUTOPROXY environment variable
 - Automatically applies to all DBI connect calls
 $ export DBI_AUTOPROXY=“dbi:Gofer:transport=foo”;
 - No code changes required!



                                                     5
Gofer Transports
• DBI::Gofer::Transport::null
  - The ‘null’ transport.
  - Serializes request object,
    transports it nowhere,
    then deserializes and passes it to
    DBI::Gofer::Execute to execute
  - Serializes response object,
    transports it nowhere,
    then deserializes and returns it to caller
  - Very useful for testing.
DBI_AUTOPROXY=“dbi:Gofer:transport=null”

                                                 6
Gofer Transports
• DBD::Gofer::Transport::stream (ssh)
  - Can ssh to remote system to self-start server
     ssh -xq user@host.domain 
     perl -MDBI::Gofer::Transport::stream 
     -e run_stdio_hex
  - Automatically reconnects if required
  - ssh gives you security and optional compression
DBI_AUTOPROXY=’dbi:Gofer:transport=stream
;url=ssh:user@host.domain’




                                                      7
Gofer Transports
• DBD::Gofer::Transport::http
 - Sends requests as http POST requests
 - Server typically Apache mod_perl running
   DBI::Gofer::Transport::http
 - Very flexible server-side configuration options
 - Can use https for security
 - Can use web techniques for scaling and high-
   availability. Will support web caching.
DBI_AUTOPROXY=’dbi:Gofer:transport=http
;url=http://example.com/gofer’


                                                   8
Gofer Transports
• DBD::Gofer::Transport::gearman
 - Distributes requests to a pool of workers
 - Gearman a lightweight distributed job queue
   http://www.danga.com/gearman
 - Gearman is implemented by the same people who
   wrote memcached, perlbal, mogileFS, & DJabberd


DBI_AUTOPROXY=’dbi:Gofer:transport=gearman
;url=http://example.com/gofer’




                                                    9
Pooling via gearman vs http
• I haven’t compared them in use myself yet
+ Gearman may have lower latency
+ Gearman spreads load over multiple machines
  without need for load-balancer
+ Gearman coalescing may be beneficial
+ Gearman async client may work well with POE
- Gearman clients need to be told about servers
• More gearman info http://danga.com/words/
  2007_04_linuxfest_nw/linuxfest.pdf (p61+)

                                                  10
DBD::Gofer
• A proxy driver
• Accumulates details of DBI method calls
• Delays forwarding request for as long as
    possible
•   Aims to be as ‘transparent’ as possible
•   Policy mechanism allows fine-grained tuning
    to trade transparency for speed
•   execute_array() is a single round-trip



                                                 11
DBD::Gofer::Policy::*
• Three policies supplied: pedantic, classic, and
    rush. Classic is the default.
•   Policies are implemented as classes
•   Currently 22 individual items within a policy
•   Policy items can be dynamic methods
•   Policy is selected via DSN:
DBI_AUTOPROXY=“dbi:Gofer:transport=null
;policy=pedantic”




                                                    12
Round-trips per Policy
                             pedantic classic       rush
                                           ✓
$dbh = DBI->connect_cached   connect()


                                ✓
$dbh->ping

                                ✓         if not     if not
$dbh->quote                              default    default

                                ✓
$sth = $dbh->prepare
                                ✓          ✓          ✓
$sth->execute
$sth->{NUM_OF_FIELDS}
$sth->fetchrow_array
                                ✓          ✓        cached
$dbh->tables                                       after first




                                                                13
Gofer Caveats
• State-less-ness has implications
  - No transactions. AutoCommit only.
  - Can’t alter $dbh attributes after connect
  - Can’t use temp tables, locks, and other per-connection
    persistent state, except via stored procedures
  - Code using last_insert_id needs a (simple) change
  - See the docs for a few other very obscure caveats




                                                             14
An Example
Using Gofer for Connection Pooling




                                     15
The Problem
               40 worker processes per ser ver
    Apache

                                  +vers
     Worker
     Worker
     Worker
     Worker
     Worker
                            150 ser
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker                                          Database
     Worker
     Worker                                           Server
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker

                              =
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
                             1 overloaded database
     Worker
     Workers


-

                                                                16
A Solution
                        A ‘database proxy’ that
    Apache
                        does connection pooling
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker                                              Database
     Worker
     Worker                                               Server
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
                                  Holds a few
     Worker
     Worker
     Worker
     Worker
     Worker
                               connections open
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Workers
                                                    Repeat for all ser vers
               Uses them to ser vice DBI requests
-

                                                                              17
An Implementation
                 Standard apache+mod_perl
    Apache
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
                                              DBI + DBD::*
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
                           Apache

     Worker                                                  Database
     Worker
     Worker                                                   Server
     Worker
     Worker
     Worker                         !quot;#$%#&
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
     Worker
                               DBI::Gofer::Execute and
     Worker
     Worker
     Worker
     Worker
                             DBI::Gofer::Transport::http
     Worker
     Worker
     Workers
                          modules implement stateless proxy

-       DBD::Gofer with http transport

                                                                        18
Load Balance and Cache
                                                                                                           High performance
                                                                                                           load balancing
 server




                                                            Apache running DBI Gofer
                                                                                                           and fail-over
  with
   40
workers
                                                                                                                   Far fewer db

                             HTTP Load Balancer and Cache
                                                                                                                   connections
                                                                                       Workers



   x      Many = 6000 db
                                                                                                 Gofer          Database
  150     web
               connections                                                                                       Server
                                                                                                 Servers
          servers
servers


                                                            Apache running DBI Gofer




                                                                                       Workers

                                                                                                           Caching results would
                                                                                                           reduce db load even
                                                                                                           further (not yet implemented)
   -                                      New middle tier

                                                                                                                                       19
Error Handling
• DBD::Gofer can automatically retry on failure
DBI_AUTOPROXY=“dbi:Gofer:transport=null
;retry_limit=3”
• Default behaviour is to retry if
                                      is true
     $request->is_idemponent
  - looks at SQL returns true for most SELECTs
• Default is retry_limit=0, so disabled
• You can define your own behaviour:
  DBI->connect(..., {
      go_retry_hook => sub { ... },
  });



                                                  20
DBD::Proxy vs DBD::Gofer
                                    DBD::Proxy   DBD::Gofer
                                        ✓
      Supports transactions                       ✗(not yet)
                                        ✓
   Supports very large results                   ✗(memory)
                                                      ✓
    Automatic retry on error            ✗
                                                      ✓
         Large test suite               ✗
                                                      ✓
       Minimal round-trips              ✗
                                                      ✓
   Modular & Pluggable classes          ✗
                                                      ✓
       Tunable via Policies             ✗
                                                      ✓
            Scalable                    ✗
                                                      ✓
       Connection pooling               ✗
Can support client and web caches                 ✗(not yet)
                                        ✗


                                                               21
Gofer’s Future
• Caching for http transport
• Optional JSON serialization
• Caching in DBD::Gofer
• Make state-less-ness optional
• Patches welcome!



                                  22
Future: http caching
• Potential big win
• DBD::Gofer needs to indicate cache-ability
 - via appropriate http headers
•Server side needs to agree
 - and respond with appropriate http headers
•Caching then happens just like for web pages
 - if there’s a web cache between client and server
• Patches welcome!
                                                      23
Future: JSON
• Turns DBI into a web service!
 - Service Oriented Architecture anyone?
•Accessible to anything
 - that can talk JSON
•Clients could be JavaScript, Java, ...
 - and various languages that begin with P or
• Patches welcome!

                                                24
Future: Client Caching
• DBD::Gofer could access a cache
 - Use serialized request as key to cache
 - If entry found then return that response
•Plug-able caching
 - Would include memcached to give a
   distributed shared cache
• Patches welcome!

                                              25
Future: Transactions
• State-less-ness could be made optional
 - If transport layer being used agrees
 - For http that means KeepAlive
 - Easiest to implement for stream / ssh
•Would be enabled by
    AutoCommit => 0
    $dbh->begin_work

• Patches welcome!
                                           26
Questions?


             27

Weitere ähnliche Inhalte

Was ist angesagt?

001 hbase introduction
001 hbase introduction001 hbase introduction
001 hbase introductionScott Miao
 
004 architecture andadvanceduse
004 architecture andadvanceduse004 architecture andadvanceduse
004 architecture andadvanceduseScott Miao
 
Zero-downtime Hadoop/HBase Cross-datacenter Migration
Zero-downtime Hadoop/HBase Cross-datacenter MigrationZero-downtime Hadoop/HBase Cross-datacenter Migration
Zero-downtime Hadoop/HBase Cross-datacenter MigrationScott Miao
 
캐시 분산처리 인프라
캐시 분산처리 인프라캐시 분산처리 인프라
캐시 분산처리 인프라Park Chunduck
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기OnGameServer
 
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Hiroshi Ono
 
Zend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsZend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsEnrico Zimuel
 
Ruby on Rails Security
Ruby on Rails SecurityRuby on Rails Security
Ruby on Rails Securityamiable_indian
 
Nllug 2010-web-services
Nllug 2010-web-servicesNllug 2010-web-services
Nllug 2010-web-servicesBill Buchan
 
Memcached: What is it and what does it do? (PHP Version)
Memcached: What is it and what does it do? (PHP Version)Memcached: What is it and what does it do? (PHP Version)
Memcached: What is it and what does it do? (PHP Version)Brian Moon
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability BpJ2EE Performance And Scalability Bp
J2EE Performance And Scalability BpChris Adkin
 
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...srisatish ambati
 
Lightweight Grids With Terracotta
Lightweight Grids With TerracottaLightweight Grids With Terracotta
Lightweight Grids With TerracottaPT.JUG
 
Tiery Eyed
Tiery EyedTiery Eyed
Tiery EyedZendCon
 
Turbocharging php applications with zend server
Turbocharging php applications with zend serverTurbocharging php applications with zend server
Turbocharging php applications with zend serverEric Ritchie
 
Zend Server: A Guided Tour
Zend Server: A Guided TourZend Server: A Guided Tour
Zend Server: A Guided TourShahar Evron
 

Was ist angesagt? (20)

001 hbase introduction
001 hbase introduction001 hbase introduction
001 hbase introduction
 
004 architecture andadvanceduse
004 architecture andadvanceduse004 architecture andadvanceduse
004 architecture andadvanceduse
 
Zero-downtime Hadoop/HBase Cross-datacenter Migration
Zero-downtime Hadoop/HBase Cross-datacenter MigrationZero-downtime Hadoop/HBase Cross-datacenter Migration
Zero-downtime Hadoop/HBase Cross-datacenter Migration
 
All The Little Pieces
All The Little PiecesAll The Little Pieces
All The Little Pieces
 
Drupal And The Non Profit Agency
Drupal And The Non Profit Agency  Drupal And The Non Profit Agency
Drupal And The Non Profit Agency
 
캐시 분산처리 인프라
캐시 분산처리 인프라캐시 분산처리 인프라
캐시 분산처리 인프라
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
Solving_the_C20K_problem_PHP_Performance_and_Scalability-phpquebec_2009
 
Usenix lisa 2011
Usenix lisa 2011Usenix lisa 2011
Usenix lisa 2011
 
Zend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsZend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applications
 
Ruby on Rails Security
Ruby on Rails SecurityRuby on Rails Security
Ruby on Rails Security
 
Apache con 2011 gd
Apache con 2011 gdApache con 2011 gd
Apache con 2011 gd
 
Nllug 2010-web-services
Nllug 2010-web-servicesNllug 2010-web-services
Nllug 2010-web-services
 
Memcached: What is it and what does it do? (PHP Version)
Memcached: What is it and what does it do? (PHP Version)Memcached: What is it and what does it do? (PHP Version)
Memcached: What is it and what does it do? (PHP Version)
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability BpJ2EE Performance And Scalability Bp
J2EE Performance And Scalability Bp
 
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
 
Lightweight Grids With Terracotta
Lightweight Grids With TerracottaLightweight Grids With Terracotta
Lightweight Grids With Terracotta
 
Tiery Eyed
Tiery EyedTiery Eyed
Tiery Eyed
 
Turbocharging php applications with zend server
Turbocharging php applications with zend serverTurbocharging php applications with zend server
Turbocharging php applications with zend server
 
Zend Server: A Guided Tour
Zend Server: A Guided TourZend Server: A Guided Tour
Zend Server: A Guided Tour
 

Ähnlich wie Gofer 200707

DBD::Gofer 200809
DBD::Gofer 200809DBD::Gofer 200809
DBD::Gofer 200809Tim Bunce
 
Oozie sweet
Oozie sweetOozie sweet
Oozie sweetmislam77
 
Rails Conf Europe 2007 Notes
Rails Conf  Europe 2007  NotesRails Conf  Europe 2007  Notes
Rails Conf Europe 2007 NotesRoss Lawley
 
Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2Jim Jagielski
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment Evaldo Felipe
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderSadayuki Furuhashi
 
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI server
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI serverPyruvate, a reasonably fast, non-blocking, multithreaded WSGI server
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI serverPloneFoundation
 
Golang @ Tokopedia
Golang @ TokopediaGolang @ Tokopedia
Golang @ TokopediaQasim Zaidi
 
Apache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBApache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBMongoDB
 
May 2012 HUG: Oozie: Towards a scalable Workflow Management System for Hadoop
May 2012 HUG: Oozie: Towards a scalable Workflow Management System for HadoopMay 2012 HUG: Oozie: Towards a scalable Workflow Management System for Hadoop
May 2012 HUG: Oozie: Towards a scalable Workflow Management System for HadoopYahoo Developer Network
 
HyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQLHyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQLEvan Volgas
 
How to Upgrade Your Database Plan on Heroku and Rails Setup?
How to Upgrade Your Database Plan on Heroku and Rails Setup?How to Upgrade Your Database Plan on Heroku and Rails Setup?
How to Upgrade Your Database Plan on Heroku and Rails Setup?Katy Slemon
 
Ruby on Rails and Docker - Why should I care?
Ruby on Rails and Docker - Why should I care?Ruby on Rails and Docker - Why should I care?
Ruby on Rails and Docker - Why should I care?Adam Hodowany
 

Ähnlich wie Gofer 200707 (20)

Os Bunce
Os BunceOs Bunce
Os Bunce
 
DBD::Gofer 200809
DBD::Gofer 200809DBD::Gofer 200809
DBD::Gofer 200809
 
Os Furlong
Os FurlongOs Furlong
Os Furlong
 
Oozie sweet
Oozie sweetOozie sweet
Oozie sweet
 
Rails Conf Europe 2007 Notes
Rails Conf  Europe 2007  NotesRails Conf  Europe 2007  Notes
Rails Conf Europe 2007 Notes
 
October 2013 HUG: Oozie 4.x
October 2013 HUG: Oozie 4.xOctober 2013 HUG: Oozie 4.x
October 2013 HUG: Oozie 4.x
 
Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2Acus08 Advanced Load Balancing Apache2.2
Acus08 Advanced Load Balancing Apache2.2
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI server
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI serverPyruvate, a reasonably fast, non-blocking, multithreaded WSGI server
Pyruvate, a reasonably fast, non-blocking, multithreaded WSGI server
 
Golang @ Tokopedia
Golang @ TokopediaGolang @ Tokopedia
Golang @ Tokopedia
 
Apache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBApache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDB
 
Get your teeth into Plack
Get your teeth into PlackGet your teeth into Plack
Get your teeth into Plack
 
May 2012 HUG: Oozie: Towards a scalable Workflow Management System for Hadoop
May 2012 HUG: Oozie: Towards a scalable Workflow Management System for HadoopMay 2012 HUG: Oozie: Towards a scalable Workflow Management System for Hadoop
May 2012 HUG: Oozie: Towards a scalable Workflow Management System for Hadoop
 
Dev ops for developers
Dev ops for developersDev ops for developers
Dev ops for developers
 
DevOps for Developers
DevOps for DevelopersDevOps for Developers
DevOps for Developers
 
Hadoop in a Windows Shop - CHUG - 20120416
Hadoop in a Windows Shop - CHUG - 20120416Hadoop in a Windows Shop - CHUG - 20120416
Hadoop in a Windows Shop - CHUG - 20120416
 
HyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQLHyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQL
 
How to Upgrade Your Database Plan on Heroku and Rails Setup?
How to Upgrade Your Database Plan on Heroku and Rails Setup?How to Upgrade Your Database Plan on Heroku and Rails Setup?
How to Upgrade Your Database Plan on Heroku and Rails Setup?
 
Ruby on Rails and Docker - Why should I care?
Ruby on Rails and Docker - Why should I care?Ruby on Rails and Docker - Why should I care?
Ruby on Rails and Docker - Why should I care?
 

Mehr von oscon2007

J Ruby Whirlwind Tour
J Ruby Whirlwind TourJ Ruby Whirlwind Tour
J Ruby Whirlwind Touroscon2007
 
Solr Presentation5
Solr Presentation5Solr Presentation5
Solr Presentation5oscon2007
 
Os Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman WiifmOs Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman Wiifmoscon2007
 
Performance Whack A Mole
Performance Whack A MolePerformance Whack A Mole
Performance Whack A Moleoscon2007
 
Os Lanphier Brashears
Os Lanphier BrashearsOs Lanphier Brashears
Os Lanphier Brashearsoscon2007
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swposcon2007
 
Os Berlin Dispelling Myths
Os Berlin Dispelling MythsOs Berlin Dispelling Myths
Os Berlin Dispelling Mythsoscon2007
 
Os Keysholistic
Os KeysholisticOs Keysholistic
Os Keysholisticoscon2007
 
Os Jonphillips
Os JonphillipsOs Jonphillips
Os Jonphillipsoscon2007
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdatedoscon2007
 
Adventures In Copyright Reform
Adventures In Copyright ReformAdventures In Copyright Reform
Adventures In Copyright Reformoscon2007
 
Railsconf2007
Railsconf2007Railsconf2007
Railsconf2007oscon2007
 
Oscon Mitchellbaker
Oscon MitchellbakerOscon Mitchellbaker
Oscon Mitchellbakeroscon2007
 

Mehr von oscon2007 (20)

J Ruby Whirlwind Tour
J Ruby Whirlwind TourJ Ruby Whirlwind Tour
J Ruby Whirlwind Tour
 
Solr Presentation5
Solr Presentation5Solr Presentation5
Solr Presentation5
 
Os Borger
Os BorgerOs Borger
Os Borger
 
Os Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman WiifmOs Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman Wiifm
 
Yuicss R7
Yuicss R7Yuicss R7
Yuicss R7
 
Performance Whack A Mole
Performance Whack A MolePerformance Whack A Mole
Performance Whack A Mole
 
Os Fogel
Os FogelOs Fogel
Os Fogel
 
Os Lanphier Brashears
Os Lanphier BrashearsOs Lanphier Brashears
Os Lanphier Brashears
 
Os Tucker
Os TuckerOs Tucker
Os Tucker
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swp
 
Os Berlin Dispelling Myths
Os Berlin Dispelling MythsOs Berlin Dispelling Myths
Os Berlin Dispelling Myths
 
Os Kimsal
Os KimsalOs Kimsal
Os Kimsal
 
Os Pruett
Os PruettOs Pruett
Os Pruett
 
Os Alrubaie
Os AlrubaieOs Alrubaie
Os Alrubaie
 
Os Keysholistic
Os KeysholisticOs Keysholistic
Os Keysholistic
 
Os Jonphillips
Os JonphillipsOs Jonphillips
Os Jonphillips
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdated
 
Adventures In Copyright Reform
Adventures In Copyright ReformAdventures In Copyright Reform
Adventures In Copyright Reform
 
Railsconf2007
Railsconf2007Railsconf2007
Railsconf2007
 
Oscon Mitchellbaker
Oscon MitchellbakerOscon Mitchellbaker
Oscon Mitchellbaker
 

Kürzlich hochgeladen

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 

Kürzlich hochgeladen (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

Gofer 200707

  • 1. Gofer A scalable stateless proxy for DBI 1
  • 2. Gofer, logically • Gofer is - A scalable stateless proxy architecture for DBI - Transport independent - Highly configuable on client and server side - Efficient, in CPU time and minimal round-trips - Well tested - Scalable - Cachable - Simple and reliable 2
  • 3. Gofer, structurally • Gofer is - A simple stateless request/response protocol - A DBI proxy driver: DBD::Gofer - A request executor module - A set of pluggable transport modules - An extensible client configuration mechanism • Development sponsored by Shopzilla.com 3
  • 4. Gofer Protocol • DBI::Gofer::Request & DBI::Gofer::Response • Simple blessed hashes - Request contains all required information to connect and execute the requested methods. - Response contains results from methods calls, including result sets (rows of data). • Serialized and transported by transport modules like DBI::Gofer::Transport::http 4
  • 5. Using DBD::Gofer • Via DSN - By adding a prefix $dsn = “dbi:Driver:dbname”; $dsn = “dbi:Gofer:transport=foo;dsn=$dsn”; • Via DBI_AUTOPROXY environment variable - Automatically applies to all DBI connect calls $ export DBI_AUTOPROXY=“dbi:Gofer:transport=foo”; - No code changes required! 5
  • 6. Gofer Transports • DBI::Gofer::Transport::null - The ‘null’ transport. - Serializes request object, transports it nowhere, then deserializes and passes it to DBI::Gofer::Execute to execute - Serializes response object, transports it nowhere, then deserializes and returns it to caller - Very useful for testing. DBI_AUTOPROXY=“dbi:Gofer:transport=null” 6
  • 7. Gofer Transports • DBD::Gofer::Transport::stream (ssh) - Can ssh to remote system to self-start server ssh -xq user@host.domain perl -MDBI::Gofer::Transport::stream -e run_stdio_hex - Automatically reconnects if required - ssh gives you security and optional compression DBI_AUTOPROXY=’dbi:Gofer:transport=stream ;url=ssh:user@host.domain’ 7
  • 8. Gofer Transports • DBD::Gofer::Transport::http - Sends requests as http POST requests - Server typically Apache mod_perl running DBI::Gofer::Transport::http - Very flexible server-side configuration options - Can use https for security - Can use web techniques for scaling and high- availability. Will support web caching. DBI_AUTOPROXY=’dbi:Gofer:transport=http ;url=http://example.com/gofer’ 8
  • 9. Gofer Transports • DBD::Gofer::Transport::gearman - Distributes requests to a pool of workers - Gearman a lightweight distributed job queue http://www.danga.com/gearman - Gearman is implemented by the same people who wrote memcached, perlbal, mogileFS, & DJabberd DBI_AUTOPROXY=’dbi:Gofer:transport=gearman ;url=http://example.com/gofer’ 9
  • 10. Pooling via gearman vs http • I haven’t compared them in use myself yet + Gearman may have lower latency + Gearman spreads load over multiple machines without need for load-balancer + Gearman coalescing may be beneficial + Gearman async client may work well with POE - Gearman clients need to be told about servers • More gearman info http://danga.com/words/ 2007_04_linuxfest_nw/linuxfest.pdf (p61+) 10
  • 11. DBD::Gofer • A proxy driver • Accumulates details of DBI method calls • Delays forwarding request for as long as possible • Aims to be as ‘transparent’ as possible • Policy mechanism allows fine-grained tuning to trade transparency for speed • execute_array() is a single round-trip 11
  • 12. DBD::Gofer::Policy::* • Three policies supplied: pedantic, classic, and rush. Classic is the default. • Policies are implemented as classes • Currently 22 individual items within a policy • Policy items can be dynamic methods • Policy is selected via DSN: DBI_AUTOPROXY=“dbi:Gofer:transport=null ;policy=pedantic” 12
  • 13. Round-trips per Policy pedantic classic rush ✓ $dbh = DBI->connect_cached connect() ✓ $dbh->ping ✓ if not if not $dbh->quote default default ✓ $sth = $dbh->prepare ✓ ✓ ✓ $sth->execute $sth->{NUM_OF_FIELDS} $sth->fetchrow_array ✓ ✓ cached $dbh->tables after first 13
  • 14. Gofer Caveats • State-less-ness has implications - No transactions. AutoCommit only. - Can’t alter $dbh attributes after connect - Can’t use temp tables, locks, and other per-connection persistent state, except via stored procedures - Code using last_insert_id needs a (simple) change - See the docs for a few other very obscure caveats 14
  • 15. An Example Using Gofer for Connection Pooling 15
  • 16. The Problem 40 worker processes per ser ver Apache +vers Worker Worker Worker Worker Worker 150 ser Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Database Worker Worker Server Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker = Worker Worker Worker Worker Worker Worker Worker Worker Worker 1 overloaded database Worker Workers - 16
  • 17. A Solution A ‘database proxy’ that Apache does connection pooling Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Database Worker Worker Server Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Holds a few Worker Worker Worker Worker Worker connections open Worker Worker Worker Worker Worker Worker Worker Worker Workers Repeat for all ser vers Uses them to ser vice DBI requests - 17
  • 18. An Implementation Standard apache+mod_perl Apache Worker Worker Worker Worker Worker Worker DBI + DBD::* Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Apache Worker Database Worker Worker Server Worker Worker Worker !quot;#$%#& Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker DBI::Gofer::Execute and Worker Worker Worker Worker DBI::Gofer::Transport::http Worker Worker Workers modules implement stateless proxy - DBD::Gofer with http transport 18
  • 19. Load Balance and Cache High performance load balancing server Apache running DBI Gofer and fail-over with 40 workers Far fewer db HTTP Load Balancer and Cache connections Workers x Many = 6000 db Gofer Database 150 web connections Server Servers servers servers Apache running DBI Gofer Workers Caching results would reduce db load even further (not yet implemented) - New middle tier 19
  • 20. Error Handling • DBD::Gofer can automatically retry on failure DBI_AUTOPROXY=“dbi:Gofer:transport=null ;retry_limit=3” • Default behaviour is to retry if is true $request->is_idemponent - looks at SQL returns true for most SELECTs • Default is retry_limit=0, so disabled • You can define your own behaviour: DBI->connect(..., { go_retry_hook => sub { ... }, }); 20
  • 21. DBD::Proxy vs DBD::Gofer DBD::Proxy DBD::Gofer ✓ Supports transactions ✗(not yet) ✓ Supports very large results ✗(memory) ✓ Automatic retry on error ✗ ✓ Large test suite ✗ ✓ Minimal round-trips ✗ ✓ Modular & Pluggable classes ✗ ✓ Tunable via Policies ✗ ✓ Scalable ✗ ✓ Connection pooling ✗ Can support client and web caches ✗(not yet) ✗ 21
  • 22. Gofer’s Future • Caching for http transport • Optional JSON serialization • Caching in DBD::Gofer • Make state-less-ness optional • Patches welcome! 22
  • 23. Future: http caching • Potential big win • DBD::Gofer needs to indicate cache-ability - via appropriate http headers •Server side needs to agree - and respond with appropriate http headers •Caching then happens just like for web pages - if there’s a web cache between client and server • Patches welcome! 23
  • 24. Future: JSON • Turns DBI into a web service! - Service Oriented Architecture anyone? •Accessible to anything - that can talk JSON •Clients could be JavaScript, Java, ... - and various languages that begin with P or • Patches welcome! 24
  • 25. Future: Client Caching • DBD::Gofer could access a cache - Use serialized request as key to cache - If entry found then return that response •Plug-able caching - Would include memcached to give a distributed shared cache • Patches welcome! 25
  • 26. Future: Transactions • State-less-ness could be made optional - If transport layer being used agrees - For http that means KeepAlive - Easiest to implement for stream / ssh •Would be enabled by AutoCommit => 0 $dbh->begin_work • Patches welcome! 26