SlideShare a Scribd company logo
1 of 180
Synchronous Reads,
Asynchronous Writes
  note to make sure these
  arenā€™t showing up on the
                             Paul Dix
  slides
Where I work at
Know More, a
prelaunch search
startup
hack sweet, sweet code
what does
Synchronous
   Reads
Asynchronous
   Writes
mean?
Data Reads Through
Well it means creating systems that
perform data reads through services.
data reads typically have to be
synchronous because a user is waiting on

                 Services
the operation. So they have to occur
inside the request/response life-cycle.
data writes through a
         messaging or queuing
                system
Often, a user doesnā€™t have to wait for
data to be written to receive a
response. So writes can be done
asynchronously outside of the request/
response life-cycle which mean you can
put them straight into a queue
Loosely
Coupled
Now the             Why?
question is why
in the hell youā€™d
want to do this.
Rails doesnā€™t Scale
Rails doesnā€™t Scale


       Your Database
        doesnā€™t Scale
Monolithic Applications
Also, having your entire application in one code
base and system doesnā€™t scale. This leads to
test suites that take more than 30 minutes to


          Donā€™t Scale
run, deploys that push your entire application
just for a simple update.
if you have
Lots of Trafļ¬c

This could be on the
front end from users or
on the back end from
data processing
Multiple
multiple applications
that have to read
from the same data

                          Applications
store or share business
logic
Multiple
Background
 Processes
      Multiple back end
      processes that need to run
      based on changes in data.
      or if you need data
      replicated and munged
Complex Business
complex business logic that may
have to span multiple systems.



                    Logic
if you have one or
   more of those
    situations...
Services based
  Approach
Java developers who work in...

                  No Talent Hacks
the enterprise
commonly refer
to this as....
Service Oriented Architecture
service oriented
architecture, but thatā€™s
commonly associated with
things like SOAP, WSDL, and
a bunch of other heinous
things.
Scary!
the tools
Synchronous
   Reads
is an approach based on


                  RESTful Services
restful ser vices
which means


                   Descriptive URLs
things like
descriptive URLs
Taking advantage of
    HTTP Verbs
GET
PUT
POST
DELETE
and for that Iā€™d recommend
Sinatra, a web framework
built on top of Rack. Really,
Iā€™d call it a ser vices
                                Sinatra
framework.
serialization format
For your message format you should use
JSON. I know you can use XML, but...

                                    JSON
XML is too
bloated and
           XML Makes Children Cry
complex and
besides, it makes
children cry
I previously glossed over this picture. Itā€™s
something called an asynchronous electric
motor, which is the only image I could conjure
                                                 Asynchronous
up to go with the term ā€œasynchronousā€
                                                    Writes
requires a

                  Messaging System
messaging
system to write
data through
For that I suggest
RabbitMQ , which is a

       RabbitMQ
powerful messaging
system in addition to
having stuff as mundane
as a queue
And youā€™ll of course need a data


                             Data Store
store. I donā€™t care which you
use, but it should probably be
designed to solve the problem
for a particular piece of your
application.
now letā€™s get into
   speciļ¬cs
but ļ¬rst,
a word of warning...
This isnā€™t about new
    applications.
This isnā€™t about green
    ļ¬eld projects.
Itā€™s about solving
existing problems.
ruby programmers
tend to jump on new
                      Look, shiny!
things because, hey
look, shiny!
Donā€™t Go Overboard,
 Donā€™t Over-think
Joel Spolsky calls people
 that exhibit this behavior
ā€œArchitecture Astronautsā€
ā€œSometimes smart thinkers just don't know when to stop, and they create
these absurd, all-encompassing, high-level pictures of the universe that
are all good and ļ¬ne, but don't actually mean anything at all.

These are the people I call Architecture Astronauts. It's very hard to get
them to write code or design programs, because they won't stop thinking
about Architecture.ā€
remember, your
goal is ļ¬rst to    Build Something
build something.
so...
Donā€™t be a space man
with that out of the
        way
