SlideShare a Scribd company logo
Microservices Architecture
Fundamental and Practice
Fundamental
What is Microservices?
An approach to developing a single application as a suite of small services, each
running of its own process and communication with lightweight mechanism, often
HTTP resource API. ~ Martin Fowler
Start from Monolithic
Monolithic is opposite of microservices. It is a common system that nowdays used.
It is application built as single unit.
Applications are often built in three main parts: client-side, database, server-side.
Server side handle HTTP request, execute domain logic, retrieve & update DB,
select the view or respond to client.
This server side application is a monolith.
The limit of monolithic
Monolithic applications can be successful, but increasingly people are feeling
frustrations with them, especially more applications are being deployed to the
cloud.
Change cycles are tied together
Over time it's often hard to keep a good modular structure
Scaling requires scaling of the entire application
Monolithic Microservices
Characteristic of Microservices Architecture
Componentization via services
Organized around Business Capabilities
Products not Projects
Smart endpoints and dumb pipes
Decentralized Governance
Decentralized Data Management
Infrastructure Automation
Design for failure
Componentization via services
a component is a unit of software that is independently replaceable and
upgradeable.
One main reason for using services as components (rather than libraries) is that
services are independently deployable.
Organized around Business Capabilities
Any organization that designs a system (defined
broadly) will produce a design whose structure is a
copy of the organization's communication structure.
-- Melvyn Conway, 1967
The microservice approach to
division is different, splitting up into
services organized around business
capability.
Products not Projects
Microservice proponents tend to avoid this model, preferring instead the notion that
a team should own a product over its full lifetime.
The product mentality, ties in with the linkage to business capabilities.
The smaller granularity of services can make it easier to create the personal
relationships between service developers and their users.
“You build, You run it” - Werner Vogels - CTO of Amazon
Smart endpoints and dumb pipes
Applications built from microservices aim to be as decoupled and as cohesive as
possible.
The two protocols used most commonly are HTTP request-response with
resource API's and lightweight messaging.
By using simple RESTish protocols rather than complex protocols
By using messaging over a lightweight message bus. The infrastructure chosen is typically dumb. simple
implementations such as RabbitMQ or ZeroMQ don't do much more than provide a reliable
asynchronous fabric
Be of the web, not behind the web
-- Ian Robinson
Decentralized Governance
One of the consequences of centralised governance is the tendency to standardise
on single technology platforms.
Experience shows that this approach is constricting - not every problem is a nail
and not every solution a hammer.
In this case microservices could be like this:
You want to use Node.js to standup a simple reports page? Go for it. C++ for a particularly gnarly near-
real-time component? Fine. You want to swap in a different flavour of database that better suits the read
behaviour of one component? We have the technology to rebuild him.
Decentralized Data Management ( 1 )
At the most abstract level, it means that the conceptual model of the world will
differ between systems.
This issue is common between applications, but can also occur within applications,
particular when that application is divided into separate components. A useful way
of thinking about this is the Domain-Driven Design notion of Bounded Context.
As well as decentralizing decisions about conceptual models, microservices also
decentralize data storage decisions.
Decentralized Data Management (2)
Infrastructure Automation
Teams building software this way make extensive use of infrastructure automation
techniques.
as much confidence as possible that our software is working, so we run lots of
automated tests. Promotion of working software 'up' the pipeline means we
automate deployment to each new environment.
Design for failure
Any service call could fail due to unavailability of the supplier, the client has to
respond to this as gracefully as possible.
Since services can fail at any time, it's important to be able to detect the failures
quickly and, if possible, automatically restore service.
That’s why, microservices have a lot of monitoring process, real-time monitoring,
business relevant metrics, log and so on.
Evolutionary Design
Evolutionary Design is see service decomposition as a further tool to enable
application developers to control changes in their application without slowing down
change.
Whenever you try to break a software system into components, you're faced with
the decision of how to divide up the pieces. what are the principles?
The key property of a component is the notion of independent replacement and
upgradeability.
Pattern & Practice
The Pattern
Monolithic Architecture
Microservices Architecture
API Gateway
Client-side discovery
Server-side discovery
Service Registry
Self Registration
3rd party Registration
Multiple service instance per host
Single service instance per host
Service instance per VM
Service instance per Container
Database per service
Monolithic Architecture (1)
● Simple to develop
● Simple to deploy
● Simple to scale
However:
The large monolithic code base intimidates developers, especially ones who are new to the team. The
application can be difficult to understand and modify. As a result, development typically slows down.
Overloaded IDE
Overloaded web container
Monolithic Architecture (2)
However:
Continuous deployment is difficult - a large monolithic application is also an obstacle to frequent
deployments.
Scaling the application can be difficult - a monolithic architecture is that it can only scale in one
dimension.
Obstacle to scaling development - A monolithic application is also an obstacle to scaling development.
Requires a long-term commitment to a technology stack - a monolithic architecture forces you to be
married to the technology stack (and in some cases, to a particular version of that technology) you
chose at the start of development .
Microservices Architecture (1)
● Each microservice is relatively small
○ Easier for a developer to understand
○ The IDE is faster making developers more productive
○ The web container starts faster, which makes developers more productive, and speeds up
deployments
● Each service can be deployed independently of other services
● Easier to scale development. It enables you to organize the development effort around multiple
teams. Each (two pizza) team is responsible a single service.
● Improved fault isolation. For example, if there is a memory leak in one service then only that service
will be affected.
● Eliminates any long-term commitment to a technology stack
Microservices Architecture (2)
Another challenge is deciding how to partition the system into microservices. This
is very much an art, but there are a number of strategies that can help.
Partition services by verb or use case.
Partition the system by nouns or resources.
Related Pattern
API Gateway
Implement an API gateway that is the
single entry point for all clients. The API
gateway handles requests in one of two
ways.
The API Gateway must use either the
Client-side Discovery pattern or Server-
side Discovery Pattern to route requests
to available service instances.
Client-side Discovery (1)
Services typically need to call one another.
In a traditional distributed system deployment, services run at fixed, well known
locations (hosts and ports) and so can easily call one another using
HTTP/REST.
a modern microservice-based application typically runs in a virtualized or
containerized environments where the number of instances of a service and their
locations changes dynamically.
Client-side Discovery (2)
The Benefit is fewer moving parts
and network hops compared to
Server-side registry.
This pattern couples the client to
service registry.
Server-side Discovery
When making a request to a service,
the client makes a request via a router
(a.k.a load balancer) that runs at a well
known location. The router queries a
service registry.
More network hops are required
than when using Client-side
discovery
AWS provide this functionality, e.g.
AWS Elastic Load Balancer
Service Registry (1)
a database of services, their instances and their locations.
Service instances are registered with the service registry on startup and
deregistered on shutdown.
Examples of service registries (or technologies that are commonly used as service
registries) include:
Eureka
Apache Zookeeper
Consul
Etcd
Service Registry (2)
The Service Registry is a critical system component. Although clients should cache
data provided by the service registry, if the service registry fails that data will
eventually become out of date. Consequently, the service registry must be highly
available.
You need to decide how service instances are registered with the service registry. There are two options:
● Self registration pattern - service instances register themselves
● 3rd party registration pattern - a 3rd party register the service instances with the service registry
Note: Service registry instances must be deployed on fixed and well known IP addresses
Self Registration
A service instance is responsible for registering itself with the service registry.
On startup the service instance registers itself (host and IP address) with the service
registry and makes itself available for discovery.
Drawbacks:
You must implement service registration logic in each programming language/framework that you use to
write your services
A service instance that is running yet unable to handle requests will often lack the self-awareness to
unregister itself from the service registry
3rd Party Registration
A 3rd party registrar is responsible for registering and unregistering a service
instance with the service registry.
Examples: Netflix Prana, AWS Autoscaling Groups, Joyent's Container buddy,
Registrator, Clustering frameworks such as Kubernetes and Marathon (un)register
service instances with the built-in/implicit registry.
Drawback:
Unless the registar is part of the infrastructure it’s another component that must be
installed, configured and maintained. Also, since it’s a critical system component it
needs to be highly available.
Multiple Services per host
Run multiple instance of services on a host (Physical or Virtual machine).
There are various ways of deploying a service instance on a shared host including:
Deploy each service instance as a JVM process. For example, a Tomcat or Jetty
instances per service instance.
Deploy multiple service instances in the same JVM. For example, as web
applications or OSGI bundles.
Drawbacks:
Risk of conflicting resource requirements / dependency versions
Difficult to limit the resources consumed by a service instance
Difficult to monitor process
Single Service per host
Deploy each single service instance on it’s own host.
The benefits of this approach include:
Services instances are isolated from one another
There is no possibility of conflicting resource requirements or dependency
versions
A service instance can only consume at most the resources of a single host
Its straightforward to monitor, manage, and redeploy each service instance
Drawbacks:
Potentially less efficient resource utilization
Database per service (1)
Keep each microservice’s persistent data private to that service and accessible only
via its API. The following of example:
Database per service (2)
if you are using a relational database then the options are:
Private-tables-per-service – each service owns a set of tables that must only be
accessed by that service
Schema-per-service – each service has a database schema that’s private to that
service
Database-server-per-service – each service has it’s own database server.
Additional
The Scale Cube
X-axis scaling consists of running
multiple copies of an application
behind a load balancer.
Y-axis axis scaling splits the
application into multiple, different
services.
Z-axis splits are commonly used to
scale databases. Data is partitioned
(a.k.a. sharded) across a set of servers
based on an attribute of each record.
CAP Theorem(1)
Consistency (C), Availability (A), and Partition tolerance (P) across distributed
systems.
Simply put, the CAP theorem demonstrates that any distributed system cannot guaranty C, A,
and P simultaneously, rather, trade-offs must be made at a point-in-time to achieve the level
of performance and availability required for a specific task.
CAP Theorem (2)
Reference
http://martinfowler.com/articles/microservices.html
http://microservices.io/patterns/microservices.html
https://auth0.com/blog/2015/11/07/introduction-to-microservices-part-4-
dependencies/
http://microservices.io/articles/scalecube.html

