This course is about Scalability but what do we mean by that?
From a dictionary: “the capacity to be changed in size or scale”
This could be organizational, operational or in our case, technical
e.g.You made some money making jewelry for your friends but will it scale? ... I can grade these by hand but that won't scale when I have 200 students!
What do we mean by scaling?
Your program works not just with 100K of data but with 100Gig of data
Excel can handle a model not just with 300 rows but with 300K rows
Your web site works when 10 friends are using it but fails miserably when 5,000 people are using it simultaneously
There’s a life cycle
Sin: “Premature Optimization”
Don’t assume that you know why
You are probably wrong!
Always measure to determine where the bottleneck is
You will never find the “last” bottleneck.
You will remove bottlenecks until the system scales to your requirements
“You’re not Google” (or facebook, or instagram, or …)
Lets form some teams
How is it going with Ruby so far?
Let see if we can form some teams of 3 students… how?
Form 3 random Zoom Breakouts. Get to know each other
Each breakout will go for 5 minutes and then we do it again
Software Aspects
You need to start with an idea of your goal
Usually expressed as:
Simultaneous users
Performance under load
Expensive operations
Rate of operations
Needs to have a target range that can be measured
Search for bottlenecks
Engineering for scalability is not free
Tradeoff with cost (people or equipment)
There are Best practices
Hardware Aspects
Scaling “up” versus “out”
Have an intuition about the speed and latency of different media
What’s the difference?
Compare speeds of:
memory
Local disk
SSD Solid State disks
NAS Network Attached Storage
Local LAN communications
Internet communications
Operations aspects
Similarly there are goals
Usually includes
Availability
Freshness
Support
Availability sometimes comes as “Terms of Service”
Reliability of the infrastructure and quality of the software
Timely response to temporary load variability
Development Process aspects
Embrace change because it will happen
Agile methodologies
Automated testing
Continuous integration, testing and deployment
Design for maintainability
Thank you. Questions? (random Image from picsum.photos)