letā€™s see what this looks
           like
Standard Rails
 Application
well, hereā€™s your standard
rails application. so you have
rails and your trusty
database
and then you add
some background
  processing...

   and then you realize that you canā€™t do
   everything inside the request/response
   cycle so you add in a background process.
   For now weā€™ll assume youā€™re using a
   database backed queue like dj, bj, or some
   other kind of ā€œjā€.
and then
 you add
memcache...
but wait, then you realize
you need additional
performance so you add
memcache
server, duh!


  and letā€™s not
  forget that itā€™s
  all fronted by
  nginx or apache
and then you need more app
processing power so you add
t wo more ser vers and front
all that by ha proxy
so once youā€™ve done
all that, where do
                      Where to from here?
you go?
maybe you add redis because
you heard Ezra or Chris or
somebody say itā€™s awesome
and scales to inļ¬nity
and then you add
a read database
to eek out a
little more
performance
and the whole time your Rails
application code base is
growing with more logic and
additional background
processing
itā€™s enough to
make a grown
                 makes you cry
man cry
Monolithic Applications
    Do Not Scale
this is why monolithic
applications do not scale. to
make simple changes ...
to this mess, you
end up running
the test suite
and redeploying
the whole thing.
what else can you do?
instead, you can break
     into multiple
      applications
applications, called
    ā€œservicesā€
real world example
to go any farther into the
architecture itā€™ll help to
look at a speciļ¬c real world
example
Letā€™s take something from my
work
millions of RSS and
           Atom feeds
Since weā€™re pre-launch we
deļ¬nitely donā€™t have the too
many users problem. The trafļ¬c
and complexity comes from
having to update millions of rss
and atom feeds
data from external
                 sources
Pulling in real time
engagement from
multiple external
sources
complex business logic
and complex business logic. every
time something enters our system
we have to perform many different
tasks that are interdependent.
Hereā€™s just a taste of it: our feed
fetcher pulls in a new blog post from
somewhere
store the raw content
scrape a summary
check for duplicates
language identiļ¬cation
named entity
 extraction
classify the content as
   spam, adult, etc.
index the content for
       search
run some crazy voodoo
machine learning magic
store it in Hadoop for
     analysis later
run in parallel
  now some of
  these processes
  can be run in
  parallel
run serially
dependent on
previous outputs
different libraries and
       languages
originally we set up
a ser vices based
design that looked
kind of like this. as
you can see there
are a bunch of
interconnections
and itā€™s hard to
comprehend.
troubleshooting
failures was hard.
Each ser vice had to implement

                      HTTP + JSON
an http interface with json
formatted messages. This was
the only method for ser vice-
to-ser vice communication.
Two Problems
engagement and post
   trafļ¬c is bursty
queues behind every
to manage the peaks
in trafļ¬c everyone put
queues behind each of
their ser vices.

                  service
Data owners had to
Data owners had to
notify other ser vices
when an update occured.


           notify everyone
ser vices were tightly
coupled.
Tightly Coupled
make
and tightly
coupled ser vices
make otters cry

 otters
  cry
thus, the idea was born
keep the HTTP
http services
for data reads,
which can be
cached and

        Services for data reads
optimized
push writes through a
         messaging system
data writes through a messaging
system with built in routing. It
also helps if itā€™s optimized for
processing thousands of messages
per second and supports the
pubsub style
Synchronous
   Reads
Sinatra by
 Blake
Mizerany
require 'rubygems'
require 'sinatra'

get '/entries/:id' do
  Entry.find(params[:id]).to_json
end
              now sinatra is awesome
              because it makes creating a
              service this easy.
call services
do it in parallel   do it in parallel
Amazon - 100 services
Google - 1000 servers
multi-threaded and
  asynchronous
    parallelism
Typhoeus
hydra = Typhoeus::Hydra.new

