Deploying Highly-Available Architecture with a Pinch of Salt

Speaker: Petrus Theron

This is the story of a .NET guy's Python development journey to deploy a medium-sized system to AWS using bleeding edge deployment tools and trying to design for high-availability.

MyNames is a bulk .CO.ZA domain management system designed to be eventually consistent in managing domain name registrations and renewals via a rate-limited external service. We use TeamCity for continuous integration and testing, and Saltstack for deployment.

Saltstack is a Python-based client/server deployment system akin to Chef that targets and deploys our various worker roles via ZeroMQ to a small fleet of EC2 instances.

I will detail the architectural problems we are solving when dealing with a bottle-necked external service and give an overview of Saltstack.

The MyNames Stack


  • EC2 workers running Ubuntu 12.04 LTS
  • Route53 for customers' DNS
  • ELB for load balancing API requests
  • SQS for queuing synchronisation tasks
  • RDS for really expensive MySQL database hosting


  • Twisted Web for RESTful API calls
  • Flask for more RESTful API calls
  • SQLAlchemy as an ORM, based on Hibernate
  • Alembic for database migrations


  • TeamCity for automated continuous integration and testing
  • Saltstack for command-and-control targeting and deployment
  • Nginx for serving static front-end HTML


  • CoffeeScript compiles down to JS
  • AngularJS as front-end framework
  • Restangular to talk to our API
  • Bootstrap 3 for CSS structure
Return to schedule.

PyConZA brought to you by Praekelt Foundation