Microservice Introduction Software Engineering II Sharif - - PowerPoint PPT Presentation

microservice introduction
SMART_READER_LITE
LIVE PREVIEW

Microservice Introduction Software Engineering II Sharif - - PowerPoint PPT Presentation

Microservice Introduction Software Engineering II Sharif University of Technology MohammadAmin Fazli Topics What are Microservices? Benefits Relation with SOA? Some decomposition techniques Reading: Building


slide-1
SLIDE 1

Microservice Introduction

Software Engineering II Sharif University of Technology MohammadAmin Fazli

slide-2
SLIDE 2

Microservices-Intro

Topics

 What are Microservices?  Benefits  Relation with SOA?  Some decomposition techniques  Reading:

 Building Microservices-Sam Newman-Chapter 1

2

slide-3
SLIDE 3

Microservices-Intro

Emergence of Microservices

 The world in which microservices emerge:

 Domain-driven design: representing the real world in our code  Continuous delivery: effective methods for getting our software into

production

 On-demand virtualization: provisioning and resizing our machines at

will

 Infrastructure automation: handling the infrastructure at scale  Small autonomous teams: small teams owning the full lifecycle of

their services-DevOps

 Systems at scale: building antifragile systems at a scale that would

have been hard to comprehend years ago

3

slide-4
SLIDE 4

Microservices-Intro

What are microservices?

 Microservices are small, autonomous services that work

together:

 Small, and focused on doing one thing well  Autonomous

4

slide-5
SLIDE 5

Microservices-Intro

Small and Focused

 Growing codebase over time make it difficult to know where a

change needs to be made

 Within a monolithic system, we fight against these forces by

trying to ensure our code is more cohesive, often by creating abstractions or modules.

 Cohesion: drive to have related code grouped together  Robert C. Martin’s Single Responsibility Principle: Gather together

those things that change for the same reason, and separate those things that change for different reasons.

 Using cohesion:

 We focus our service boundaries on business boundaries.  Avoid the temptation for it to grow too large.

5

slide-6
SLIDE 6

Microservices-Intro

Small and Focused

 How small is small?

 Code size?

 Language expressiveness  More dependency and more lines of code  The domain may be complex  A rule of thumb: something that could be rewritten in two weeks

 Alignment with team structure?

 If the codebase is too big to be managed by a small team, looking to break it

down is very sensible  Tradeoff:

 The smaller the service, the more you maximize the benefits and

downsides of microservice architecture.

 As you get smaller, the benefits around interdependence increase.  As you get smaller, the complexity emerges from having more and more

moving parts.

6

slide-7
SLIDE 7

Microservices-Intro

Autonomous

 Each microservice might be deployed as an isolated service on

a platform as a service (PaaS), or it might be its own operating system process.

 Adds some overhead  The resulting simplicity makes our distributed system much easier to

reason about

 Newer technologies are able to mitigate many of the challenges

associated with this form of deployment

 We try to avoid packing multiple services onto the same

machine

 The definition of machine is hazy.

7

slide-8
SLIDE 8

Microservices-Intro

Autonomous

 All communication between the services themselves are via

network calls.

 The services need to be able to change independently of each

  • ther, and be deployed by themselves without requiring

consumers to change.

 What should they expose? What should they hide?  Too much sharing: our consuming services become coupled to our

internal representations and it reduces autonomy

8

slide-9
SLIDE 9

Microservices-Intro

Autonomous

 Our services should expose an API

 Collaborating services communicate with us via those APIs  Technology-agnostic APIs: a technology which is appropriate to

ensure that this itself doesn’t couple consumers?

 Without decoupling everything breaks down

 The golden rule of decoupling: “can you make a change to a service

and deploy it by itself without changing anything else? ”

9

slide-10
SLIDE 10

Microservices-Intro

Benefits of Microservices

 Key Benefits:

 Technology Heterogeneity  Resilience  Scaling  Ease of Deployment  Organizational Alignment  Composability  Optimizing for

Replacability

10 10

slide-11
SLIDE 11

Microservices-Intro

Technology Heterogeneity

11 11

 With a system composed of multiple, collaborating services,

we can decide to use different technologies inside each one.

 Right tool for each job: we have no one-size-fits-all technology

 Example: A social network

slide-12
SLIDE 12

Microservices-Intro

Resilience

12 12

 A key concept in resilience engineering is the bulkhead.

 If one component of a system fails, but that failure doesn’t cascade,

you can isolate the problem and the rest of the system can carry on working.

 Service boundaries become your obvious bulkheads

 In a monolithic service, if the service fails, everything stops working

 Some ideas to reduce the problem: running on multiple machines

 With microservices, we can build systems that handle the total

failure of services and degrade functionality accordingly.

 Be careful – new sources of failure:

 Network  Machines

slide-13
SLIDE 13

Microservices-Intro

Scaling

13 13

 With a large, monolithic service, we have to scale everything

together.

 One small part of our overall system is constrained in performance,

but we have to handle scaling everything as a piece.

 With smaller services, we can just scale those services that

need scaling, allowing us to run other parts of the system on smaller, less powerful hardware.

slide-14
SLIDE 14

Microservices-Intro

Scaling

14 14

 Example: Gilt, an online fashion retailer, adopted

microservices for this exact reason. Starting in 2007 with a monolithic Rails application, by 2009 Gilt’s system was unable to cope with the load being placed on it. By splitting out core parts of its system, Gilt was better able to deal with its traffic spikes, and today has over 450 microservices, each one running on multiple separate machines.

 When embracing on-demand provisioning systems like those

provided by Amazon Web Services, we can even apply this scaling on demand for those pieces that need it

slide-15
SLIDE 15

Microservices-Intro