first_request = Typhoeus::Request.new(
  "http://localhost:3000/posts/1.json")
second_request = Typhoeus::Request.new(
  "http://localhost:3000/posts/2.json")
hydra.queue(first_request)
hydra.queue(second_request)
hydra.run
response = first_request.response
response.code
response.body
response.time
response.headers
first_request.on_complete do |response|
  post = Post.new(JSON.parse(response.body))
  # get the first url in the post
  third_request =
    Typhoeus::Request.new(post.links.first)
  third_request.on_complete do |response|
    # do something with that
  end
  hydra.queue third_request

  post
end
Start              Finish
         50 MS

        40 MS

          55 MS

   25 MS

                30 MS
response.handled_response
20.times do
  r = Typhoeus::Request.new(
    "http://localhost:3000/users/1")
  hydra.queue r
end
hydra.run
hydra.cache_setter do |request|
  @cache.set(
    request.cache_key,
    request.response,
    request.cache_timeout) if
      request.cache_timeout
end

hydra.cache_getter do |request|
  @cache.get(request.cache_key)
end
response = Response.new(
  :code => 200,
  :headers => "",
  :body => "{'name' : 'paul'}",
  :time => 0.3)
hydra.stub(:get,
  "http://localhost:3000/users/1"
  ).and_return(response)
request = Typhoeus::Request.new(
  "http://localhost:3000/users/1")
request.on_complete do |response|
  JSON.parse(response.body)
end
hydra.queue request
hydra.run
hydra.stub(:get,
  /http://localhost:3000/users/.*/
  ).and_return(response)
package as gems
versioning
run multiple versions in
       parallel
Asynchronous
   Writes
RabbitMQ
what about Beanstalk,
           Resque, Kestrel, or
               whatever?
so why use RabbitMQ
instead of beanstalk,
resque, kestrel or any
other option?
Pubsub Semantics
Flexible message
     routing
these features enable you to build
an event based system, which is

              Event Based System
exactly what we needed. when
certain updates happen, it should
kick off calculations elsewhere in
the system. Iā€™ll get into that in a bit,
but ļ¬rst some rabbit speciļ¬cs
rabbit is an implementation
of an open protocol called
Advanced Message
Queueing Protocol or AMQP
                              AMQP
itā€™s not just a queue
it has Exchanges and
it has a bunch of
features, but for the
purposes of
Asynchronous Writes,

             Routing Keys too
exchanges and routing
keys are what we care
about most
Rabbit has three
exchange types.

                   Exchange Types
Direct
Fanout
Topic
Message Router
An exchange basically acts as a message
router. Messages get published to it and
it routes the messages to the
appropriate queues.
Example: Processing
 New Feed Entries
So we have a fanout exchange called
entry.write. every queue bound to this
exchange will get messages published to it.
Here we have the three things we want to do.
First, index it for searching. Second, store it in
our key valuer store. Third, index in a
completely separate index used for data
research. So the search is Solr/lucene and the
research is Hadoop. Completely decoupled
   systems.
Thatā€™s how we write entries. Hereā€™s
how we do event based processing on
those writes. so hereā€™s an example
where we have a topic exchange
named ā€˜entry.notifyā€™. queues can be
bound to exchanges. so we have these
three queues
so take the example where
you have a message published
to the exchange with a
routing key of ā€˜insertā€™.
the message would get
routed to the queue
bound with insert and
to the queue bound with
hash
now letā€™s look at a message
with a routing key of
ā€˜update.clicks.rankā€™
based on the bindings, the
message gets dropped into the
update and hash queue (ones
on the right err left?)
error logging
routing key:
domU-12-31-39-07.feed_fetcher
binding:
*.feed_fetcher
binding:
   #
RabbitMQ client
   libraries
AMQP by Aman Gupta
Bunny by Chris Duncan
client = Bunny.new(:host =>
  "mysweetrabbbitserver.pauldix.net")
