Microservices is a new software architecture and delivery paradigm, where applications are composed of several small runtime services.
The current mainstream approach for software delivery is to build, integrate, and test entire applications as a monolith. This approach requires any software change, however small, to require a full test cycle of the entire application.
With Microservices a software module is delivered as an independent runtime service with a well defined API. The Microservices approach allow faster delivery of smaller incremental changes to an application.
There are several tradeoffs to consider with the Microservices architecture. On one hand, the Microservices approach builds on several best practices and patterns for software design, architecture, and DevOps style organization. On the other hand, Microservices requires expertise in distributed programming and can become an operational nightmare without proper tooling in place. There are several good posts that highlight the pros-and-cons of Microservices, and I have added in the references section.
In the remainder of this post, I will define five architectural constraints (principles that drive desired properties) for the Microservices architectural style. To be a Microservice, a service must be:
Elastic
Resilient
Composable
Minimal, and;
Complete
Microservice Constraint #1 – Elastic
A microservice must be able to scale, up or down, independently of other services in the same application.
This constraint implies that based on load, or other factors, you can fine tune your applications performance, availability, and resource usage.
This constraint can be realized in different ways, but a popular pattern is to architect the system so that you can run multiple stateless instances of each microservice, and there is a mechanism for Service naming, registration, and discovery along with routing and load-balancing of requests.
Microservice Constraint #2 – Resilient
A microservice must fail without impacting other services in the same application.
A failure of a single service instance should have minimal impact on the application. A failure of all instances of a microservice, should only impact a single application function and users should be able to continue using the rest of the application without impact.
Adrian Cockroft describes Microservices as loosely coupled service oriented architecture with bounded contexts [3]. To be resilient a service has to be loosely coupled with other services, and a bounded context limits a service’s failure domain.
Microservice Constraint #3 – Composable
A microservice must offer an interface that is uniform and is designed to support service composition.
Microservice APIs should be designed with a common way of identifying, representing, and manipulating resources, describing the API schema and supported API operations. The ‘Uniform Interfaces constraint of the REST architectural style describes this in detail.
Service Composition is a SOA principle that has fairly obvious benefits, but few guidelines on how it can be achieved. A Microservice interface should be designed to support composition patterns like aggregation, linking, and higher-level functions such as caching, proxies and gateways.
I previously discussed REST constraints and elements in as two part blog post: REST is not about APIs
Microservice Constraint #4 – Minimal
A microservice must only contain highly cohesive entities
In software, cohesion is a measure of whether things belong together. A module is said to have high cohesion if all objects and functions in it are focused on the same tasks. Higher cohesion leads to more maintainable software.
A Microservice should perform a single business function, which implies that all of its components are highly cohesive. This is also an Single Responsibility Principle (SRP) of object-oriented design [5]
Microservice Constraint #5 – Complete
A microservice must be functionally complete
Bjarne Stroustrup, the creator of C++, stated that a good interface must be, “minimal but complete” i.e. as small as possible, and no smaller.
Similarly, a Microservice must offer a complete function, with minimal dependencies (loose coupling) to other services in the application. This is important, as otherwise its becomes impossible to version and upgrade individual services.
This constraint is designed to oppose the minimal constraint. Put together a microservice must be “minimal but complete.”
Conclusions
Designing a Microservices application requires application of several principles, patterns, and best practices of modular design and service-oriented architectures. In this post, I’ve outlined five architectural constraints which can help guide and retain the key benefits of a Microservices-style architecture.
For example, Microservices Constraint# 1 – Elastic steers implementations towards separating the data tier from the application tier, and leads to stateless services.
At Nirmata we have built our solution, that makes it easy to deploy and operate microservices applications, using these very same principles. We believe that Microservices style applications, running in containers, will power the next generation of software innovation.
If you are using, or interested in using microservices, I would love to hear from you.
Radhesh is Managing Partner of Arka Venture Labs. Arka Venture Labs is an Accelerator fund which assists Indian B2B Startups to foray into US by providing a combination of Funding, Mentoring and access to Silicon Valley Ecosystem. Arka Venture Labs was formed in August 2018 and has made 9 investments so far. Prior to starting Arka, Radhesh was Venture Advisor to Blume Ventures, focusing on early stage B2B Startups investments. Before this he was leading the Global Entrepreneur Program, for IBM India and South Asia. He exhibited strong leadership in steering the Startup initiative of IBM from scratch to one of the companies to be reckoned by the Startup ecosystem in India and generating strong revenues for IBM India Cloud business. He has helped many B2B startups scale in their journey by mentoring them, facilitating access to funds and customers.
He has core competency in evaluating startups leveraging technology and advising them on areas of improvement from business and technology standpoint. He conceptualized IBM India`s Startup challenge called IBM India Smartcamp and successfully executed the same. Radhesh has personally curated the startups for the finals, many of whom got funding either for the first time or for their subsequent rounds.He also worked with large enterprises in assisting them in identifying the next generation innovations through joint hackathons and startup challenges.
Prior to this role at IBM he was working as a Software Architect where he was designing Software solutions for Enterprise Clients, ISVs and System Integrators. He created many First of its kind solutions and led several key Sales wins for IBM. Radhesh has strong skills in building strategic relationships with Partner organizations.
Anubhav is VP of Business Development and Customer Success. He has 20+ years of experience in building and growing businesses across service provider, enterprise and commercial sectors. He has led functions in business development, product management, marketing, delivery and operations through his career, and most recently served as GM for the $250M Web-scale Services business at Cisco.
Anubhav is passionate about building new solutions and teams, and growing new market segments. At Cisco, he grew business 30-40% annually for many years while also building new offers, a world class team and a global delivery model.
Throughout his career, Anubhav has straddled technical, operational and business domains to bring new solutions around real-time analytics, operational assessments and network lifecycle management. Most recently, he was involved in bringing in new offers around recently launched Business Critical Services, a $2.5B business for Cisco. Before leaving Cisco, Anubhav signed off with a $350M multi-year deal built entirely around new solutions and engagement model with an innovative commercial structure.
Anubhav brings to Nirmata’s product development and organization an extensive experience developing both custom and standard subscription services, which was significantly formed by his time spent building analytics solutions at Cisco. This perspective on building bleeding edge solutions is evident in his business outlook, which recognizes that best solutions are built with the customers, by listening to them and partnering in risk taking when breaking new ground.
Anubhav holds bachelor’s degrees in both physics and electronics and telecommunications from Mumbai University and an MBA from San Jose State University.
Ritesh Patel, Founder & VP of Products
Ritesh Patel is co-founder of Nirmata and has 20+ years experience building and delivering enterprise software solutions and has led highly successful software and business development teams. Ritesh began his career in engineering for high tech firms, and has since migrated to the business side of the operation. In his founding of Nirmata, Ritesh sought to bring his broad spectrum of experience to a single previously unaddressed industry problem through the creation of a new business. To Nirmata’s leadership, Ritesh brings a rare skill set incorporating experience with the entire chain of software development activities. This background has contributed to Nirmata’s commitment to empowering all employees to do the hard work required to deliver tools that solve tough problems.
Prior to Nirmata, Ritesh led business development at Brocade, where he was responsible for defining the firm’s cloud strategy, and oversaw developments that advanced the entire cloud “as-a-service” market. Through cloud and security-related initiatives, Ritesh and his team at Brocade were able to package Brocade’s plethora of IT infrastructure products into enterprise-ready solutions including OpenStack and CloudStack that pioneered widespread cloud computing implementation. In addition to these technical achievements, Ritesh succeeded in creating an extensive partner ecosystem to efficiently match these solutions with urgent customer needs.
Ritesh has also held key technical positions at Trapeze Networks (where he created industry award-winning products), Nortel, and Motorola. Ritesh holds an MBA from UC Berkeley and a master’s degree in computer engineering from Michigan State University.
Damien Toledo, Founder & VP of Engineering
Damien Toledo is Co-Founder and Vice President of Engineering, overseeing research and development, operations, maintenance, and delivery of Nirmata products. Damien brings over 20 years experience leading global engineering teams and delivering Enterprise grade solutions.
Since 1998 when he arrived in Silicon Valley from France to pursue the possibilities of US startup culture, Damien has held a number of engineering positions at high tech firms, each of which playing a role in the concept development for Nirmata. Building on lessons learned in management transformation at Jetstream Communications in the early 2000s, Damien built the Meru Networks Network Management team and Network Management solution from the ground up as one of the firm’s original members. Meru Networks went public in 2010 (NASDAQ:MERU).
Subsequent to his work at Meru, Damien led the transformation of the engineering team at Netscout to build an agile organization. At Netscout, he championed the adoption of Continuous Integration best practices across a team of 200+ engineers and 7 development sites, which resulted in reducing the software release cycles by 300%. While at Netscout and together with Nirmata co-founder Jim Bugwadia, Damien oversaw the adoption of microservices while searching for solutions to operating quickly in the cloud, and developed the foundations for what would become Nirmata.
Damien holds a master’s degree in computer science from University of Technology of Compiègne.
Jim Bugwadia, Founder & CEO
Jim Bugwadia has 20+ years experience building and leading effective teams and has created software that powers communications systems around the world.
Jim was among the original architects and business leaders within Cisco’s cloud automation practice, where he helped grow revenues to over $250M. During Jim’s tenure, IDC recognized the practice as #1 in global cloud services.
Prior to his work at Cisco, Jim led engineering teams at startups including Pano Logic, a desktop virtualization startup recognized for its innovative design by Wired magazine; Trapeze Networks, a wireless pioneer; and Jetstream Communications, a telecom equipment manufacturer. Jim started his career developing C++ software at Motorola for cellular network infrastructure where his team launched the world’s first cellular telephony that used code division multiplexing to optimize radio frequency usage.
Jim’s passion is to simplify the use of complex systems by providing well designed products that drive mass adoption of new technologies. As software has become mission critical to all businesses, Jim and his co-founders started Nirmata to help enterprises automate the delivery and management of applications. Jim currently develops software in Java, Golang, and Javascript, and is a Certified Kubernetes Administrator who actively participates in Nirmata’s full product lifecycle.
Over the course of his career, Jim has logged over $1.3B in revenue, 6 patent filings, 8 major product launches, and 29 years experience coding.
Jim holds a bachelor’s degree in engineering from Chicago State University and a master’s degree in computer science from the University of Illinois at Chicago.