Brief Background- BSc (Computer Science & Software Engineering) - 2006- Infrastructure Engineer at Adslot (subsidiary of Webfirm Group Ltd)- Adslot platforms provide self serve sales tools, ad building and ad serving for publishers- Current clients - REA Group, Carsales.com, Realestate.co.nz, SeLoger- But first, we shall go back in time..
QDC- Startup focused on personalised advertising- MySQL + Java + Adobe Flash/Flex RIA- Client-server architecture, with separate backend services for rendering, distribution, reporting- Physical windows servers for application/DB- Linux server for version control (Subversion), wiki/issue management (Trac)
Adlizard- In print advertising wanting to move to digital- Simplify personalisation tech we have, just support self serve banner advertising (ad builder)- Chance to refactor!
Issues and Solutions- Only part of the old app relevant -> Extracted decompile/recompile tech, new app wraps around this core- Manual cobbling of boilerplate code -> Automatic code generation from DB schema- Windows licensing costs -> Re-tested core tech in Linux, migrated to UbuntuServer- Lack of automated testing/builds -> Implemented Hudson (Jenkins) to drive ANT tasks automatically
Issues and Solutions- Obsolete expensive physical hardware, application availability -> Architected and implemented on AWS -> Implemented nginx (reverse proxy), DNS failover -> Switched file asset management to use S3- AWS was still only US East, slow asset loads -> Implemented usage of a CDN with origin server
Adslot- Acquired IP of QDC (Ad builder), Adimise (Ad server) - combine with its sales platform- Should present itself as a seamless integrated user experience- Heres the tech we ended up with..
The List- Java, C#.NET- Hibernate, Quartz, NHibernate, Quartz.NET- Flex, ASP.NET MVC3- JUnit, xUnit- ANT / BASH, MSBuild / Rake- nginx / GlassFish, IIS- MySQL, MS SQL Server- Jenkins, TeamCity- Linux, Windows- AWS, Ultraserve
Issues- Separate code repositories, wikis, hosting, CI- Silo-ed development, testing, deploy strategies withineach division- No visibility - too many moving parts- Lack of automation, low level of guarantee of reproducibility- Slow turnaround times to support our agile processes
Solutions- Automated all manual tasks used for deployment- Version controlled all required files- Consolidated CI - create single point of truth- Created Adslots internal PaaS solution- Consolidated on AWS from development to production environments- Switched to GitHub- Created Adslots continuous delivery (still evolving) workflow
Adslot Continuous Delivery- Derived from continuous integration, automated testing and continuous deployment processes- Tailored to suit Adslots version of the agile development process- Multiple products, client UAT requirements- Tech we used for this: -> Jenkins, Watir, ANT, Rake, makefile, Bash and batch support scripts, DB migrations
Then we did more things..- Developed new lightweight ad server in node.js and redis (in production)- Ad builder reworked to use node.js and MongoDB (beta)- Centralised logging across all products with Graylog2
Ending Notes- Constant learning, monitoring, improvement- Keep things simple, avoid over engineering