client.start
exchange = client.exchange(
  "exceptions",
  :type => :topic,
  :durable => true)

exchange.publish(
  "oh noes, an exception!",
  :key => "domU-12-31-39-07.feed_fetcher")
queue = Bunny::Queue.new(
  client, "exceptions.logger")
queue.bind("exceptions", :key => "#")

queue.subscribe do |msg|
  log.error(msg[:payload])
end
async write
considerations
uniqueness

  value uniqueness is hard to enforce.
http://localhost:3000/locks/names/
              pauldix
  one way is to have the
  ser vice responsible
  expose a uniqueness
  getter. so once you GET
  a lock, you write
  through the queue.
no transactions
eventual consistency
Eric Brewerā€™s CAP
                theorem
in brewerā€™s CAP theorem he talked
about the relationship bet ween three
requirements when building
distributed systems. consistency,
availability, and partition tolerance.
consistency
consistency means that an
operation either works
completely or fails. this is also
referred to as atomic
availability
availability is pretty self
explanatory. a service is
available to ser ve requests.
so you can shoot for high
availability
partition tolerance
when you replicate data across multiple
systems, you create the possibility of forming
a partition. this happens when one or more
systems lose connectivity to other systems.
partition tolerance is deļ¬ned formally as ā€œno
set of failures less than total net work failure
is allowed to cause the system to respond
incorrectlyā€
pick two
Werner Vogelsā€™
        eventual consistency
ā€œis a special form of weak
consistency. if no new updates are
made to an object, eventually all
accesses will return the last
updated value.ā€
Synchronous
   Reads
Asynchronous
   Writes
trade-offs
strong consistency
iteration speed
scalability
loose coupling
single purpose services
Services and Ruby can
      be friends


possible for
ser vices and
ruby to be
friends
ļ¬nally, a little


                   Advertising
advertising
http://pauldix.net
My web site is
pauldix.net
http://github/pauldix
my github is
pauldix
my t witter is
@pauldix
                 @pauldix
Iā€™m also writing a book
for Addison Wesley. Itā€™s
called Service Oriented
Design with Ruby and
Rails.

More Related Content

Similar to Synchronous Reads Asynchronous Writes RubyConf 2009

Clustered PHP - DC PHP 2009
Clustered PHP - DC PHP 2009Clustered PHP - DC PHP 2009
Clustered PHP - DC PHP 2009marcelesser
Ā 
Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015:
Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015: Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015:
Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015: Exove
Ā 
Flickr Services
Flickr ServicesFlickr Services
Flickr Servicesroyans
Ā 
Flickr Services
Flickr ServicesFlickr Services
Flickr Servicesroyans
Ā 
Server-Sent Events (real-time HTTP push for HTML5 browsers)
Server-Sent Events (real-time HTTP push for HTML5 browsers)Server-Sent Events (real-time HTTP push for HTML5 browsers)
Server-Sent Events (real-time HTTP push for HTML5 browsers)yay w00t
Ā 
Intro to advanced web development
Intro to advanced web developmentIntro to advanced web development
Intro to advanced web developmentStevie T
Ā 
Microservices: moving parts around
Microservices: moving parts aroundMicroservices: moving parts around
Microservices: moving parts aroundChris Winters
Ā 
Micro services
Micro servicesMicro services
Micro servicesAlex Punnen
Ā 
Hacking Real time Messaging with Firebase
Hacking Real time Messaging with FirebaseHacking Real time Messaging with Firebase
Hacking Real time Messaging with FirebaseArtur Daschevici
Ā 
Multi-threaded web crawler in Ruby
Multi-threaded web crawler in RubyMulti-threaded web crawler in Ruby
Multi-threaded web crawler in RubyPolcode
Ā 
Function as a Service
Function as a ServiceFunction as a Service
Function as a Servicerich fernandez
Ā 
No Hugging, No Learning
No Hugging, No LearningNo Hugging, No Learning
No Hugging, No LearningOlaf Alders
Ā 
Fronteers 20131205 the realtime web
Fronteers 20131205   the realtime webFronteers 20131205   the realtime web
Fronteers 20131205 the realtime webBert Wijnants
Ā 
The Why and How of Applications with APIs and microservices
The Why and How of Applications with APIs and microservicesThe Why and How of Applications with APIs and microservices
The Why and How of Applications with APIs and microservicesRonald Ashri
Ā 
node.js, javascript and the future
node.js, javascript and the futurenode.js, javascript and the future
node.js, javascript and the futureJeff Miccolis
Ā 
Making it fast: Zotonic & Performance
Making it fast: Zotonic & PerformanceMaking it fast: Zotonic & Performance
Making it fast: Zotonic & PerformanceArjan
Ā 
Front Range PHP NoSQL Databases
Front Range PHP NoSQL DatabasesFront Range PHP NoSQL Databases
Front Range PHP NoSQL DatabasesJon Meredith
Ā 
Intro to-html-backbone
Intro to-html-backboneIntro to-html-backbone
Intro to-html-backbonezonathen
Ā 
HTTP Plugin for MySQL!
HTTP Plugin for MySQL!HTTP Plugin for MySQL!
HTTP Plugin for MySQL!Ulf Wendel
Ā 