More Related Content

PPTX
Introduction to microservices
PDF
Microservices architecture
PPTX
Microservice architecture design principles
PDF
OpenShift 4, the smarter Kubernetes platform
PPTX
Introduction To Microservices
PPTX
Software architecture for high traffic website
PPTX
Introduction to Microservices
PDF
Introduction To Amazon Web Services | AWS Tutorial for Beginners | AWS Traini...
Introduction to microservices
Microservices architecture
Microservice architecture design principles
OpenShift 4, the smarter Kubernetes platform
Introduction To Microservices
Software architecture for high traffic website
Introduction to Microservices
Introduction To Amazon Web Services | AWS Tutorial for Beginners | AWS Traini...

What's hot (20)

PPTX
Microservice vs. Monolithic Architecture
PPTX
GCP IAM.pptx
PPTX
Microservice Architecture Software Architecture Microservice Design Pattern
PDF
Microservice Architecture
PDF
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
PPTX
Why to Cloud Native
PPTX
Hypervisor
PPTX
Migration into a Cloud
PDF
API Management Solution Powerpoint Presentation Slides
PDF
Why a Multi-cloud Strategy is Essential
PDF
Microservice architecture
PDF
AWS Certified Cloud Practitioner Course S1-S6
PPTX
Azure: PaaS or IaaS
PPTX
Virtualization Vs. Containers
PPTX
Monoliths and Microservices
PDF
DevOps Best Practices
PPTX
Introduction to kubernetes
PPTX
Microservices
PDF
Cloud Migration Strategy and Best Practices
PDF
Introduction to virtualization
Microservice vs. Monolithic Architecture
GCP IAM.pptx
Microservice Architecture Software Architecture Microservice Design Pattern
Microservice Architecture
Oracle CodeOne 2019: Descending the Testing Pyramid: Effective Testing Strate...
Why to Cloud Native
Hypervisor
Migration into a Cloud
API Management Solution Powerpoint Presentation Slides
Why a Multi-cloud Strategy is Essential
Microservice architecture
AWS Certified Cloud Practitioner Course S1-S6
Azure: PaaS or IaaS
Virtualization Vs. Containers
Monoliths and Microservices
DevOps Best Practices
Introduction to kubernetes
Microservices
Cloud Migration Strategy and Best Practices
Introduction to virtualization
Ad

