x
CCAP

Making Things Simpler

    “The way to build a complex system that works is to build it from very simple systems that work.” – Kevin Kelly, founding editor of Wired Magazine

In many ways, we are most comfortable with complexity. As engineers, we enjoy the process of creating, modifying, re-creating, and maybe at some point in time actually producing something that works. We find that more often than not we enjoy the process more than the creation itself. So we undertake the analysis, re-analysis, re-re-analysis, of solving a given problem and often find the most complex, sometimes most costly, often difficult, solution as it appeals to the problem solver in us all.

I often remember the following cartoon when I am faced with solving a technology problem…

Back in the good old days when I was involved in developing UNIX kernels, we often played games with code trying intentionally to make it as obfuscated as possible. We even gave prizes out for whoever could write the most unreadable code. We considered it a fun way to solve problems and also impress our peers with our programming skills.

What we lost in the process was that there were people actually using our software and that others in the future would have to maintain it. As I look back at code I wrote in the 80s, I have no idea what I was trying to do unless there were some semblance of comments scattered haphazardly throughout the code. It was fun back then, but today I would not be happy having to need to make a code change.

As engineers, we need to maintain the balance between simple solutions and complex answers. Occam's Razor has proven true all too many times for us to ignore it and yet at times we do. We become so enamored of our favorite shiny object that we develop an amazingly transparent blindness to others' blind spots, to anything other than what has become the new toy in our toy box. However, we do know we cannot completely depend on it. We may build large, complex, and even unwieldy, solutions to posed problems, but very often we are solving for things that have never even been presented as a concern.

For my architecture team, we maintain five simple rules:

1. Simple, modular architectures always win
2. Centralize what you can, distribute what you must
3. Silicon matters for scale, availability, and resilience
4. Automate anything that can be automated
5. Support open standards

The more complexity we introduce into an already complex ecosystem creates a difficult road to navigate over time. Each change creates a ping-pong effect that often touches remote pieces of the design in our minds, never to be impacted. But in some small way they are changed enough to cause havoc that we end up spending much time troubleshooting.

Back in my last column, I spent time discussing the delineation between network layers in the cable modem termination system (CMTS) functional block diagram that I've been using for a few articles to show how this simplification may help. Putting the physical layer components (and possibly MAC) into a remote device helps with the scale issues at hand while also simplifying the architecture. (See Embracing Technological Change and Learning From Mistakes.)

There are many ways to solve the same problems using monolithic architectures that are completely sound both technically and financially. But do they get us where we want in the long run? How do we simplify even more? What can we do to not only break the functional blocks and layers apart further, but also provide a communication path between them?

Enter SDN and NFV…

While they are our industry's current shiny objects, if we treat them as another tool in our toolbox they do provide a framework for achieving this goal. I am often involved in discussions about how they can be used to solve almost every imaginable issue simply by decomposing functions or using OpenFlow (or other protocols) as a standard communication mechanism. Realistically, both SDN and NFV are finding their way through the complex organism we call our network. But, in order for them to flourish in our technological world, we need some quick wins to show how they may help.

So what are they? I like to look for ways to reduce the complexity both in design and configuration. As we add more devices, paths, circuits, flows, routes, etc, we make things more complex. As we are required to configure more equipment with device-specific configurations using unique command line interfaces, we simply increase the complexity.

So how can we simplify things? One way is to use an abstraction that allows us to define things in such a way that it is applicable to multiple physical manifestations. Rather than force us to integrate device and service-level provisioning, is there a way to focus on the services and let the devices provision themselves? To me, it is a holy grail in network design and management; but through standardization we are getting much closer.

In the excellent work done at CableLabs, with MSO and vendor support, on Converged Cable Access Platform (CCAP) and DOCSIS 3.1, we are seeing a real-world impact through the use of YANG models for device and service abstraction, and NETCONF for configuring devices. In many ways, this is the beginning of a whole new way to view the cable ecosystem. We are no longer encumbered with doing things as we have always done them; it is a completely new way to envision how we may be able to manage our networks.

Stay tuned for future blog posts and ruminations on ways to think about N2GCable, i.e. the next-next generation of cable we are now entering…

— Jeff Finkelstein, Executive Director of Strategic Architecture, Cox Communications