Similar to Synchronous Reads Asynchronous Writes RubyConf 2009 (20)

Graphql
GraphqlGraphql
Graphql
Ā 
Clustered PHP - DC PHP 2009
Clustered PHP - DC PHP 2009Clustered PHP - DC PHP 2009
Clustered PHP - DC PHP 2009
Ā 
Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015:
Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015: Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015:
Serving the Internet of Things (IoT) with Drupal - DrupalCamp Baltics 2015:
Ā 
Flickr Services
Flickr ServicesFlickr Services
Flickr Services
Ā 
Flickr Services
Flickr ServicesFlickr Services
Flickr Services
Ā 
Server-Sent Events (real-time HTTP push for HTML5 browsers)
Server-Sent Events (real-time HTTP push for HTML5 browsers)Server-Sent Events (real-time HTTP push for HTML5 browsers)
Server-Sent Events (real-time HTTP push for HTML5 browsers)
Ā 
Intro to advanced web development
Intro to advanced web developmentIntro to advanced web development
Intro to advanced web development
Ā 
Microservices: moving parts around
Microservices: moving parts aroundMicroservices: moving parts around
Microservices: moving parts around
Ā 
Micro services
Micro servicesMicro services
Micro services
Ā 
Hacking Real time Messaging with Firebase
Hacking Real time Messaging with FirebaseHacking Real time Messaging with Firebase
Hacking Real time Messaging with Firebase
Ā 
Multi-threaded web crawler in Ruby
Multi-threaded web crawler in RubyMulti-threaded web crawler in Ruby
Multi-threaded web crawler in Ruby
Ā 
Function as a Service
Function as a ServiceFunction as a Service
Function as a Service
Ā 
No Hugging, No Learning
No Hugging, No LearningNo Hugging, No Learning
No Hugging, No Learning
Ā 
Fronteers 20131205 the realtime web
Fronteers 20131205   the realtime webFronteers 20131205   the realtime web
Fronteers 20131205 the realtime web
Ā 
The Why and How of Applications with APIs and microservices
The Why and How of Applications with APIs and microservicesThe Why and How of Applications with APIs and microservices
The Why and How of Applications with APIs and microservices
Ā 
node.js, javascript and the future
node.js, javascript and the futurenode.js, javascript and the future
node.js, javascript and the future
Ā 
Making it fast: Zotonic & Performance
Making it fast: Zotonic & PerformanceMaking it fast: Zotonic & Performance
Making it fast: Zotonic & Performance
Ā 
Front Range PHP NoSQL Databases
Front Range PHP NoSQL DatabasesFront Range PHP NoSQL Databases
Front Range PHP NoSQL Databases
Ā 
Intro to-html-backbone
Intro to-html-backboneIntro to-html-backbone
Intro to-html-backbone
Ā 
HTTP Plugin for MySQL!
HTTP Plugin for MySQL!HTTP Plugin for MySQL!
HTTP Plugin for MySQL!
Ā 

