Gilles Dubuc - Barcelona Facebook developer garage - Presentation Transcript
Speaker: Gilles Dubuc
non-profit ad network
non-profit ad network
lessons learned
BigApp (daily active users)
Inc.
advertisement
$$$
advertisement
$$$
SmallApp PequeñoApp PetiteApp
Ltd SL SARL
Why create a non-profit ad network?
come on in,
BigApp (daily active users)
you’ll make a quick buck
Inc.
advertisement
$$$
advertisement
$$$
SmallApp PequeñoApp PetiteApp
Ltd SL SARL
Why create a non-profit ad network?
already has a userbase and
sells ad space to other application makers
come on in,
BigApp (daily active users)
you’ll make a quick buck
Inc.
advertisement
$$$
advertisement
$$$
SmallApp PequeñoApp PetiteApp
Ltd SL SARL
Why create a non-profit ad network?
already has a userbase and
sells ad space to other application makers
come on in,
BigApp (daily active users)
you’ll make a quick buck
Inc.
advertisement
$$$
advertisement
$$$
SmallApp PequeñoApp PetiteApp
Ltd SL SARL
all hope that they’ll grow big enough to sell ad
space to smaller application makers
Why create a non-profit ad network?
photo credit: khalid almasoud
Why create a non-profit ad network?
X clicks donated
Y clicks received
App
f(x-y) =
priority
Text
App App
Donation pool
The idea
Applications share userbase
growth
X clicks donated
Y clicks received
App
f(x-y) =
priority
Text
App App
Donation pool
The idea
Applications share userbase
growth
X clicks donated
Y clicks received
App
f(x-y) =
priority
Text
App App
Donation pool
Developers distribute “growth
credit” among their applications
The idea
(daily active users)
(daily active users)
(daily active users)
• Open source
(daily active users)
(daily active users)
• Open source
• Non-profit
(daily active users)
(daily active users)
• Open source
• Non-profit
• Aimed at application cross-promotion
(daily active users)
(daily active users)
• Open source
• Non-profit
• Aimed at application cross-promotion
(daily active users)
• Accessible through an API
(daily active users)
• Open source
• Non-profit
• Aimed at application cross-promotion
(daily active users)
• Accessible through an API
• Started in October 07
(daily active users)
(daily active users)
On average 100 applications are part of
the cross-promotion pool
(daily active users)
(daily active users)
CTR
(daily active users)
developer
cheating
(daily active users)
CTR
(daily active users)
developer
cheating
average
(daily active users)
around 0.12 %
CTR
(daily active users)
A few lessons learned
(daily active users)
A cross-promotion network won’t make your app’s whole
growth, but it’s a nice supplement
A few lessons learned
(daily active users)
A cross-promotion network won’t make your app’s whole
growth, but it’s a nice supplement
Making it open source doesn’t mean other developers will help
A few lessons learned
(daily active users)
A cross-promotion network won’t make your app’s whole
growth, but it’s a nice supplement
Making it open source doesn’t mean other developers will help
Be careful of people trying to take advantage
A few lessons learned
(daily active users)
A cross-promotion network won’t make your app’s whole
growth, but it’s a nice supplement
Making it open source doesn’t mean other developers will help
Be careful of people trying to take advantage
Planning scaling is important
A few lessons learned
caching & scaling101
caching & scaling101
being prepared for overnight growth
Distributed caches in a nutshell
• Clustered caches let you store data in a server’s RAM
Distributed caches in a nutshell
• Clustered caches let you store data in a server’s RAM
• The most popular ones act like hashmaps
Distributed caches in a nutshell
• Clustered caches let you store data in a server’s RAM
• The most popular ones act like hashmaps
• Access is blazingly fast compared to a database, but you
lose the advantage of advanced queries
Distributed caches in a nutshell
• Clustered caches let you store data in a server’s RAM
• The most popular ones act like hashmaps
• Access is blazingly fast compared to a database, but you
lose the advantage of advanced queries
• Deploying a cluster of distributed cache nodes is
straightforward and requires minimal configuration
Distributed caches in a nutshell
Cache::set($key, $value, $expiry);
Cache::replace($key, $new_value, $expiry);
Cache::get($key);
Cache::delete($key);
Cache::increment($counter);
Distributed caches in a nutshell
Identify the static (or mostly static) elements of your pages
i.e. the leaderboard of your game
Instead of pulling the leaderboard’s data from the database
every time, make a cron job generate it into the cache
Then pull the data from the cache when end-users request it
instead of querying the DB
Improve your application’s scalability with caching
Storing your objects into the distributed cache
class User {
private $user_id;
private $score;
[...]
private function saveIntoCache() {
Cache::replace(“User-”.$user_id, $this);
}
}
Improve your application’s scalability with caching
Common pitfalls
Be very careful of invalidating the cache at the right time
Improve your application’s scalability with caching
Common pitfalls
Be very careful of invalidating the cache at the right time
If counters are needed as part of some objects, these need
to be stored in the cache in addition to the object
Improve your application’s scalability with caching
Common pitfalls
Be very careful of invalidating the cache at the right time
If counters are needed as part of some objects, these need
to be stored in the cache in addition to the object
Concurrency issues
Improve your application’s scalability with caching
Common pitfalls
Be very careful of invalidating the cache at the right time
If counters are needed as part of some objects, these need
to be stored in the cache in addition to the object
Concurrency issues
Always assume that the cache might fail
Improve your application’s scalability with caching
Common pitfalls
Be very careful of invalidating the cache at the right time
If counters are needed as part of some objects, these need
to be stored in the cache in addition to the object
Concurrency issues
Always assume that the cache might fail
Memcached crashes inexplicably from time to time, setup a
mechanism to restart it automatically
Improve your application’s scalability with caching
• Design your architecture with more than one
server in mind
• Design your architecture with more than one
server in mind
• Use the right tools
• Design your architecture with more than one
server in mind
• Use the right tools
• Know these tools like the back of your hand
• Design your architecture with more than one
server in mind
• Use the right tools
• Know these tools like the back of your hand
• Caching is your swiss army knife
an application’s karma
an application’s karma
balancing between quality and “viral” growth
(daily active users)
source: adonomics.com
(daily active users)
(daily active users)
source: adonomics.com
(daily active users)
Viral growth debunked
(daily active users on “mobile” application)
source: adonomics.com
Viral growth debunked
source: adonomics.com
Aiming at growth vs aiming at quality
Fear -------------------------------------------------- Love
Where to stand?
Quick Quality
--------------------------------------------------
growth product
Where to stand?
0 comments
Post a comment