Viewers also liked (20)

PPTX
Service Discovery and Registration in a Microservices Architecture
PDF
MicroService Architecture
PDF
Principles of microservices velocity
PPTX
Testing microservice-architecture-qe
PDF
Microservices Minus The Hype
PDF
Lean at Yahoo in 2008
PPTX
Microservices - Peixe Urbano Tech Talks
PPTX
Java Play Restful JPA
PPTX
Auckland API & Microservices Meetup 1: API led design
PDF
Spring 4.0 - Evolution or Revolution
PDF
Microservice Architecture
PDF
Microservices 101: opportunities, dilemmas and problems
PDF
Microservices 101 - The Big Why?
PDF
Revitalizing Aging Architectures with Microservices
PDF
Microservices the Good Bad and the Ugly
PDF
Systems Monitoring with Prometheus (Devops Ireland April 2015)
PDF
Microservices Architecture
PDF
BDD-Driven Microservices
PDF
Microservice Architecture on AWS using AWS Lambda and Docker Containers
PPTX
From SOA to MSA
Service Discovery and Registration in a Microservices Architecture
MicroService Architecture
Principles of microservices velocity
Testing microservice-architecture-qe
Microservices Minus The Hype
Lean at Yahoo in 2008
Microservices - Peixe Urbano Tech Talks
Java Play Restful JPA
Auckland API & Microservices Meetup 1: API led design
Spring 4.0 - Evolution or Revolution
Microservice Architecture
Microservices 101: opportunities, dilemmas and problems
Microservices 101 - The Big Why?
Revitalizing Aging Architectures with Microservices
Microservices the Good Bad and the Ugly
Systems Monitoring with Prometheus (Devops Ireland April 2015)
Microservices Architecture
BDD-Driven Microservices
Microservice Architecture on AWS using AWS Lambda and Docker Containers
From SOA to MSA
Ad

