100 likes | 189 Views
our Architecture. We wanted to analyse and compare our solution to other Market solutions We decided to use OpenX as base Adserver ! We wanted to perform mass testing with at least 3 millions of delivery a day That’s why we made this three tiers evolution .
E N D
our Architecture • Wewanted to analyse and compare our solution to otherMarket solutions • Wedecidedto use OpenX as base Adserver ! • Wewanted to perform mass testingwithat least 3 millions of delivery a day • That’swhywe made thisthree tiers evolution.
OpenX Server Front-End Cluster NOT INCLUDE IN OPEN SOURCE CODE Logrotate : Daily Openxrought logs imps & clicks Filer Reverse proxy New Daily planification Revenu Optimisation Back End Applications OpenX BDD OpenXAdmin
New ajsprocess • As wewanted to modifyeachday the planification and wewanted to base this planification on a differentmethodthan the currentajswemodifieditaccording to the followingalgorithm.
PerfomancecampaignwithOpenX2.8Planification Phase 0 : standard Campaign'C' withoutanyoptimisation Banner - nom - taille - nom Campaign - nom - prix, modèle - capping - zones Targeting Channels T Targeting Channel : - nom - (var/val) 1..* C B T
Our usagewith a segmentation by Targeting channel HH_JourContinuous PageIdSymbol var8 Symbol var9 Our Back End solutionSymbol var10 Symbol Phase 1: Targetingchannelinit Campaign'C' still not optimised Campaign - nom - prix, modèle - capping - zones Banner - nom - taille - nom Targeting Channels Ch_1 T C Ch_2 B Ch_n T Insert in Database
Our usagestep 2 1.1;1;80 1.2;1;60 1.3;1;20 1.4;1;50 1.5;1;6 … Phase 2: Planification Campaign'C' optimised Planif files from the day before C Banner - nom - taille - nom Campaign - nom - prix, modèle - capping - zones Targeting Channels Ch_1 T Ch_2 B (Priority=1) Ch_n Ch_i Ch_j T B (Priority=127) T Ch_k Ch_l
standard .ajs delivery process Ad Tag http://[URL_OpenxFront]]/www/delivery/ajs.php?zoneid=1&var8=1&var9=1&var10=1&u=id=7503090376|8=1|9=1|10=1| Use cached ZoneInfo^1& Zonelinkedadinfos^1 (allowable ads for this zone) If cache not created create cache for ZoneInfo^1 &Zonelinkedadinfos^1 Select the ad selection process:Pluginif zone connected to AdMarket, function _adSelectelsewhere this cached files will store ads in arrays xAds, lAds, eAds: 1. connected to zone 1 2. managed in different array xAds, etc.. according to priority value (-1 for exclusive, >0 && <1 for contract, 0 for remnant,..) Go throught Ads list according to the following order: 1. xAds(exclusives campaign : priority = -1 ) 2. Ads (contractual campaign) priority 10 … 11. Ads (contractual campaign) priority 1 12. lAds(remnant campaign: priority = 0 ) 13 eAds(ecpm priority based campaign: priority =-2) delete non eligible Ads according limitations (channels,..) • According to Ad category (xAds, Ads, lAds), recalculation of priority • if delivery based on priority: priority = priority x priority_factor • - if delivery based on eCPM): test eCPM, and non eligible ad priority set yo 0 Select the Ad
Restriction of current .ajs process Ad Tag http://[URL_OpenxFront]]/www/delivery/ajs.php?zoneid=1&var8=1&var9=1&var10=1&u=id=7503090376|8=1|9=1|10=1| first algorithm restriction: Cache size [ nb campaigns * nb formats ad * nb segments} Use cached ZoneInfo^1& Zonelinkedadinfos^1 (allowable ads for this zone) If cache not created create cache for ZoneInfo^1 &Zonelinkedadinfos^1 Select the ad selection process:Pluginif zone connected to AdMarket, function _adSelectelsewhere Go through Ads list according to the following order: 1. xAds(exclusive campaign : priority = -1 ) 2. Ads (contractual campaign) priority 10 … 11. Ads (contractual campaign) priority 1 12. lAds(remnant campaign: priority = 0 ) 13 eAds(ecpm priority based campaign: priority =-2) second algorithm restriction: we have to go through each ads and limitation before to define priority and select Ad delete non eligible Ads according limitations (channels,..) • According to Ad category (xAds, Ads, lAds), recalculation of priority • if delivery based on priority: priority = priority x priority_factor • - if delivery based on eCPM): test eCPM, and non eligible ad priority set yo 0 third algorithm restriction: Only contractual Ads use priority. And this priority needs to be dynamically recalculate each time. Select the Ad
New Delivery http://[URL_OpenxFront]]/www/delivery/ajs.php?zoneid=1&var8=1&var9=1&var10=1&u=id=7503090376|8=1|9=1|10=1| Use cached file according to Channel and channelIddefined in u parameter If cache not created or expired Generate Cache Channel This cached file will store in an array all the Channels witch content “segmentation” tag and will associate to a channelId the limitation description (Regexp on u parameter). Use cahced file ZoneInfo^1 &Zonelinkedadinfos^1^1 (eligible list of ads for zone 1 and channelId1) If cache not created or expired Generate cache(ZoneInfo^1, Zonelinkedadinfos^1^1) Select the ad selection process:Pluginif zone connected to AdMarket, function _adSelectelsewhere this cached file will store in the array pAds all Ads witch: 1. have been associated with zone 1 2. has a limitation on channelId1 3. has a banner with the pattern "____" Go through Ads list according to the following order: 1. pAds (campaigns from ZonelinkedINfos^1^1) 2. xAds (exclusives campaign : priority = -1 3. Ads contractual campaign) priority 10 … 12. lAds (remnant campaign: priority = 0 ) 13 eAds (ecpm priority based campaign: priority =-2) Recalculate Ads priority in pAds array according to the following formula: = (bannerWeight* campaignWeight)/ sum of all priorities Select Ad