The age of the monolithic application is all but dead. Old-school notions of software structures built around a single tier, inside which is housed application logic, requisite analytics functions, user interface controls and a silo-based approach to a defined storage repository, only exist in a minority of cases. There is now...
a more dynamic means of creating software based on modular design, object-based application blocks, cloud components and microservices.
Dynamic modular software development is well suited to the always-on continuous development and continuous integration world of the web and the contemporary cloud computing platforms that traverse it. Software today needs to be “hot-swapped” and upgraded constantly inside agile development methodologies that champion a deploy early, deploy often approach.
While a monolithic application has one set of endpoints, one set of protocols and one set of monitoring and reporting mechanisms, composable applications have an (almost) infinite variety of endpoints, application programming interface (API) connections and input/output (I/O) channels.
Such an application architecture could be defined as holistic: it is built on microservices that use APIs to look at the entire world around it and it is aware of its place in the universe.
Golden opportunity in API gateways
According to Nginx, when a developer chooses to build an application as a set of microservices it is necessary to decide how the application’s clients will interact with the microservices. “With a monolithic application there is just one set of (typically replicated, load-balanced) endpoints. In a microservices architecture, however, each microservice exposes a set of what are typically fine-grained endpoints,” Nginx notes in a blog post.
Joining these endpoints together is tough. The principal architect at identity software company Auth0, Vittorio Bertocci, says that in modern application architectures, software comes together and dissolves dynamically. As such, authentication and access control are often the only trait d’union holding a solution together.
“Proper privilege management is a must to ensure that resources are always accessed securely and in full compliance with policies even as client applications emerge and liquify dynamically. Only a consistent and standards-based authentication strategy can enable developers to freely orchestrate disparate resources, on-premise or from the cloud, internal API or SaaS [software-as-a-service] apps, from mobile solutions or server to server, while maintaining the productivity and fast delivery holistic applications development require,” says Bertocci.
The road to application elasticity
Shamik Mishra, assistant vice-president of technology and innovation at technology design and engineering company Aricent, says that in the era of microservices and container-hosted applications, system monitoring changes drastically. According to Mishra, the monitoring systems needed to monitor infrastructure-as-code elements – such as containers hosting microservices – require orchestration systems to trap alerts and act on them.
“These monitoring systems are input channels that lead us towards application elasticity. Monitoring systems can be role-based and can drive calculation or monetisation of an application or microservices based on API consumption. Inside effective holistic systems, machine learning will be a key tool for enabling real-time processing of event-based architectures (like serverless) and microservices. Machine learning will drive service pricing, fraud detection, infrastructure maintenance for microservices, software testing, root cause analysis and the ability to act on monitoring data autonomously,” he says.
Patrick McFadin, vice-president for developer relations at Cassandra database services company DataStax, says on the road to holistic applications, there is no “single code path” to follow. He says that since each element of a holistic application is glued together using APIs, each component part of the application can have more resources added to meet demand, which makes the system highly scalable. This can even be automated to make life easier for the developer team, so they can concentrate on software rather than infrastructure.
“The end result here is that holistic applications should help you deliver a better service to the customer. By federating all these elements together, you can put together a more personalised experience that includes all the results and data that this customer wants to see,” says McFadin.
“The flipside is that you have a much more complex environment. Each element will be made up of a cluster of nodes running its own service, creating its own data and having to meet its own service-level agreement. This expansion can be trickier to manage as it relies on all the elements working together well, and that the data from each of the services is managed effectively,” he adds.
Tips for a holistic software life
- Authentication and identity-based access control can act as a valuable negotiating link between disparate systems.
- Holistic applications need holistic monitoring systems focused on infrastructure-as-code elements with orchestration functions to trap alerts and maintain system health.
- The flipside of holistic software is complexity – each element will be made up of a cluster of nodes running its own service, creating its own data and having to meet its own service level agreement (SLA).
- Discrete testing of a microservice is detached from the holistic testing necessary to determine overall quality of a distributed application.
- Machine learning will be a key tool for enabling real-time processing of event-based holistic software architectures that use technologies including serverless and microservices. It has a key role to play in providing self-healing and autonomous components.
- Holistic applications are never finished – the software project can be augmented, changed and updated at any time. This is an always-on software future.
A shift in mindset is needed. McFadin says it is much harder to call a project “done”, as each element can be changed or updated at any time. While the services can be more flexible, it is necessary to think differently about the role of software developers. Companies that have implemented agile development properly should be equipped to manage this change more effectively. However, those that just namecheck agile, or don’t engage in the process fully, may well struggle.
Eric Mizell, vice-president of solution engineering at software analytics company OverOps, claims the new composable, containerised, compartmentalised world of software is creating headaches for those tasked with the challenge of maintaining the reliability of these complex applications.
“Even within the context of monolithic applications, our dependence on 30-year old technology, such as logging frameworks to identify functional issues in production code, is sub-standard at best – within the context of microservices and holistic applications, it is nearly worthless,” says Mizell. “How do we define a call stack in a holistic application? How can we expect the limited information found in a log file to provide enough context into a functional issue within a distributed code base?
“Discrete testing of a microservice is detached from the holistic testing necessary to determine overall quality of a distributed application. A new approach to functional quality/health is necessary. As we move from monolithic applications to a more dynamic approach to software, development and IT operations teams will need more granular visibility and context into the state of their code and improved methodologies for ensuring continuous reliability,” says Mizell.
Despite the fact that containerised, componentised and compartmentalised software represents the future of application architectures, monolithic applications and legacy systems will still exist. The best advice going forward may be to treat these non-containerised systems as “big chunks” of composable functionality that exist inside the new and inherently more granular holistic software universe.