EPISODE 107 #meteor
Meteor Cloud Is a Full Service Hosting Solution for Meteor Apps
with Filipe Névola
EPISODE 106 #rails
CompanyCam Helps Contractors Document Their Job
with Chad Wilken
EPISODE 105 #flask
TinyPilotKVM Lets You Remote Control Your Server from Your Browser
with Michael Lynch
EPISODE 104 #rails
uscreen Is a Platform That Helps Content Creators Build a Business
with Nick Savrov
EPISODE 103 #rails
Great Question Makes It Easy for Teams to Perform Customer Research
with PJ Murray
EPISODE 102 #rails
Robot Accounts AI Provides a System to Let You Categorize Invoices
with Josh Kinabrew
EPISODE 101 #rails
Fundraze Is a Flexible Fund Raising and Campaign Management Service
with CJ Avilla
EPISODE 100 #jekyll
Running in Production Is a Podcast Where Devs Chat about Tech Stacks
with Nick Janetakis
EPISODE 099 #rails
A Custom Electronic Medical Record System for an Ophthalmology Clinic
with Jason Swett
EPISODE 098 #rails
Games Directory Lets You Sync Your Games and Achievements in 1 Place
with Vlad Radulescu
EPISODE 097 #rails
School Bus Hero Helps School Bus Drivers and Aides Find a Job
with Dieter Lunn
EPISODE 096 #rails
Hitobito Helps You Manage Communities with Complex Group Hierarchies
with Matthias Viehweger
EPISODE 095 #koa
Submotion Helps You Manage Access Control for Your SAAS Subscriptions
with Kristian Dupont
EPISODE 094 #django
HorseRecords Lets You Record Everything about Your Horses
with Andy Ide
EPISODE 093 #rails
Politico Europe Is a Business to Business News and Data Service
with Karl Roos
EPISODE 092 #akka
Couchmate Is a Social Chat Platform for Viewers of Live TV
with Matt Oliver
EPISODE 091 #ansible
Managing 40+ Servers in a Data Center at a Medical University
with Maciej Delmanowski
EPISODE 090 #rails
Avo Is a Framework for Creating Ruby on Rails Admin Panels
with Adrian Marin
EPISODE 089 #express
Optidash Is an Image Processing and Optimization API
with Przemek Matylla
EPISODE 088 #fastapi
CourseMaker Is an Online Course Builder for Technical Makers
with Chris Samiullah
EPISODE 087 #phoenix
Statuspal Is a Service for Hosted Status Pages and Monitoring
with Eduardo Messuti
EPISODE 086 #node
QA Wolf Helps You Create Automated Browser Tests as You Use Your Site
with Jon Perl
EPISODE 085 #rails
ListenAddict Lets You Subscribe to a Person Like You Would to a Show
with David Parker
EPISODE 084 #phoenix
PriceTable Mixes in Sales Automation, Project Management and Invoicing
with Ege Ersoz
EPISODE 083 #express
SongRender Lets You Create Audio Visualizer Videos from Audio Clips
with Jake Lazaroff
EPISODE 082 #pylons
Dropbox Gives You Secure Access to All of Your Files
with Utsav Shah
EPISODE 081 #jupyter
Mito Is a JupyterLab Extension to Make Python Data Analysis Easy
with Nate Rush
EPISODE 080 #laravel
10Web Is an Automated WordPress Hosting Platform
with Tigran Nazaryan
EPISODE 079 #golang
NanoVMs Let You Run Your Apps Faster and Safer with Unikernels
with Ian Eyberg
EPISODE 078 #flask
AbstractCRE Helps Extract Key Data from Real Estate Property Documents
with Cole Simmons
EPISODE 077 #rails
Podia Has Everything You Need to Sell Online Courses
with Jason Charnes
EPISODE 076 #django
Building an Internal App to Track 1,200+ VMs and Servers at REI
with Sean Callaway
EPISODE 075 #django
Password Space Is a Password Manager for Families
with Nick Hnatiw
EPISODE 074 #laravel
Pod Hunt Helps You Find Great Podcast Episodes to Listen To
with Mubashar Iqbal
EPISODE 073 #django
Joyful Gifts Is an Automated Gift Giving Service
with Jonathan Adly
EPISODE 072
This Episode Was Removed Because It's under Review
with Anders Hovmöller
EPISODE 071 #rails
DNSimple Is a Simple and Secure Domain Management Service
with Anthony Eden
EPISODE 070 #django
Buttondown Lets You Build, Grow and Launch Your Email Newsletter
with Justin Duke
EPISODE 069 #django
An Internal Financial Planning Service for Season Ticket Holders
with Denis Stepanenko
EPISODE 068 #phoenix
TextDB Is a Simple Way to Share Small Amounts of Data
with Ian Davidson
EPISODE 067 #django
Muze Is a Freeform iOS Chat Application
with Dash Winterson
EPISODE 066 #flask
MixedCRM Is a Sales and CRM Tool for Real Estate Property Developers
with Nidal Alhariri
EPISODE 065 #django
CareerVillage Is a Community Where Students Can Get Career Advice
with Jared Chung
EPISODE 064 #phoenix
Stacker Is an Internal Tool to Stitch Together Microservices Responses
with Sascha Wolf
EPISODE 063 #phoenix
Changelog.com Is a News and Podcast Platform for Developers
with Jerod Santo & Gerhard Lazu
EPISODE 062 #express
Browserless Gives You Fast, Scalable and Reliable Browser Automation
with Joel Griffith
EPISODE 061 #phoenix
Monitor Oban Jobs in Real Time with Oban Web Pro
with Parker Selbert
EPISODE 060 #flask
Fantasy Football Data Pros Teaches You Python through Fantasy Football
with Ben Dominguez
EPISODE 059 #django
Creative Hire Helps Match Designers and Companies to Various Jobs
with Kshitij Sinha
EPISODE 058 #django
Brightpath Is a Formative School Assessment Tool
with Kye Russell
EPISODE 057 #django
Crowdbotics Is a React Native + Django App Builder / Deployer
with Anand Kulkarni
EPISODE 056 #django
Divio Is a Cloud Platform for Managing Web Applications
with Daniele Procida
EPISODE 055 #django
Daughterly Care Is a CRM to Help Care for the Elderly
with Barton Ip
EPISODE 054 #django
Paparazzi Accessories Is an E-commerce Store That Sells Jewelry
with Dan Purcell
EPISODE 053 #django
An Inventory Management System for an E-commerce Platform
with Galen Rice
EPISODE 052 #express
A Video Course Platform Built for a Course Called Modern DevTools
with Umar Hansa
EPISODE 051 #django
An E-commerce Site That Lets Folks Buy Online Courses
with Dalton Polhill
EPISODE 050 #django
Tracking Games Played on a Flight Simulator
with Paul Cappaert
EPISODE 049 #django
Collecting and Processing Genomic Data to Help Cure Rare Diseases
with Dan Kolbman
EPISODE 048 #django
Social Hiring Platform for the Food and Beverage Industry
with Colin McFaul
EPISODE 047 #django
A Platform to Buy Gift Cards for Eco-Friendly Products
with Antonin Grêlé
EPISODE 046 #flask
Custom Hardware to Provide Affordable Email to the African Congo
with Clemens Wolff & Shaun Bathgate
EPISODE 045 #django
Skillwell Is a Video Platform That Helps You Unlock Physical Skills
with John Debs
EPISODE 044 #django
An Internal Employee Management App Focused on Schools
with Chris Goodwin
EPISODE 043 #django
DataWellness Helps Organizations Stay Safe and Compliant
with Dave Merwin
EPISODE 042 #golang
Creating a Video Course Hosting Platform to Learn Go
with Jon Calhoun
EPISODE 041 #django
Litt NYC Lets You Easily Find Friends and Things to Do
with Harry Moreno
EPISODE 040 #django
A Site to View 3D Scans of Cars with Twinner
with Jesse Hunt
EPISODE 039 #django
Place Card Me Lets You Create Printable Place Cards Online
with Cory Zue
EPISODE 038 #django
The CMS Front End for Lionel Trains' Products
with Mark Miscavage
EPISODE 037 #django
A Real Estate Order and Appraisal System for a Small Business
with Austin Lewis
EPISODE 036 #django
Passiv Is a Portfolio Management and Automation Platform
with Brendan Wood
EPISODE 035 #static-site
Determine What Your Toilet Paper Supply Is Based on Your Usage
with Ben Sassoon
EPISODE 034 #django
Confectionery Connect Is an E-commerce Video Course Marketplace
with Sean Parsons
EPISODE 033 #django
Zego Lets You Easily Buy Insurance by the Hour
with Stuart Kelly
EPISODE 032 #django
Building a Site Around Thousands of Diary Entries from Samuel Pepys
with Phil Gyford
EPISODE 031 #phoenix
Mux Is an API Based Platform That Lets You Process and Stream Videos
with Dylan Jhaveri
EPISODE 030 #flask
TradeRev Is a Machine Learning Vehicle Appraisal / Auctioning System
with Amit Jain
EPISODE 029 #flask
Cover Tuner Uses NLP to Help Improve Your Cover Letters
with Saad Malik
EPISODE 028 #dotnet
Easily Find, Reproduce and Track Your JavaScript Errors with TrackJS
with Todd Gardner
EPISODE 027 #python
A College Professor Self Hosts Jupyter Hub for His Students
with Peter Kazarinoff
EPISODE 026 #flask
Contextualise Is a Tool That Lets You Easily Organize Information
with Brett Kromkamp
EPISODE 025 #flask
A Cryptocurrency Powered E-commerce Store Called Strmline
with Ty Cooper
EPISODE 024 #rails
CovidNearMe Tracks Cases and Has Info for Citizens / Health Workers
with Scott Johnson
EPISODE 023 #flask
Taleas Is a Cute, Quirky, Random and Slightly Weird Webcomic
with Seth Black
EPISODE 022 #flask
Creating a Non-profit Food Ordering Service for Inner City Kids In LA
with Francisco Barcena
EPISODE 021 #phoenix
Get to Know Your Coworkers through Simple QA with This Slack App
with Adam Conrad
EPISODE 020 #flask
A Weather Analysis Service for Regular People and Meteorologists
with Nick Gregory
EPISODE 019 #phoenix
Hex.pm Is Elixir's Official Package Manager
with Eric Meadows-Jönsson
EPISODE 018 #phoenix
6DOS Helps You Explore Your Personal Network
with Henry Popp
EPISODE 017 #rails
Smart Music Helps Musicians Practice More Efficiently
with Julien Blanchard
EPISODE 016 #rails
VA.gov Provides an API to Get Information about Veterans
with Charley Stran
EPISODE 015 #express
Kernl.us Helps WordPress Plugin and Theme Developers Manage Updates
with Jack Slingerland
EPISODE 014 #phoenix
ScrollKeeper Is a Collaboration Tool for Researchers
with Ian Butler
EPISODE 013 #phoenix
Remote.com Helps You Find Remote Jobs Anywhere
with Marcelo Lebre
EPISODE 012 #rails
Learn Ruby on Rails through Screencast Tutorials on GoRails
with Chris Oliver
EPISODE 011 #phoenix
Logflare Is a Log Management and Event Analytics Platform
with Chase Granberry
EPISODE 010 #flask
ScholarPack Runs 10% of the UK's Primary Schools and Gets Huge Traffic
with Gareth Thomas
EPISODE 009 #golang
Load Balance, Secure and Observe Your Web Applications with Nova ADC
with Dave Blakey
EPISODE 008 #koa
Openship Is a Shopify App for Drop Shipping and Order Fulfillment
with Junaid Kabani
EPISODE 007 #dotnet-core
Discworld Disorganizer Is a Discworld Book Series Search Engine
with Jamie Taylor
EPISODE 006 #golang
Qvault Is an Open Source Tool to Manage Passwords and Crypto Keys
with Lane Wagner
EPISODE 005 #flask
EarlyBrd Alerts You of New Job Board Postings So You Can Bid Faster
with Stetson Blake
EPISODE 004 #django
Real Python Is One of the Largest Python Learning Platforms Around
with Dan Bader
EPISODE 003 #phoenix
Learn Elixir and Phoenix by Building Things Over at Alchemist Camp
with Mark
EPISODE 002 #rails
A Video Based AWS Certificate Training Platform Called Exam Pro
with Andrew Brown
EPISODE 001 #phoenix
Serving Medical University Employees, Health Officials and Students
with Gabriel "OvermindDL1" Robertson
EPISODE 000
Preview of What's to Come
Are you running a site in production? I'd love to hear your story, become a guest.
Load Balance, Secure and Observe Your Web Applications with Nova ADC
- #golang
- #laravel
- #php
- #aws
- #circle-ci
- #cloudflare
- #datadog
- #digitalocean
- #docker
- #influxdb
- #kubernetes
- #lambda
- #lets-encrypt
- #postgres
- #sendgrid
- #sentry
- #serverless
- #slack
- #stripe
- #ubuntu
Dave Blakey
https://nova-adc.com
In this episode of Running in Production, Dave Blakey goes over how their load balancing service (Nova) handles 33,000+ events per second across a 100+ server Kubernetes cluster that runs on both AWS and DigitalOcean. There’s a sprinkle of Serverless thrown in too.
If you ever wondered how a large scale app is developed and deployed, you’re in for a treat. Some of Nova’s clients spend $5,000,000+ a month on hosting fees. We covered everything from development best practices, how to create a scalable application architecture and how they replicate their environment across multiple cloud providers and regions.
P.S., Nova is also really useful for small sites too and they have a free tier with no strings attached, so you may want to give it a try. After this episode the first thing I thought was “wtf, why am I not using this?”. I’m going to start playing with it over the holidays for my own sites.
Topics Include
- 1:31 – 2 teams composed of 9 developers work on the back-end and front-end
- 1:59 – Motivation for choosing Golang for the back-end came down to scaling requirements
- 2:57 – Tens of thousands of clients are connected to 1 point of control (the Golang server)
- 3:24 – Balancing operational scale with developer programming speed
- 3:43 – Their dev team has lots of programming experience and decided Golang was solid
- 4:28 – The client / server architecture of how their load balancer is installed
- 5:38 – The “cloud” component which is the managed web UI to configure your load balancer
- 5:54 – The web UI is written in PHP using Laravel
- 6:39 – It wasn’t really a matter of using Laravel, it was “should we even use a framework?”
- 7:16 – Motivation for picking Laravel for the web interface
- 8:08 – Picking a web framework where hiring isn’t a problem and the documentation is great
- 8:47 – The Laravel app isn’t a monolithic app, many things run on Kubernetes and Serverless
- 9:38 – As an end user, if you click a button on the site it ultimately leads to a job running
- 9:57 – Docker and Vagrant are heavily being used in development
- 10:43 – This isn’t a typical web app, there’s lots of moving parts to deal with in development
- 11:34 – Vagrant makes it really easy to network together your VMs to other systems
- 12:08 – The value in spending the time in your dev tooling to spin new devs up quickly
- 12:46 – InfluxDB is being used as a time series database and what problems it solves
- 13:45 – After only 4 months of being around, we’re writing 33,000+ metrics per second
- 14:37 – Nova operates at massive scale but if you’re not, maybe stick with a SQL database
- 15:19 – Their load balancer is the single source that your clients (web visitors) connect to
- 15:50 – Even if Nova happens to have growing pains, it won’t affect your site’s up-time at all
- 17:18 – What makes Nova different than a load balancer on AWS, GCP or anywhere else?
- 17:42 – It’s an ADC with availability, security, caching and observability
- 18:37 – Nova is more than load balancing and there’s also multi-cloud hosting to think about
- 19:14 – For example, Nova is currently hosted on both AWS and DigitalOcean
- 19:30 – It’s difficult to rely on cloud specific services (ELB, ALB, Firewalls, etc.)
- 20:14 – Nova is replicated between AWS and DigitalOcean for redundancy
- 20:57 – (40) $20 / month servers on DigitalOcean running in Kubernetes
- 21:42 – And another (100) servers for their testing environment to perform load tests
- 21:55 – About (20) servers are running on AWS
- 22:01 – For the Nova load balancers, they are running on $5 / month DigitalOcean droplets
- 22:21 – Everything is running Ubuntu 18.04 LTS, except for a few servers running 19.x
- 22:49 – On AWS, those 20 servers range from $40-60 / month
- 23:07 – 2-4 CPU cores is the sweet spot for their work load, more cores doesn’t help much
- 23:55 – They run their own load balancer to manage their own infrastructure
- 24:29 – Most of their servers are a piece of a Kubernetes cluster
- 24:49 – The rest of the servers are template driven but we’re not using Ansible, etc.
- 25:42 – Those development changes were great because it makes things easier to scale
- 26:11 – Kubernetes is nice but it took a lot of changes in development to make it work
- 26:23 – There is no magic Kubernetes button to scale, it takes a lot of preparation
- 27:35 – Nova supports many different deployment environments, not just Kubernetes
- 28:11 – For example, you can load balance (2) DigitalOcean droplets, here’s how it works
- 30:01 – Doing things like rolling restarts is all handled by Nova
- 31:05 – Using Kubernetes is hard, especially for larger organizations
- 31:30 – What would the deploy process look like for an end user load balancing 2 servers?
- 33:35 – Performing an automated rolling restart with Kubernetes
- 34:16 – The dangers of a fully automated rolling restart without extra “smarts”
- 34:44 – Nova’s deploy process for their own infrastructure (Golang server and client)
- 36:21 – Their CI / CD environment runs on CircleCI but the deploy script is custom
- 36:57 – Secrets are managed mostly with environment variables
- 38:16 – Being cloud neutral is a trend right now (AKA, not being locked into a vendor)
- 38:41 – Moving the data, replication and keeping things in sync are the hardest parts
- 38:54 – End to end, a new web UI deploy for Nova could be done in under 10 seconds
- 40:20 – What about deploying the client / server component? It’s quite a bit different
- 40:57 – Shell scripts can go a long ways, especially for gluing together deployment code
- 41:44 – A lot of monitoring and reporting is kept in-house for performance reasons
- 42:12 – For error reporting on the web UI with Laravel, it goes to Sentry
- 42:16 – Then it’s all integrated with an agent-less DataDog and Slack notifications
- 43:17 – It’s nice using 3rd party tools that integrate easily like Laravel and Sentry
- 43:36 – Not using DigitalOcean’s alerting mainly due to working with a cluster of servers
- 44:30 – Being able to switch cloud hosting providers without a huge fuss
- 44:37 – One of Nova’s clients spend 5 million US dollars a month on cloud hosting fees
- 45:00 – Another client has 500+ load balances deployed across 5,000+ servers
- 45:30 – Spending that kind of money on hosting fees is a whole different level
- 45:59 – Nowadays a small team can be responsible for a huge amount of infrastructure
- 46:51 – WhatsApp and Instagram are great examples of a few devs with lots of end users
- 47:12 – We live in an interesting time where 1 developer can do so much
- 47:27 – Nova’s test environment has 1 million connected clients
- 48:00 – Their databases are run across multiple data centers and are auto-backed up
- 49:19 – Their business is redundancy and up-time, so good disaster plans are necessary
- 49:36 – Working with high traffic clients helped define best practices
- 50:31 – Nova is great for small sites too and you get 5 nodes for free (no strings attached)
- 52:01 – It’s not a pay to win system, the free tier has everything you would need at that scale
- 52:55 – Stripe is being used to process payments and it uses the new Payments Intents API
- 53:28 – Nova bills you per hour instead of per month and Stripe makes this really easy
- 55:46 – SendGrid is being used to send transactional emails to end users
- 56:12 – They send less than a 1,000 emails out a day (mostly for notifications and alerts)
- 56:41 – Their load balancer deals with handling SSL certificates using Let’s Encrypt
- 56:59 – End users of the service don’t need to worry about issuing their own SSL certs
- 57:34 – Push button, receive bacon
- 57:51 – If you’re in the public cloud you can also get encryption end to end
- 58:43 – Dealing with SSL at the load balancer level can save a lot of headaches
- 58:54 – It comes back to setting up your app using best practices in order to scale
- 59:35 – Best tips? Create a code contract to help keep your code sane for years to come
- 1:00:56 – It’s sort of like Heroku’s 12 factor guidelines but not really
- 1:01:06 – It’s more like 8 things to do to avoid an angry meme in your pull request
- 1:01:36 – It’s 8 core concepts (but it doesn’t need to be 8) to define your system’s purpose
- 1:02:49 – One mistake that was corrected was under estimating time series databases
- 1:03:52 – snapt is their parent company, Nova is the load balancer service that we talked about today, and you can also find them @SnaptADC on Twitter
Links
📄 References
- https://laracasts.com/
- https://en.wikipedia.org/wiki/Time_series_database
- https://en.wikipedia.org/wiki/Application_delivery_controller
- https://en.wikipedia.org/wiki/Geo-fence
- https://en.wikipedia.org/wiki/Web_application_firewall
- https://martinfowler.com/bliki/BlueGreenDeployment.html
- https://en.wikipedia.org/wiki/Timeline_of_Instagram
- https://i.pinimg.com/originals/bb/98/e0/bb98e03ac44d2fa7b07cfd364eab6e2e.jpg
- https://en.wikipedia.org/wiki/Heartbleed
- https://12factor.net/
⚙️ Tech Stack
- golang →
- laravel →
- php →
- aws →
- circle-ci →
- cloudflare →
- datadog →
- digitalocean →
- docker →
- influxdb →
- kubernetes →
- lambda →
- lets-encrypt →
- postgres →
- sendgrid →
- sentry →
- serverless →
- slack →
- stripe →
- ubuntu →
Support the Show
This episode does not have a sponsor and this podcast is a labor of love. If you want to support the show, the best way to do it is to purchase one of my courses or suggest one to a friend.
- Dive into Docker is a video course that takes you from not knowing what Docker is to being able to confidently use Docker and Docker Compose for your own apps. Long gone are the days of "but it works on my machine!". A bunch of follow along labs are included.
- Build a SAAS App with Flask is a video course where we build a real world SAAS app that accepts payments, has a custom admin, includes high test coverage and goes over how to implement and apply 50+ common web app features. There's over 20+ hours of video.
Questions
- Want to discuss this episode on Twitter? Tag @nickjanetakis or @SnaptADC
Dec 19, 2019
✏️ Edit on GitHub