5. Movin’ On Up…To The Sky Can computing power be scaled (↕) if needed? Assign/Re-Assign RAM and CPU Tiered SAN Performance Is Infrastructure being “over provisioned”? Over-allocation of RAM and CPU Storage I/O Performance How high can the underlying platform scale? Software Models: VPS, VMware, Xen, Hyper-V Storage Architecture Capacity
Availability: Applications running within the cloud run fine, but if there is a crash or the application needs to be terminated, it’s out of commission until a new instance can be brought online.App-Tier Scalability: If an instance of the application gets overloaded, there’s no way to add more resources to improve application performance.Data-Tier Scalability: Sometimes the back-end database is the bottleneck for performance.Maintenance: There’s no easy way to update the application without downtime.
Since it’s possible to abstract the underlying hardware from the workload running within a VM it’s also very easy to do things like allocate more memory or compute power to the VM than is actually available on the underlying physical hardware. As the business grows, the demand on application performance may grow with it? It should be easy to assign and re-assign things like CPU and RAM resourcesDifferent IaaS and cloud computing models are based on different technologies – VPS (Virtual Private Servers), dedicated physical hardware and virtualization platforms like VMware. How much CPU and RAM in total (usually different based on the underlying model being used) can be assigned to the application(s) has an impact on the decisions you make about scaling.Scale Up Not Always the Answer:The reason is that there is always a limit to the physical hardware that can be thrown at an application and a lot of applications aren’t even designed from the beginning to scale in this manner. With VMware a maximum of either 4 or 8 vCPUs (virtual CPUs) can be assigned to a VM depending on the version of ESX being used. There are even good reasons why arbitrarily assigning the max number of vCPUs to a VM isn’t the best course of action. More importantly, if the application (and underlying OS) wasn’t built to support SMP and multi-threading, adding vCPUs will have no effect whatsoever. If scalability is a concern, ensure that all of the applications components can take advantage of a large number of CPUs and can address > 4GB of RAM. This is known as a “scale-up” model.
In highly scalable application deployments, though, a “scale-out” model is usually more appropriate. Applications that are designed to spread load across two or more hosts allow you to add compute capacity simply by adding additional servers. On the back-end, adding additional database servers and using horizontal scaling relational database tricks like database shards allow you to remedy DB bottlenecks without implementing huge SMP systems to accommodate query load. The added benefit of this “scale-out” approach is that you get higher availability of the application for free. You can take one application server offline for maintenance while not affecting the other servers in the application farm. In addition, if one application instance experiences a crash other users on other instances of the application continue to function normally.
In the on-premise, physical server world both the “scale-up” and “scale-out” approaches I’ve discussed was usually very costly. 4-way or 8-way servers with gobs and gobs of RAM are an expensive way to grow vertically and add performance and though smaller systems used as part of a horizontal scaling approach are less expensive initially, they add a whole new level of complexity and expense in terms of ongoing maintenance. What’s more, during non-peak times all this compute infrastructure sat largely un(der)-utilized. What is exciting about cloud computing IaaS – is that this computing model is perfect for these kinds of scalability needs. For scale-up applications, clients can start small and grow into things. For scale-out applications, additional capacity can be added and managed much more easily than they can in the on-premise world by leveraging PaaS solutions.