Similar to Microservices architecture (20)

PDF
#ATAGTR2020 Presentation - Microservices – Explored
PPTX
Software Architectures, Week 3 - Microservice-based Architectures
PDF
20141210 - Microservice Container
PPTX
Introduction to microservices
PPTX
building microservices
PDF
Microservices Architecture
PDF
Microservices
PDF
Introduction to Microservices Architecture - SECCOMP 2020
PDF
Building Microservices Software practics
PPTX
Unit No. II Architecture.pptx Cloud Microservices & Application
PDF
Micro Service Architecture
PDF
Term paper 2073131
PPTX
05 microservices microdeck
PPTX
Microservice intro
PPTX
An introduction to Microservices
PDF
Production-Ready_Microservices_excerpt.pdf
PPTX
AppDev with Microservices
PDF
Microservices - Hitchhiker's guide to cloud native applications
PPTX
Micro service session 1
PDF
Building microservices on azure
#ATAGTR2020 Presentation - Microservices – Explored
Software Architectures, Week 3 - Microservice-based Architectures
20141210 - Microservice Container
Introduction to microservices
building microservices
Microservices Architecture
Microservices
Introduction to Microservices Architecture - SECCOMP 2020
Building Microservices Software practics
Unit No. II Architecture.pptx Cloud Microservices & Application
Micro Service Architecture
Term paper 2073131
05 microservices microdeck
Microservice intro
An introduction to Microservices
Production-Ready_Microservices_excerpt.pdf
AppDev with Microservices
Microservices - Hitchhiker's guide to cloud native applications
Micro service session 1
Building microservices on azure

