Tuesday, May 3, 2011

A new type of agency adserver I

I've been thinking about the agency side adserver. Alot.

It seems to me that there are a plethora of publisher side adservers out there and it's easy to see why. There are more publishers than there are agencies. It's a bigger market and one which is more lucrative. This has led to some great adservers in the publisher space and even an open source one - openX which is used by small publishers the world over. But how about the agency side?

By default people use DFA. It's a decent system and they've got enough in there for everyone's need. They also allow you to do the other things like templates and rich media without too much extra cost. Some people find the workflow good as well (these people no doubt have just been using it too long - start flaming now). There are other solutions out there but they are too expensive, agencies don't operate with the kind of profit margins that publishers do. Most other agency adservers are more what I would consider evolutionary than revolutionary, they put in a couple of extra features or smooth some things out but they don't really do anything extremely different.

This is where I start thinking. If you could build your own adserver from scratch, what would you do different. There are obviously some steps that need to be in there such as uploading a schedule, uploading creatives and assigning creatives to schedule and creating tags based on the schedule, but how should these be done? Also what features do the current adservers have? How can we make serving cheaper? How can we make sure that the solution is future-proof?

I've been having a look and I think the technology is finally here to solve a lot of these problems. Node.js is blazingly fast (asynchronous IO), and allows a common language between front end and back end - javascript. CDN networks display static files at a fraction of the cost. Cloud computing and platform as a service (PaaS) allows instantly scaling architecture. NoSQL databases allow fast information retrieval, sideways scalability and the flexibility to add new functionality easily. New javascript engines and HTML5 will allow more complexity on the client side by being faster and allowing local storage and non breaking I/O with the server (ever wanted to add in fields and take them out in real time to see what a report would look like?)

So what is the plan? I will attempt to build an adserver. It's quite an ambitious plan I admit. To pull this off I'll need to become an expert in client side javascript (I'm going to go with JQuery & JQuery UI), HTML5, Node.js, expressJS (application MVC framework for Node.js), MongoDB (NoSQL DB), AWS (amazon web services to be used as a platform, may change to Joyent or Cloud Foundry), CDN options and whole range of other concepts in between while balancing a job and social life. The main thing to get first is enough knowledge to start coding and a plan as to how things will work. I have been studying for the past couple of weeks and believe I have enough knowledge to start some simple things and luckily the framework will be flexible so I can change things as I see better ways but in the next installment I will unfold the full extent of my plans

2 comments:

onelove said...

Interestingly enough, this has been on my mind too!

I'm thinking along the lines of using Drupal as the platform to manage inventory & publisher/advertiser interaction and node would be used to distribute the ads blazingly fast and send real-time statistics back to advertisers & publishers sitting behind a neat and comfy Drupal interface.

It would be a mammoth task to build the whole thing in nodejs. Marrying node with Drupal just makes sense.

So are you really going to go ahead with this?

rhysbrettbowen said...

Sounds like what you're thinking about is a publisher adserver. What I'm thinking about is an agency adserver.

An agency adserver is far less complex on the backend. It doesn't have to make decisions on inventory and only has to worry about scheduling differetn creatives rather than several campaigns against the one tag. For this Node.js is perfect. I have started and the coding is easier than you'd expect. I already have the serving part and the data structure down and the logic to transform the HTML inputted with macros in to a static file that can sit on a CDN.

Looks like you want to use drupal to manage the interface, but the interface is just the smallest part of the problem. I've settled on javascriptMVC and instead am using an API that any interface can connect to.

What you have to do is define an order for ads to be served and manage inventory as accurately as possible. Thats the hardest thing in a publisher adserver. Speed in serving doesn't really matter as much, nor flexibility - not as much as an agency adserver.

If you want to work on a publisher adserver then I'd suggest using openX