During the recent Storage Field Day 4, I was listening to Howard Marks (@DeepStorageNet) talking about storage Quality of Service (QoS). He was describing something he wanted his storage array to do that sounded suspiciously similar to strict priority queuing (or Low Latency Queuing if you speak Cisco).
As I explained how we solved the problem of allowing a specific amount of priority for a given packet stream, it finally dawned on me how software defined networking had the ability to increase productivity in organizations. It’s not via automation, although that is a very alluring feature. It’s because SDN can act as a language interpreter for those that don’t speak the right syntax.
It’s said that a picture is worth a thousand words. As true as that is I would also argue that a few words can paint a thousand pictures. It’s all in the interpretation. If I told you I wanted a picture of a “meadow at sunrise”, you’ve probably come up with an idea in your head of what that would look like. And the odds are good that it’s totally different from my picture. These simple words are open to interpretation on a wide scale. Now, let’s constrain the pictures a bit based on the recipient. Someone that lives in France would have a totally different idea of a meadow than someone that lives in San Francisco. Each view is totally valid, but the construction of the picture will be dictated by the thought process of the person. They each know what the meadow looks like, they’re just a bit different.
Painting with SDN
Extend this metaphor to software. Specifically to networking and storage. I have a concept that I need to implement. User A needs guaranteed access to a specific resource for a period of time that should not exceed a given threshold. A phone may need priority queue access to a slow WAN link. A backup client may need guaranteed access to a target server without overrunning the link bandwidth. Two totally different use cases that can be described in the same general language. Today, I would need two people to implement those instructions on different systems. Programming a storage array is much different that programming a router or a switch.
But the abstraction of SDN allows my to input a given command and have it executed on dissimilar hardware via automation and integration. The SDN management system doesn’t care that I want LLQ on a router or strict priority QoS on a backup client. It knows that there should be an implementation of the given commands on a set of attached systems. It’s up to the API integration with the systems to determine the syntax needed to execute the commands. As a network engineer, I don’t need to know the commands to create the QoS construct on the storage array. I just need to know what I want to accomplish. The software takes care of the rest.
SDN could usher in a new age for natural language programming. I often hear my friends in the CCIE community complaining that people only learn the commands to make something happen. They ignore the basic concepts behind why something works the way it does. If I can’t explain the concept to my 8-year old son, I don’t know it very well. I can’t abstract it to the point where a simpler mind can understand. What if that simple mind had the capability to translate those instructions into actionable programming? What if I just had to state what I wanted to do? “Ensure that all traffic on Link A is given priority treatment, except if it is for the backup server.” The system can create API calls to program the access control lists and storage arrays to take care of all that without needing to fire up a CLI session or a browser.
This is going to require a lot of programming on the front end. The management system needs to be able to interpret keywords in the instruction set to pick out the right execution items. Then the system needs to know where to dispatch the commands to make them land on the right APIs. In the case of the above example, the system would need to know to send two different sets of commands – one to the storage array to provide metered access during backup windows and another set to the networking gear to ensure the right QoS policies were enforced during the given time window. Oh, and you’re going to want to have the system go back and clean up those ACLs when it’s time for production hours to start again.
This isn’t going to be easy by any means. But adding all the value into the front end management system means that any other system attached on the backend via API is going to benefit. I’d rather be doing the work in the right places as opposed to spending all our time on the backend and neglecting the interface to the whole system. Engineers are notorious for writing terrible GUIs. Let’s take the time to abstract the bad things away and instead make something that’s really going to change the way we program systems.