More from pauldix

An introduction to reinforcement learning (rl)
An introduction to reinforcement learning (rl)An introduction to reinforcement learning (rl)
An introduction to reinforcement learning (rl)pauldix
Ā 
Terascale Learning
Terascale LearningTerascale Learning
Terascale Learningpauldix
Ā 
Indexing thousands of writes per second with redis
Indexing thousands of writes per second with redisIndexing thousands of writes per second with redis
Indexing thousands of writes per second with redispauldix
Ā 
Building Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModelBuilding Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModelpauldix
Ā 
Building Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModelBuilding Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModelpauldix
Ā 
Building Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time WebBuilding Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time Webpauldix
Ā 
Machine Learning Techniques for the Semantic Web
Machine Learning Techniques for the Semantic WebMachine Learning Techniques for the Semantic Web
Machine Learning Techniques for the Semantic Webpauldix
Ā 

More from pauldix (7)

An introduction to reinforcement learning (rl)
An introduction to reinforcement learning (rl)An introduction to reinforcement learning (rl)
An introduction to reinforcement learning (rl)
Ā 
Terascale Learning
Terascale LearningTerascale Learning
Terascale Learning
Ā 
Indexing thousands of writes per second with redis
Indexing thousands of writes per second with redisIndexing thousands of writes per second with redis
Indexing thousands of writes per second with redis
Ā 
Building Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModelBuilding Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModel
Ā 
Building Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModelBuilding Web Service Clients with ActiveModel
Building Web Service Clients with ActiveModel
Ā 
Building Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time WebBuilding Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time Web
Ā 
Machine Learning Techniques for the Semantic Web
Machine Learning Techniques for the Semantic WebMachine Learning Techniques for the Semantic Web
Machine Learning Techniques for the Semantic Web
Ā 

Recently uploaded

šŸ¬ The future of MySQL is Postgres šŸ˜
šŸ¬  The future of MySQL is Postgres   šŸ˜šŸ¬  The future of MySQL is Postgres   šŸ˜
šŸ¬ The future of MySQL is Postgres šŸ˜RTylerCroy
Ā 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
Ā 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel AraĆŗjo
Ā 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
Ā 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
Ā 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
Ā 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
Ā 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
Ā 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
Ā 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
Ā 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
Ā 
Scaling API-first ā€“ The story of a global engineering organization
Scaling API-first ā€“ The story of a global engineering organizationScaling API-first ā€“ The story of a global engineering organization
Scaling API-first ā€“ The story of a global engineering organizationRadu Cotescu
Ā 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
Ā 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
Ā 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
Ā 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
Ā 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
Ā 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
Ā 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
Ā 

Recently uploaded (20)

šŸ¬ The future of MySQL is Postgres šŸ˜
šŸ¬  The future of MySQL is Postgres   šŸ˜šŸ¬  The future of MySQL is Postgres   šŸ˜
šŸ¬ The future of MySQL is Postgres šŸ˜
Ā 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Ā 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Ā 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
Ā 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
Ā 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
Ā 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
Ā 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
Ā 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
Ā 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Ā 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Ā 
Scaling API-first ā€“ The story of a global engineering organization
Scaling API-first ā€“ The story of a global engineering organizationScaling API-first ā€“ The story of a global engineering organization
Scaling API-first ā€“ The story of a global engineering organization
Ā 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
Ā 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Ā 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
Ā 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Ā 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
Ā 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Ā 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Ā 

Synchronous Reads Asynchronous Writes RubyConf 2009