brookseven 6/18/2014 | 12:26:41 PM
Re: Abstraction as a language I think the biggest challenge here is age.  I don't mean the age of people, but instead the age of products and services.

My experience with this is that things become difficult once a product or service exists for a period of time.  There becomes dependency on what I will call quirks in behavior.  This kind of kruft creeps in over time.

Why do I bring this up.  The kind of systems architecture discussion here is most valid about brand new things.  Do we have that in a network service?  FiOS was about as brand new as a service as I have been involved with.  Even there we had TIRKS.

So my question is...Can you define the entire current network as a single abstraction?  If not, I think that you will end up with issues around interconnecting the old and new.  I have had success in encapsulating the old and treating it as a block.  But old products are grumpy and have personalities.  They get mad when you try to get them to do things that they were never intended to do.

seven
nasimson 6/17/2014 | 11:29:17 PM
Re: Abstraction as a language Thanks Mike. Now that I get it, I think it's an area where industry associations should play a greater and active role in defining and standardizing these abstractions and specifications.
@mbushong 6/17/2014 | 10:10:02 PM
Re: Abstraction as a language We tend to think of edge policy in very networking-centric terms: VLANs, ACLs, QOS, whatever. These are all constructs that help us specify how traffic traverses (or does not) the network. 

If the future is about converged infrastructure (including applications), the most meaningful abstractions are probably not networking constructs. What you might want is a set of abstractions relevant across all infrastructure. 

If the abstractions are in support of applications, the abstractions themselves could be expressed in application terms. For example, it might be interesting to label an application as HIPAA-compliant. Individual infrastructure elements would then translate this policy into behavior (isolating traffic on the network, for instance). You could specify things like application response times, loss thresholds, compliance requirements (like PCI), access restrictions, auditability requirements, etc.

Note that this would all need to be done in a way that is somewhat higher-level than the underlying compute, storage, and networking, and obviously in a way that is at least open access (like open source) if not standard.

Mike Bushong (@mbushong)

Plexxi
nasimson 6/17/2014 | 9:49:22 PM
Re: Abstraction as a language > Maybe we need to be presenting policy as a derivative of applications SLAs? @Mike: Can you please elaborate the above a little? Thanks in advance.
nasimson 6/17/2014 | 9:41:00 PM
lot of insights A great wow article! Only the other day, I was thinking of this image to put it in my work space so that we don't repeat these mistakes. To learn from the insights there in, and not to let these slip over from over time, I think I need to read it every once in a while.
Duh! 6/17/2014 | 10:16:30 AM
One more rule Excellent points.

As a network architect, I have adapted a rule from software engineering.  Since it is complementary to the five rules that Jeff writes about, I'd simply add it to his list.

6. Strong cohesion within subsystems, loose coupling between subsystems.

Which means that subsystems should be kept small and simple by insisting that all their functions be the set of operations on a single, self-contained object.  And that interfaces between subsystems be kept simple.  When a subsystem gets too complex to understand, or has too many moving parts... you're doing it wrong.   When an interface gets too chatty or has a state explosion... you're doing it wrong.  Redraw your subsystem boundaries and start again.

 
danielcawrey 6/16/2014 | 5:28:19 PM
Re: Abstraction as a language I can see a future where many systems will need multiple networks, not just one or two. Being able to rethink VLAN architecture with a more software-defined component I think is a step towards this. 

Ultimately, I think that network engineering is more going to be able compartmentalizing certain aspects of a system. Does anyone else see that type of architecture coming?
@mbushong 6/16/2014 | 10:13:48 AM
Abstraction as a language The needfor abstraction is absolutely a great way to siplify things going forward. We should be aware that these abstractions will eventually serve as the lingua france between infrastructure that current exists in separate silos. This begs for some real thought to be put into anything that resembles a policy abstraction. Should things be expressed in terms of networking constructs? Or in terms of storage or compute requirements? Maybe we need to be presenting policy as a derivative of applications SLAs? 

The point is not to advocate one or the other here, but rather to suggest that even abstraction needs to be thought about. Because it is being done within the context of networking today, we could very well end up with a reimagining of VLANs and ACLs, a good step for sure but certainly not a long-lasting evolutionary step.

Mike Bushong (@mbushong)

Plexxi
HOME
Sign In
SEARCH
CLOSE
MORE
CLOSE