When I was interviewing for jobs during my senior year of college, I was chastised at one interview by a manger for now knowing what "scalability" was. Later in my career, I was talking to a manager and she expressed her disappointment that college students don't understand the "ilities", specifically scalability. This bugs me a bit, because during my sophomore year of college, I was taught scalability in the context of algorithms. This idea of scalability didn't match with what "the enterprise" defined scalability as.
In algorithms, scalability is all about orders of magnitude and the exponent. We learned Big O notation and how the "scale", or Big O of the function/algorithm is the major influence on how the algorithm performs when you start growing. It was a big challenge to fully understand that notion. It doesn't matter how small A is and how big B is; eventually, Ax is going to outperform Bx^2. To me, an algorithm is more scalable if its runtime performance has a smaller "order" than another algorithm.
The chastising during that interview started because I made a joke about mainframes. As he put it, mainframes were both "horizontally and vertically scalable". What he meant by horizontally scalable was the fact that you can by more mainframes and they hook up with each other to form a cluster. z/OS makes it really easy to do this, but you can still do things similar to that on the application layer of Unix servers. As for the vertical scalability, this derives from the fact that businesses pay per "MIPS" on mainframes. If you don't utilize your mainframe cpu very much, then you don't pay a lot of money. As you use your mainframe cpu more, you get charged more. From a business point of view, you expand the power of you cpu without having to physically upgrade your mainframe.
To me, what he was really saying is z/OS and the mainframe are more expandable, not scalable. The base system supports expanding with another node, while Unix and Windows do not. You have to handle this expansion in the application layer. He also argued that the cpu "expanded" as well, which Unix and Windows do not support. To me, the vertical scalability is a bit of a scam since you already paid for the cpu. You are just paying extra to actually use what you already paid for. So, in my eyes, it is not expandable.
Lets get back to the horizontal expandability. Although z/OS allows you to expand with minimal code changes, it seems like it would scale better. We have been talking about website scalability, however. With a website, you can have a load balancer that goes to multiple Unix servers. This is handling expandibility at the application layer. Remember what I said about what scalability meant to me. Imagine two setups, one with 4 Unix servers and another with 4 mainframes. Your website has a performance problem and you need to expand. In the mainframe world, you pay a million dollars and you get another mainframe bringing you to a total of 5. That is a 25% increase in processing power. In the Unix world, you buy 4 more servers, bringing you to a total of 8. That is a 100% increase in processing power. That is an order of magnitude. Although Unix itself isn't even expandable like a mainframe is, the application you run on it is not only expandable, it is more scalable!
It is important to realize that scalability doesn't mean you can expand. If one system can handle 10% more load than another system, they have the SAME scalability. Scalability is about the magnitude of your expansion.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.