Microservices Introduction
Son Le - IBM Cloud Technical Evangelist
E: sonle@sg.ibm.com
T: @thsonvt
Agenda
- Building Monolithic App
- Introduction about Microservices
- Characteristics of Microservices Architecture
- Microservices and DevOps
- Demo of implementing a Microservices Architectured App on Bluemix
Building Monolithic App
What's Great with Monolithic App
* Simple to develop
* Simple to test
* Simple to deploy
* Simple to scale
What's Bad with Monolithic App
* App is overwhelmingly complex. Fixing bugs and implementing new features become difficult & time consuming
* The development will be slow down due to app size
* Very hard to do continuous development (which has been become the new norm in modern SaaS business)
* Difficult to scale when different modules have conflicting resource requirements
* Reliability is an issue i.e a memory leak could impact entire app
* Extremely difficult to adopt new frameworks & technologies
What is Microservices
What is Microservices
Microservices are small, autonomous services that work together
Characteristics of Microservices
1. Small and focused on doing one thing well
* Single Responsibility Principle
Gather together those things that change for the same reason, and separate those things that change for different reasons.
* How small is small?
* When is small enough and no smaller?
Amazon CEO's Jeff Bezos Two Pizza Rule "teams shouldn’t be larger than what two pizzas can feed"
Characteristics of Microservices
2. Autonomous
* Separate entity, can be deployed on isolated "machine"
* Be able to change independently
"Can you make a change to a service and deploy it by itself without changing anything else?"
* Each service expose an API and communicate via API
Characteristics of Microservices
3. Language Neutral
* Should be built using the tech which makes most sense for it
* Communication through language-neutral APIs, typically an Hypertext Transfer Protocol (HTTP)-based resource API, such as REST
Characteristics of Microservices
4. Bounded Context
* A particular Microservice doesn't know anything about underlying implementation or architecture of other services.
App Re-Architected as Microservices
Microservices vs Monolithic App
A monolithic application is an application where all of the logic runs in a single application server.
Microservices vs Monolithic App
Microservices architecture with multiple languages and data store technologies
Microservices vs Monolithic App
Category | Monolithic | Microservice |
---|---|---|
Code | A single code base for the entire application | Multiple code bases. Each microservices has its own code base |
Understandability | Often confusing and hard to maintain | Much better readability and much easier to maintain |
Deployment | Complex deployments with maintenance windows and scheduled downtimes | Simple deployment as each microservice can be deployed individually, with minimal if not zero downtime |
Microservices vs Monolithic App
Category | Monolithic | Microservice |
---|---|---|
Language | Typically entirely developed in one programming language | Each microservice can be developed in a different programing language |
Scaling | Requires you to scale the entire application even though bottlenecks are localized | Enables you to scale bottlenecked services without scaling the entire application |
Microservices vs Monolithic App
Benefits of Microservices
* Their small size enables developers to be most productive.
* It's easy to comprehend and test each service.
* You can correctly handle failure of any dependent service.
* They reduce impact of correlated failures.
What to avoid with Microservices
1. Don't start with Microservices
2. Don't even think about Microsevices without DevOps
3. Don't manage your own infrastructure
4. Don't create too many Microservices
5. Don't forget to keep an eye on potential latency issue
Demo of Microservices App on Bluemix
Demo of Microservices App on Bluemix
Catalog App
* A backend RESTful API to keep track of all the items in the store.
* Developed using Node.js with Express framework. The catalog of items will be persisted in a Cloudant database.
* Node.js is selected due to it’s non-blocking, event-driven I/O, it’s ability to handle many requests, and for the use of a non-relational database for our catalog of items.
Demo of Microservices App on Bluemix
Catalog App
http://microservices-catalogapi-sonlethanh-165.mybluemix.net/
Demo of Microservices App on Bluemix
Orders App
* A backend RESTful API to keep track of all store orders.
* Implemented this using Java JAX-RS and use JPA to store the orders in a SQL Database.
* Java EE is selected due to the nature of this application handling customer orders and potential billing information, failures are not acceptable for this service and security is our utmost importance.
Demo of Microservices App on Bluemix
Orders App
http://microservices-ordersapi-sonlethanh-166.mybluemix.net/
Demo of Microservices App on Bluemix
UI App
PHP was chosen for the UI due to it being super easy to create a UI.
http://bit.ly/bluemix28012016-survey
Copy of Microservices Introduction
By Son Le Thanh
Copy of Microservices Introduction
- 982