Ease of Deployment

 A one-line change to a million-line-long monolithic application

requires the whole application to be deployed in order to release the change.

 Large impact  High risk

 These results to an understandable fear: our changes build up and

build up between releases, until the new version of our application hitting production has masses of changes

 Bigger the delta between releases, the higher the risk that we’ll get

something wrong

 With microservices, we can make a change to a single service and

deploy it independently of the rest of the system

 Faster deploy  Easier rollback  Faster time to market 15 15

slide-16
SLIDE 16

Microservices-Intro

Organizational Alignment

 Large teams and large codebases deal have many problems

 Smaller teams working on smaller codebases tend to be more

productive.

 Microservices allow us to better align our architecture to our

  • rganization, helping us minimize the number of people

working on any one codebase to hit the sweet spot of team size and productivity.

 Conway’s Law: any organization that designs a system (defined

broadly) will produce a design whose structure is a copy of the

  • rganization's communication structure.

16 16

slide-17
SLIDE 17

Microservices-Intro

Organizational Alignment

17 17

slide-18
SLIDE 18

Microservices-Intro

Organizational Alignment

18 18

slide-19
SLIDE 19

Microservices-Intro

Composability

 One of the key promises of distributed systems and service-

  • riented architectures is that we open up opportunities for

reuse of functionality.

 With microservices, we allow for our functionality to be consumed

in different ways for different purposes.

 As organizations move away from thinking in terms of narrow

channels to more holistic concepts of customer engagement, we need architectures that can keep up.

 With microservices, think of us opening up seams in our

system that are addressable by outside parties. As circumstances change, we can build things in different ways.

 With a monolithic application, we often have one coarse-grained

seam that can be used from the outside. If I want to break that up to get something more useful, we’ll need a hammer!

19 19

slide-20
SLIDE 20

Microservices-Intro

Optimizing for Replacability

 Every medium or large organization has a nasty legacy system

sitting in the corner which one wants to touch.

 Viable for the organization, not easy to change

 With our individual services being small in size, the cost to

replace them with a better implementation, or even delete them altogether, is much easier to manage.

 With microservices often being of smaller size, the barriers to

rewriting or removing services entirely are very low.

 Teams using microservice approaches are comfortable with

completely rewriting services when required, and just killing a service when it is no longer needed.

20 20

slide-21
SLIDE 21

Microservices-Intro

Service-Oriented Architecture

 Service-oriented architecture (SOA) is a design approach

where multiple services collaborate to provide some end set

  • f capabilities.

A service here typically means a completely separate operating system process.

 Communication between these services occurs via calls across a

network rather than method calls within a process boundary.

 SOA emerged as an approach to combat the challenges of the

large monolithic applications.

 Reusability  Maintainability

21 21

slide-22
SLIDE 22

Microservices-Intro

Service-Oriented Architecture

 Much of the conventional wisdom around SOA doesn’t help

you understand how to split something big into something

  • small. It doesn’t talk about how big is too big. It doesn’t talk

enough about real-world, practical ways to ensure that services do notbecome overly coupled.

 The microservice approach has emerged from real-world use,

taking our better understanding of systems and architecture to do SOA well.

 (Microservice →SOA) ~ (XP, Scrum → Agile)

22 22

SOA Microservice

slide-23
SLIDE 23

Microservices-Intro

Other Decomposition Techniques

 Could similar decompositional techniques achieve the same

benefits?

 Shared Libraries  Modules

23 23

slide-24
SLIDE 24

Microservices-Intro

Shared Libraries

 A very standard decompositional technique that is built into

virtually any language is breaking down a codebase into multiple libraries.

 These libraries may be provided by third parties, or created in your own

  • rganization.

 Libraries give you a way to share functionality between teams and services.

 Teams can organize themselves around these libraries, and the

libraries themselves can be reused. But some drawbacks:

 We lose true technology heterogeneity. The library typically has to be in the

same language, or at the very least run on the same platform.

 The ease with which you can scale parts of your system independently from

each other is curtailed.

 Unless you’re using dynamically linked libraries, you cannot deploy a new

library without redeploying the entire process, so your ability to deploy changes in isolation is reduced.

 Lack the obvious seams around which to erect architectural safety 24 24

slide-25
SLIDE 25

Microservices-Intro

Shared Libraries

 Shared libraries do have their place.

 You’ll find yourself creating code for common tasks that aren’t

specific to your business domain that you want to reuse across the

  • rganization, which is an obvious candidate for becoming a reusable

library.

 Shared code used to communicate between services can become a

point of coupling.

 Services can and should make heavy use of third-party libraries

to reuse common code.

25 25

slide-26
SLIDE 26

Microservices-Intro

Modules

 Some languages provide their own modular decomposition

techniques that go beyond simple libraries.

 Allow lifecycle management,

 Deploying into running process  Allowing to make changes without taking the whole process down

 Example: Open Source Gateway Initiative (OSGI)

 Java has no a true concept of modules, Java 9 has  Is a set of specifications that define a dynamic component system for Java.

These specifications enable a development model where applications are (dynamically) composed of many different (reusable) components.

 The problem with OSGI is that it is trying to enforce things like

module lifecycle management without enough support in the language itself.

 This results in more work having to be done by module authors to deliver

  • n proper module isolation.

26 26

slide-27
SLIDE 27

Microservices-Intro

Modules

 Example: Erlang

 modules are baked into the language runtime  Erlang modules can be stopped, restarted, and upgraded without

issue.

 Erlang even supports running more than one version of the module

at a given time, allowing for more graceful module upgrading.

 Still has some shortcomings:

 We are strictly limited in our ability to use new technologies  Limited in how we can scale independently  Can drift toward integration techniques that are overly coupling  Lack seams for architectural safety measures

27 27