Migration to the cloud has been a popular topic in industry and academia in recent years. Despite many benefits that the cloud presents, such as high availability and scalability, most of the on-premise application architectures are not ready to fully exploit the benefits of this environment, and adapting them to this environment is a non-trivial task. Microservices have appeared recently as novel architectural styles that are native to the cloud. These cloud-native architectures can facilitate migrating on-premise architectures to fully benefit from the cloud environments because non-functional attributes, like scalability, are inherent in this style. The existing approaches on cloud migration does not mostly consider cloud-native architectures as their first-class citizens. As a result, the final product may not meet its primary drivers for migration. In this paper, we intend to report our experience and lessons learned in an ongoing project on migrating a monolithic on-premise software architecture to microservices. We concluded that microservices is not a one-fit-all solution as it introduces new complexities to the system, and many factors, such as distribution complexities, should be considered before adopting this style. However, if adopted in a context that needs high flexibility in terms of scalability and availability, it can deliver its promised benefits. more details: http://arxiv.org/abs/1507.08217
A healthy diet for your Java application Devoxx France.pdf
Migrating to Cloud-Native Architectures Using Microservices: An Experience Report
1. Migrating to Cloud-Native
Architectures Using Microservices:
an Experience Report
Armin Balalaie, Abbas Heydarnoori
Sharif University of Technology
Pooyan Jamshidi
Imperial College London
3. Developing a single application as a suite of
small services
Source: http://martinfowler.com/articles/microservices.html
4. Services are built around business capabilities
Source: http://martinfowler.com/articles/microservices.html
5. Services are independently deployable by
fully automated deployment machinery
Source: http://martinfowler.com/articles/microservices.html
6. Feedback to Dev is necessary from Ops and
Micro-services facilitate it
• Micro-services as native cloud architecture that enable DevOps
• Performance-aware DevOps
• Design-time performance models
• Performance monitoring
• Performance change detection
• Performance anti-patterns detection
• Evolution: Filling the gap between Dev and Ops
• Software Architecture Optimization for Performance
• Resource provisioning and management
More details on “performance-oriented DevOps” published by SPEC Research Group on DevOps:
https://research.spec.org/news/single-view/article/technical-report-on-performance-oriented-devops-
published.html
7. There is a bare minimum of centralized
management of the services (Polyglot-ness)
Source: http://martinfowler.com/articles/microservices.html
8. SSaaS (Server Side as a Service)
A platform that makes mobile application development easier
9. Features of SSaaS
• Mobile application developers can use server-side capabilities
without knowing any server-side programming languages
• RDBMS as a Service
• Define data models in SSaaS dashboard
• Use the models’ objects in mobile application development
• Built-in user management
• Chat as a Service
• Integration with RDBMSaaS user authentication
11. Reasons for migration
• On-demand capability of Chat as a Service
• The need for a reusable resource manager
• Management of resources like relational database instances, e.g. MySQL
database.
• The need for decentralized data governance
• Chat service’s metadata needed a dedicated place
• The need for automated deployment
• The need for built-in scalability
27. The research on Micro-services has started only in 2015,
Plenty of opportunities ahead!
1. Kratzke, N.: About microservices, containers and their underestimated impact on network
performance. CLOUD (March 2015)
2. Levcovitz, A., Terra, R., Valente, M.T.: Towards a technique for extracting microservices from
monolithic enterprise systems. VEM (September 2015)
3. Rahman, M., Gao, J.: A reusable automated acceptance testing architecture for microservices in
behavior-driven development. SOSE(March 2015)
4. Stubbs, J., Moreira, W., Dooley, R.: Distributed systems of microservices using docker and
serfnode. IWSG (June 2015)
5. Viennot, N., L´ ecuyer, M., Bell, J., Geambasu, R., Nieh, J.: Synapse: A microservices architecture
for heterogeneous-database web applications. EuroSys. (April 2015)
More details? http://arxiv.org/abs/1507.08217
28. Our current agenda!
• Migration patterns for micro-services
• Architectural tactics
• Situational method engineering for extracting common reusable
practices
• Method chunks
• Pattern template for documenting practices
• Migration patterns vs. design patterns
30. Cloud Migration through Pattern Composition
• The migration patterns can be seen as a sequence of activities by which
an application is gradually migrated to the micro-services.
• The migration patterns can be composed (i.e., executed sequentially) to
move a monolithic application to micro-services.
35. Migration Patterns in the context of Cloud-RMM
P. Jamshidi, A. Ahmad, C. Pahl, "Cloud Migration Research: A Systematic Review", IEEE Transactions on Cloud
Computing, 2013, DOI:10.1109/TCC.2013.10.
Migration patterns
Primarily facilitate
planning
Enable Auto-Deployment of
Multi-Tier Systems
in Hybrid Cloud Environment
36. Developing a single application as a suite of
small services
Source: http://martinfowler.com/articles/microservices.html
Architecture of SSaaS before the migration
Target Architecture of SSaaS
Clusterization
Services are built around business capabilities
Source: http://martinfowler.com/articles/microservices.html
Services are independently deployable by
fully automated deployment machinery
Source: http://martinfowler.com/articles/microservices.html
There is a bare minimum of centralized
management of the services (Polyglot-ness)
Source: http://martinfowler.com/articles/microservices.html
Transforming DeveloperData to a Service Introducing Continuous Delivery
Introducing Edge Server Introducing Dynamic Service Collaboration Introducing Resource Manager
Deployment in the development
environment is difficult for a
typical developer
Service contracts are double
important
Distributed system development
needs skilled developers
Creating service development
templates is important
Editor's Notes
Describe differences between monolithic and microservices architecture in terms of number of services and scalability mechanisms
Describe how microservices creates vertical layers both in team formation and architecture and every service needs a dedicated team to deliver a business capability completely.
Describe the need for Continuous Delivery in microservices due to an increase in the number of services
Describe how microservices enable polyglot-ness in both data storages and programming languages
Describe SSaaS as a Mobile Backend as a Service through which mobile development time will be reduced and briefly mention its features
Briefly describe the high-level components of SSaaS and their duties.
Describe why a migration to microservices was needed for SSaaS
Describe the necessity of defining a target architecture before executing the migration and briefly describe the new components that was needed for SSaaS migration including both supporting components and ones that have appeared as a result of re-architecting the system.
Highlight the necessity of CD for a good microservices again. Describe CI as a starting point for CD. Explain why Containerization is a good option for deployment of microservices.
Describe how DeveloperData transformed from an Integration Database to an Application Database and dependencies shifted from method-level to service-level
Desribe separation of code and config as a best practice in CD that is achieved by using Configuration Server. In this step a full pipeline (with docker image creation) has been created for each service and deployment is automatic in a single server.
Describe the importance of introducing an Edge Server in order to hide the future internal changes from end users
Explain the importance of dynamic discovery of services and load balancing due to the increase in the number of services and describe the corresponding components
Describe the importance of ResourceManager for reserving database instances for RDBMS and Chat services.
Describe how DeveloperData re-architected for introducing these new services.
Describe how CoreOS and Kubernetes used to deploy each service on a cluster
Supporting components and depending services should be deployed and it is a lot
There are more services in the system and each one can evolve independently. Inter-team communication and techniques like Tolerant Reader are important so as to not break the system
Microservices involves distributed development. The team should be familiar with distribution. A typical example is defining states without knowing its side effects
It is good to have controlled polyglot-ness so as to increase the speed of development. These can be gained using service initiation templates for different languages and data stores.