Recently uploaded (20)

PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
AI in Product Development-omnex systems
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
How Creative Agencies Leverage Project Management Software.pdf
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Nekopoi APK 2025 free lastest update
PDF
Digital Strategies for Manufacturing Companies
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
ISO 45001 Occupational Health and Safety Management System
PPTX
L1 - Introduction to python Backend.pptx
PDF
medical staffing services at VALiNTRY
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PPTX
Online Work Permit System for Fast Permit Processing
PPTX
ai tools demonstartion for schools and inter college
Navsoft: AI-Powered Business Solutions & Custom Software Development
AI in Product Development-omnex systems
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Operating system designcfffgfgggggggvggggggggg
CHAPTER 2 - PM Management and IT Context
How Creative Agencies Leverage Project Management Software.pdf
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Nekopoi APK 2025 free lastest update
Digital Strategies for Manufacturing Companies
Which alternative to Crystal Reports is best for small or large businesses.pdf
ISO 45001 Occupational Health and Safety Management System
L1 - Introduction to python Backend.pptx
medical staffing services at VALiNTRY
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Odoo Companies in India – Driving Business Transformation.pdf
Softaken Excel to vCard Converter Software.pdf
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Online Work Permit System for Fast Permit Processing
ai tools demonstartion for schools and inter college

