Reduce complexity of network systems development with data-centric software design
Networking equipment must manage and transport growing amounts of data quickly and reliably, making the efficiency and robust nature of data management code essential in order to optimize system performance. Unfortunately, this code is expanding both in size and complexity as networking equipment handles complex data from numerous sources and delivers an expanding array of connectivity to such end points as IP handsets, cellular handsets, network appliances and media and Packet Cable gateways. In addition, it is not unusual for advanced networking equipment to combine data streams from these ever increasing discrete sources with internally created and managed data for security, tracking and billing purposes — all in real-time, performance-critical, high-availability environments.
Figure 1. Advanced networking equipment integrates data from multiple layers, sources, and internal applications
Integrating and managing the growing volume of data from both inside and outside each networking system is challenging. It is increasingly so given that most networking equipment developers try to create inherently data-driven applications using conventional procedural logic and techniques. If software development teams analyze and audit all the functions within their code, they may be surprised to discover that the typical networking system implementation has greater than 50% of the code doing data management: that is, code that is acquiring, processing, integrating, storing and initiating actions based on diverse and dynamic sets of both streams and tables of data. Yet they do so without the benefit of a coherent data model or underlying data services or abstraction layer. As a result, most developers continue to rely on proprietary ad hoc data management approaches.
In many ways, networking systems have become high performance data-centric computing platforms. To reduce application complexity and speed development, networking developers should consider the potential advantages of adopting a uniform data abstraction and data-centric software design approach.
Data-centric software design
A promising way to tackle networking application development challenges is to take a more data-centric approach to software design. Data-centric software design puts data at the center by emphasizing data (i.e. data definitions, structures and relations) over procedural functions and interfaces. It encourages developers to put data at the center with code in support of it rather than the other way around. It also leverages a data abstraction layer to shield developers from underlying implementation details.
A data-centric approach allows developers to focus on what they want to do with networking system data—regardless of its source—without having to manually program the numerous underlying proprietary data structures and data management routines. By leveraging a data abstraction layer supported by a management system to abstract underlying data manipulation details, engineers can speed development by focusing efforts on development of data-driven networking application functionality from a higher-level.
This higher-level, data-centric approach has long been used in enterprise applications powered by relational database technologies. However, the feasibility of client-server database technologies for networking equipment has been limited by the relatively poor performance and determinism of traditional database designs. Stringent system resource constraints and the lack of suitable data management technologies have also made database technologies, at best, a "force fit." However, more efficient and flexible data management technologies have emerged to allow data-centric software design to become a viable and faster approach for developing high performance, data-driven networking applications.
Current data-management techniques
Most networking application code today is developed in either C or C++. The prevailing data management approach within these applications involves hand-coding proprietary data structures and software access, manipulation and storage routines. The ad hoc approach typically results in data management implementation inconsistencies and increased application complexity, making programs more difficult to develop, debug, integrate and evolve. Often, the effects of these inconsistencies are not manifested until integration and testing phases, resulting in unexpected delays and costly rework.
Click here for Figure 2
Another issue is the fact that that hand-coded data management routines are frequently developed in a way that makes them closely bound to the underlying OS and hardware platform. This makes applications less portable to new OS and hardware platforms and more sensitive to changes in hardware specifications. The resulting inflexibility and complexity makes it more difficult for developers to meet rapidly evolving market requirements and aggressive delivery schedules.
By contrast, data-centric software design enables networking developers to speed development by taking a higher-level view of their application's data management functionality by abstracting application code away from underlying platform specifics. This allows for faster coding, changes and iterations throughout the development lifecycle.
Putting it into Practice
To leverage a more data-centric approach for networking application development, developers typically need three things:
- A data management services layer or system that meets the performance requirements and resource constraints of the networking platform(s)
- A means to use a higher-level, more expressive data management language like Oracle's PL/SQL to abstract away underlying data management specifics
- An easy way to integrate data-centric applications and components with existing networking applications and platforms
A data management services layer is used to store and manage data from various sources across a variety of storage mediums (RAM, Flash, Disk, etc.). From an application perspective, it can provide a uniform data abstraction layer to simplify the development of data-driven applications.
One approach is to use an embedded relational database and vendor-supported database interface procedures. While acceptable for some systems and development timelines, stringent performance requirements and time-to-market goals may require higher performance and greater legacy code compatibility than that afforded by most embedded database implementations. In these cases, data-centric application development frameworks that allow developers to create high performance, application-specific data management systems may be a better fit.
Regardless of the exact make-up of the chosen data management technology, a relational data management system enables the use of a higher-level language for building data management applications. By far, the most commonly used data management language today is Structured Query Language (SQL) and its popular procedural cousin, Oracle's PL/SQL. Data-centric languages such as these enable developers to quickly encapsulate complex data management rules and logic while providing a high level of modularity and abstraction, drastically simplifying the development of data management code. They also offer optimized data constructs that are not available in C or C++. The use of higher-level data-centric languages in addition to C or C++ can significantly reduce networking development time, enable greater application flexibility and portability, and make it easier to integrate and innovate with system data.
How does one build data management code with a data-centric language? First, a data-centric language is used to define data types and express the relationships between the underlying data and the operations to be performed on the data. The resulting schema, once defined, is then passed through a generator that automatically produces data management code, preferably in a common format such as ANSI C source code. The resulting functions can then be compiled, linked, and used by the main application, along with the associated service libraries that provide underlying data management services. Beyond the immediate productivity gain from using a higher-level data management language, code generation automation provides improved data management consistency across all software applications. Increased consistency reduces data and application integration and testing efforts while making it easier to get to high quality software modules that can be rapidly combined into production applications.
Click here for Figure 3
Integrating a data management system and data-centric components with existing applications is essential for speeding networking applications development. Few networking equipment developers start designs from scratch. Fewer still can afford to scrap and re-do large bodies of existing code. To leverage the productivity benefits of data-centric software design, solutions must be able to seamlessly interface new or improved data management functions with existing applications.
Conclusion
A more data-centric approach to the development of networking applications offers many advantages for networking development. Through data abstraction, the approach reduces complexity with a uniform data management services layer to isolate applications programming from the underlying hardware platform. This reduces the development, testing and porting effort involved in supporting changing application requirements and hardware specifications.
Through the use of a more expressive language for data management applications coding, programming is both simplified and accelerated, enabling developers greater productivity with far fewer lines of code. In addition, a data management services layer improves system performance and reliability through consistent use of highly optimized data management services such as indexing, storage management and data integrity features for back up and restore functions. Finally, data-centric software design eases data integration, allowing developers to better integrate, manage and optimize the data flowing through systems.
About the Author
Eugene Buechele is the chief technology officer and vice president of customer engineering at ENCIRQ Corporation. He can be reached at: Eugene.buechele@encirq.com