Storage arrays come in a lot of shapes and sizes and I have been involved with quite a few different ones. A subject that comes up quite a lot is what is the ideal design for the new generations of flash media?
I am going to try a new analogy to explain my thoughts. Storage systems are often described in terms of analogies, and these can be as varied as cruise ships, sushi restaurants or pencil and paper. I am going to try something easy ?
All storage arrays have two basic components; controllers that receive and return data and storage media that the data is placed in. So let’s try people as storage controllers, balls as data and buckets as the storage medium.
The most basic storage arrays had/have one controller and a bunch of buckets of storage (disk drives). Of course the controllers do extra work nowadays like squashing the data and expanding it, protecting it, replicating it etc. However that would be hard to draw so I am going to ignore. For the moment my thoughts are concentrated on the controller and the media.
Of course the problem with the basic storage controller design is what happens when that controller goes wrong or is overwhelmed?
So the next stage of storage array has a standby storage controller just waiting to take over. This is more reliable and fairly easy to design and code but does not help with performance.
A much better design has both the controllers active. Its better because failover can be instant (because the second controller is already handling IO) and because you are getting use of both of the controllers you have purchased.
This is quite a common design and works ok for a lot of storage requirements, but what happens if your requirements needs more capacity. Most arrays support adding more capacity behind the controllers this is known as a Scale UP architecture.
However we have this new fantastic storage media called Flash. In my analogy Flash is a better class of bucket, it can store and retrieve more things faster. Interestingly storage controllers can only cope with the performance of about 16-24 flash modules before they can run no faster. So even as you scale up you get no performance.
A storage array that supports scale out will allow you to scale out will allow you to add controllers.
When looking at scale out arrays you need to be aware that some will only allow you to add capacity by also adding controllers. The ideal scenario is one where you can either add capacity or performance.
So what is the ideal situation for an all flash array.
To me the following is clear Active / Passive solutions are wasteful of resources and failover is likely to take longer so there should be a minimum of two active controllers.
Active/Active solutions should mean that all volumes are equally accessible on all controllers. For detailed discussion see a future blog post on why.
So the final question is do you need a system that can scale to more than 2 controllers. There are two reasons that you might want to.
- If, during the life of the storage array, you may need more than the capacity supported by 2 controllers? If you do and you want want a global dedupe pool then you need an array that supports scale out.
- If, during the life of the storage array, you may need more performance than that supported by two controllers.