Microservices architecture

  • 3. What is Microservices? An approach to developing a single application as a suite of small services, each running of its own process and communication with lightweight mechanism, often HTTP resource API. ~ Martin Fowler
  • 4. Start from Monolithic Monolithic is opposite of microservices. It is a common system that nowdays used. It is application built as single unit. Applications are often built in three main parts: client-side, database, server-side. Server side handle HTTP request, execute domain logic, retrieve & update DB, select the view or respond to client. This server side application is a monolith.
  • 5. The limit of monolithic Monolithic applications can be successful, but increasingly people are feeling frustrations with them, especially more applications are being deployed to the cloud. Change cycles are tied together Over time it's often hard to keep a good modular structure Scaling requires scaling of the entire application
  • 7. Characteristic of Microservices Architecture Componentization via services Organized around Business Capabilities Products not Projects Smart endpoints and dumb pipes Decentralized Governance Decentralized Data Management Infrastructure Automation Design for failure
  • 8. Componentization via services a component is a unit of software that is independently replaceable and upgradeable. One main reason for using services as components (rather than libraries) is that services are independently deployable.
  • 9. Organized around Business Capabilities Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure. -- Melvyn Conway, 1967 The microservice approach to division is different, splitting up into services organized around business capability.
  • 10. Products not Projects Microservice proponents tend to avoid this model, preferring instead the notion that a team should own a product over its full lifetime. The product mentality, ties in with the linkage to business capabilities. The smaller granularity of services can make it easier to create the personal relationships between service developers and their users. “You build, You run it” - Werner Vogels - CTO of Amazon
  • 11. Smart endpoints and dumb pipes Applications built from microservices aim to be as decoupled and as cohesive as possible. The two protocols used most commonly are HTTP request-response with resource API's and lightweight messaging. By using simple RESTish protocols rather than complex protocols By using messaging over a lightweight message bus. The infrastructure chosen is typically dumb. simple implementations such as RabbitMQ or ZeroMQ don't do much more than provide a reliable asynchronous fabric Be of the web, not behind the web -- Ian Robinson
  • 12. Decentralized Governance One of the consequences of centralised governance is the tendency to standardise on single technology platforms. Experience shows that this approach is constricting - not every problem is a nail and not every solution a hammer. In this case microservices could be like this: You want to use Node.js to standup a simple reports page? Go for it. C++ for a particularly gnarly near- real-time component? Fine. You want to swap in a different flavour of database that better suits the read behaviour of one component? We have the technology to rebuild him.
  • 13. Decentralized Data Management ( 1 ) At the most abstract level, it means that the conceptual model of the world will differ between systems. This issue is common between applications, but can also occur within applications, particular when that application is divided into separate components. A useful way of thinking about this is the Domain-Driven Design notion of Bounded Context. As well as decentralizing decisions about conceptual models, microservices also decentralize data storage decisions.
  • 15. Infrastructure Automation Teams building software this way make extensive use of infrastructure automation techniques. as much confidence as possible that our software is working, so we run lots of automated tests. Promotion of working software 'up' the pipeline means we automate deployment to each new environment.
  • 16. Design for failure Any service call could fail due to unavailability of the supplier, the client has to respond to this as gracefully as possible. Since services can fail at any time, it's important to be able to detect the failures quickly and, if possible, automatically restore service. That’s why, microservices have a lot of monitoring process, real-time monitoring, business relevant metrics, log and so on.
  • 17. Evolutionary Design Evolutionary Design is see service decomposition as a further tool to enable application developers to control changes in their application without slowing down change. Whenever you try to break a software system into components, you're faced with the decision of how to divide up the pieces. what are the principles? The key property of a component is the notion of independent replacement and upgradeability.
  • 19. The Pattern Monolithic Architecture Microservices Architecture API Gateway Client-side discovery Server-side discovery Service Registry Self Registration 3rd party Registration Multiple service instance per host Single service instance per host Service instance per VM Service instance per Container Database per service
  • 20. Monolithic Architecture (1) ● Simple to develop ● Simple to deploy ● Simple to scale However: The large monolithic code base intimidates developers, especially ones who are new to the team. The application can be difficult to understand and modify. As a result, development typically slows down. Overloaded IDE Overloaded web container
  • 21. Monolithic Architecture (2) However: Continuous deployment is difficult - a large monolithic application is also an obstacle to frequent deployments. Scaling the application can be difficult - a monolithic architecture is that it can only scale in one dimension. Obstacle to scaling development - A monolithic application is also an obstacle to scaling development. Requires a long-term commitment to a technology stack - a monolithic architecture forces you to be married to the technology stack (and in some cases, to a particular version of that technology) you chose at the start of development .
  • 22. Microservices Architecture (1) ● Each microservice is relatively small ○ Easier for a developer to understand ○ The IDE is faster making developers more productive ○ The web container starts faster, which makes developers more productive, and speeds up deployments ● Each service can be deployed independently of other services ● Easier to scale development. It enables you to organize the development effort around multiple teams. Each (two pizza) team is responsible a single service. ● Improved fault isolation. For example, if there is a memory leak in one service then only that service will be affected. ● Eliminates any long-term commitment to a technology stack
  • 23. Microservices Architecture (2) Another challenge is deciding how to partition the system into microservices. This is very much an art, but there are a number of strategies that can help. Partition services by verb or use case. Partition the system by nouns or resources.
  • 25. API Gateway Implement an API gateway that is the single entry point for all clients. The API gateway handles requests in one of two ways. The API Gateway must use either the Client-side Discovery pattern or Server- side Discovery Pattern to route requests to available service instances.
  • 26. Client-side Discovery (1) Services typically need to call one another. In a traditional distributed system deployment, services run at fixed, well known locations (hosts and ports) and so can easily call one another using HTTP/REST. a modern microservice-based application typically runs in a virtualized or containerized environments where the number of instances of a service and their locations changes dynamically.
  • 27. Client-side Discovery (2) The Benefit is fewer moving parts and network hops compared to Server-side registry. This pattern couples the client to service registry.
  • 28. Server-side Discovery When making a request to a service, the client makes a request via a router (a.k.a load balancer) that runs at a well known location. The router queries a service registry. More network hops are required than when using Client-side discovery AWS provide this functionality, e.g. AWS Elastic Load Balancer
  • 29. Service Registry (1) a database of services, their instances and their locations. Service instances are registered with the service registry on startup and deregistered on shutdown. Examples of service registries (or technologies that are commonly used as service registries) include: Eureka Apache Zookeeper Consul Etcd
  • 30. Service Registry (2) The Service Registry is a critical system component. Although clients should cache data provided by the service registry, if the service registry fails that data will eventually become out of date. Consequently, the service registry must be highly available. You need to decide how service instances are registered with the service registry. There are two options: ● Self registration pattern - service instances register themselves ● 3rd party registration pattern - a 3rd party register the service instances with the service registry Note: Service registry instances must be deployed on fixed and well known IP addresses
  • 31. Self Registration A service instance is responsible for registering itself with the service registry. On startup the service instance registers itself (host and IP address) with the service registry and makes itself available for discovery. Drawbacks: You must implement service registration logic in each programming language/framework that you use to write your services A service instance that is running yet unable to handle requests will often lack the self-awareness to unregister itself from the service registry
  • 32. 3rd Party Registration A 3rd party registrar is responsible for registering and unregistering a service instance with the service registry. Examples: Netflix Prana, AWS Autoscaling Groups, Joyent's Container buddy, Registrator, Clustering frameworks such as Kubernetes and Marathon (un)register service instances with the built-in/implicit registry. Drawback: Unless the registar is part of the infrastructure it’s another component that must be installed, configured and maintained. Also, since it’s a critical system component it needs to be highly available.
  • 33. Multiple Services per host Run multiple instance of services on a host (Physical or Virtual machine). There are various ways of deploying a service instance on a shared host including: Deploy each service instance as a JVM process. For example, a Tomcat or Jetty instances per service instance. Deploy multiple service instances in the same JVM. For example, as web applications or OSGI bundles. Drawbacks: Risk of conflicting resource requirements / dependency versions Difficult to limit the resources consumed by a service instance Difficult to monitor process
  • 34. Single Service per host Deploy each single service instance on it’s own host. The benefits of this approach include: Services instances are isolated from one another There is no possibility of conflicting resource requirements or dependency versions A service instance can only consume at most the resources of a single host Its straightforward to monitor, manage, and redeploy each service instance Drawbacks: Potentially less efficient resource utilization
  • 35. Database per service (1) Keep each microservice’s persistent data private to that service and accessible only via its API. The following of example:
  • 36. Database per service (2) if you are using a relational database then the options are: Private-tables-per-service – each service owns a set of tables that must only be accessed by that service Schema-per-service – each service has a database schema that’s private to that service Database-server-per-service – each service has it’s own database server.
  • 38. The Scale Cube X-axis scaling consists of running multiple copies of an application behind a load balancer. Y-axis axis scaling splits the application into multiple, different services. Z-axis splits are commonly used to scale databases. Data is partitioned (a.k.a. sharded) across a set of servers based on an attribute of each record.
  • 39. CAP Theorem(1) Consistency (C), Availability (A), and Partition tolerance (P) across distributed systems. Simply put, the CAP theorem demonstrates that any distributed system cannot guaranty C, A, and P simultaneously, rather, trade-offs must be made at a point-in-time to achieve the level of performance and availability required for a specific task.

Editor's Notes

  • #11: A common inspiration for this is Amazon's notion of "you build, you run it" where a development team takes full responsibility for the software in production.
  • #17: Netflix's Simian Army induces failures of services and even datacenters during the working day to test both the application's resilience and monitoring.
  • #18: The Guardian website is a good example of an application that was designed and built as a monolith, but has been evolving in a microservice direction. The monolith still is the core of the website, but they prefer to add new features by building microservices that use the monolith's API. This approach is particularly handy for features that are inherently temporary, such as specialized pages to handle a sporting event. Such a part of the website can quickly be put together using rapid development languages, and removed once the event is over. We've seen similar approaches at a financial institution where new services are added for a market opportunity and discarded after a few months or even weeks.