Wednesday, May 13, 2015

Moving to Data Services for Microservices

There have been alot of discussions on Microservices lately.  Alot of concentration has been around the services themselves.  But what about the Data that these Services need and use?  Should Data be tightly coupled to the microservice?   Should there be abstraction between the service and the data?  In this blog we will touch on Micro Data Services and how I think they can be created.

A microservice is a software architecture style, a form of application development, in which applications are built and composed as a suite of services.  The services are small, independent, self contained, independently deployable and scalable.  They are highly decoupled and focus on a small task or capability.  So a formal definition:
Microservices is an architectural approach, that emphasizes the functional decomposition of applications into single-purpose, loosely coupled services managed by cross-functional teams, for delivering and maintaining complex software systems with the velocity and quality required by today’s digital business.
One of the characteristics of microservices, described by Martin Fowler, in his microservices article, is described as Decentralized Data Management.  He describes this as letting each service manage its own database.  Either different instances of the same database technology or entirely different database systems.  As he indicated this is an approach called Polyglot Persistence.   In the context of the database, this is referring to services using a mix of databases to take advantage of the fact that different databases are suitable for different types of programs.  Of course there maybe already existing silos or monolith databases that the microservices need to use.

So first let's talk about going from Monolith to Microservices visually and then let's talk about how Data Virtualization can help Enterprises move to microservices.  

The monolith application is single-tiered and the user interface and data access code are put in a single program in a single platform.  Usually a monolith describes main frame type applications with tight coupling of the components instead of reuse modularity.  There are several disadvantages to using the monolith approach:
  • Less iteration due to large code base and complex integration points with many dependencies
  • Maintenance  of the large code base
  • Code quality can be poor with the large code base

The Microservice architecture encompasses the application components together into the small independent service including the data access.  I wanted to highlight some of the advantages to using microservices:

·         Microservice architecture gives developers the freedom to independently develop and deploy services
·         A microservice can be developed by a fairly small team
·         Code for different services can be written in different languages (though many practitioners discourage it)
·         Easy integration and automatic deployment (using open-source continuous integration tools such as Jenkins, Hudson, etc.)
·         Easy to understand and modify for developers, thus can help a new team member become productive quickly
·         The developers can make use of the latest technologies
·         The code is organized around business capabilities
·         Starts the web container more quickly, so the deployment is also faster
·         When change is required in a certain part of the application, only the related service can be modified and redeployed—no need to modify and redeploy the entire application
·         Better fault isolation: if one microservice fails, the other will continue to work (although one problematic area of a monolith application can jeopardize the entire system)
·         Easy to scale and integrate with third-party services
·         No long-term commitment to technology stack

Now let’s move toward the data discussion with Microservices.  How can I create a Micro Data Service so the microservice has access to the data it needs and only the data it needs?  That is where we can pull in JBoss Data Virtualization to allow easy migration and adoption of microservices.   As seen in the diagram below we have a lot of different data sources that microservices may need.  So we can use Data Virtualization to add Micro Data Services for each of the microservices.  We can also add Security such as row level security and column masking to the Virtual Database (VDB).  The VDB can be created for each microservice or we can create Multiple Micro Views in the VDBs.  What are the Benefits to using Data Virtualization for Micro Data Services?
·         Connect to many Datasources
·         Create VDBs and Views according to capabilities
·         Expose the VDBs  through different standards (ODBC, JDBC, OData, REST, SOAP) for the microservices
·         Ability to place your Micro Data Service in the xPaaS on Openshift
·         Create the access levels based on roles for fine grained access
·         Keep your data stores as they are with new DV views and Migrate to new sources easily with DV
·         Provide the same data services used in the microservices to Business Intelligence Analytic tools
Now that you see the advantages and I have peaked your curiosity, check out the Videos, Documentation and Downloads to start you first Data Service for use with your Microservices: