About the NFV Insight Series
The application of virtualization and cloud principles, such as network functions virtualization (NFV) and software defined networks (SDN), represent a major shift for the communications and networking industry. Until recently, this approach appeared to be unworkable because of stringent performance, availability, reliability, and security requirements of communication networks. Leading communications service providers (CSPs) now implement Network optimized Cloud architectures to gain competitive advantage through increased automation and responsiveness, as well as by delivering an enhanced customer experience, while reducing operational costs. This series of briefs and white papers addresses some of the key technical and business challenges faced by service providers as they move to the cloud.
Today’s modern software architectures and design principles are built on lessons learned and experiences in the software industry at large. Some of these are expressed and adopted as popular approaches to microservices, DevOps, the Twelve-Factor App, Agile development, and others.
As Martin Fowler and others have pointed out,1 the software industry has been defining and working with the microservices concept for some time now. While there is no formal or agreed upon definition of what constitutes a microservice, a common set of characteristics exhibited by microservices-based architectures can nonetheless be identified. Some of the most interesting characteristics include:
? Componentization that enables the replacement of pieces independent of one another
? Organization based on business capabilities (functions) instead of technology
? Smart endpoints and dumb pipes
? Decentralized data management with one database for each service rather than one database for a whole product
? Infrastructure automation with mandatory continuous delivery.
Based on this list, one can deduce that other domains, such as DevOps and Agile development,2 play a pivotal role in realizing these capabilities. Also, these can be seen as intertwined or, in some cases, as being prerequisites of other capabilities. For example, does an agile organization structure enable the continuous delivery of software changes?
The principles and concepts of a modern software application are also rooted in popular manifestos, such as the Twelve-Factor App.3 These provide a framework for organizing the components and requirements of an application as service.
These concepts can be broad and applicable to many software architectures that might not claim to be microservices and/or DevOps based. In some cases, they could even be misconstrued or misinterpreted by consumers of these ideas.
From the outset, it is important to note that this paper is neither exhaustive nor complete. Rather it has been written to generate interest in microservices and in seeing how microservices concepts improve application development, simplify the functional composition of a product, add agility to software deployment and management, as well as further refine the principles of a microservices architecture.
Many of the concepts and principles across these domains can be applied to modern software that both meets the needs of customers and exceeds their expectations. To explore these ideas, this paper presents the anatomy of a microservice.
In addition to the software component’s core function is the responsibility to provide a contract for the interfaces — for example, the discovery service API and the data schema — along with each of the services provided by the infrastructure. These services include the:
? Administration and API gateway: An API-first approach, as well as a large collection of services requires a unified and controlled access point application service exposed for consumption.
? Discovery services: These services provide the publish/subscribe mechanisms for registration and discovery of distributed services within the cluster.
? Analytics services: These services pertain to all telemetry data offloaded from the microservice for processing based on a consistent set of policies.
? Data services: These services consist of the data layer for the persistence and availability of state data required by the microservice.
These infrastructure services can themselves be implemented as microservices. Each of these auxiliary services, domains, and interfaces is briefly described in the following sections.