Microservices: Breaking Apart the Monolith

51
MICROSERVICES BREAKING APART THE MONOLITH www.iron.io

Transcript of Microservices: Breaking Apart the Monolith

MICROSERVICES

BREAKING APART THE MONOLITH

www.iron.io

About the Presenter

Ivan Dwyer | Business Development

● Joined Iron.io in early 2014 to collaborate with cloud ecosystem● Founder of a Web 1.0 Startup in 1999● Helped build the first mobile app program at PalmSource● Spent 10 years in international business with ACCESS

@fortyfivan

Agenda

⬢ The Rise of Microservices in the Modern Cloud

⬢ How to Decouple Processes Into Discrete Microservices

⬢ Best Way to Keep Microservices and Connected Devices in Touch

⬢ Best Practices Around Event-Driven Asynchronous Processing

⬢ The Role of the API Gateway

⬢ How to Deal With State

⬢ DevOps & The Continuous Deployment Cycle

⬢ Bringing it All Together With Monitoring & Analytics

Evolution

How We Got Here

Expensive to Scale

Difficult to Scale

Unnecessary Overhead

Complex Configurations

Granular Compute

Effective Separation

Monolith Multi-Tier / SOA Microservices

The Modern Cloud

{ } Cloud-Native ProtocolsRESTful APIs that communicate over HTTP with JSON serialization

Agile OperationsConsistent environments for development and deployment

Elastic WorkloadsGranular workload-aware computing for effective scalability

Microservices represents the convergence of the modern cloud and

modern application development.

Microservices

Common Characteristics

Single Responsibility

Independent

Loosely Coupled

Stateless

Asynchronous

Interchangeable

Organizational Impact

Technology

Smaller services centered around specific capabilities

Independently developed and deployed functional components

Lightweight cloud-native communication and processing

Multiple language and data sources fit for the service

Business

Focused and flexible workgroups

Shorter release cycles

Cost-effective scalable systems

No vendor or framework lock-in

Considerations

➔ Building and maintaining highly available distributed systems is complex

➔ More moving parts means more components to keep track of and configure properly

➔ Loosely coupled services means steps must be taken to keep data consistent

➔ Distributed asynchronous processes create network latency and more API traffic

➔ Testing and monitoring individual services is challenging

Microservices are meant to make development and deployment better,

but not necessarily easier.

Decoupling

Where to Start

From Scratch Refactor New Features

Identify Candidate Components

➔ Outside of user response loop

➔ 3rd party service API calls

➔ Long running processes

➔ Transaction Processing

➔ Scale-out / burst processing

➔ Scheduled jobs

Business Capability

Loosely coupled microservices centered around specific business capabilities lead

to more flexible and agile workflows across your entire organization.

Communication

More Moving Parts

Queue all the Things

➔ Acknowledge data delivery➔ Retry down endpoints➔ Act as delivery buffer➔ Keep data ordered properly

POST -> GET -> DELETE

Problems with Dumb Pipes

Down endpoints

Overloaded endpoints

Message Queueing for the Modern Cloud

Queue as a Service Cloud-Native Protocols

Reliable Data Persistence Advanced Feature Set

Detailed Monitoring Multiple Language Support

Leveraging a message queue ensures reliable data transmission across services

and connected devices.

Compute

Event-Driven Asynchronous Patterns

WebhooksRespond to events from external services to initiate a process

Scheduled JobsCron-like processes that occur on a regular schedule.

StreamsReal-time activities through long running agent/daemon processes

Fan OutRespond to events and push to multiple process/data endpoints

Compute Environment

Load Balancer

Traditional Hosting Model (Apps) Ephemeral Micro Computing (Tasks)

Distribute the Load

A master service can orchestrate slave services to run concurrently to handle

spikes in traffic or bursts

Single responsibility microservices can scale more effectively and cut down total processing time

Ex: Send 4000 emails

1-1000 1001-2000 2001-3000 3001-4000

Highly Scalable Asynchronous Task Processing

Containerized Environment Event-Driven

Flexible Scheduling Reliable and Secure

Detailed Monitoring Multiple Language Support

This new pattern of event-driven asynchronous processing with the

container as the unit of scale leads to more efficient and cost-effective systems.

API Gateway

Request Handling / Routing

APIGateway

Auth

User Request REST

Considerations

Keep it LightFocus on handling requests and

routing to appropriate microservices

Make it Highly AvailableMust be deployed in a fault-tolerant

distributed manner

Load BalancedMust be able to handle incoming traffic spikes elastically

The API Gateway provides the foundation for your entire architecture.

State

Connections, Payloads & Caching

Deliver payload

Secure DB connection

In-process temp storage

Polyglot Persistence

Key/ValueRapid access for reads/writes

SQLTransactional data

NoSQLHigh volume reads

FIleDistributed file system

While preserving stateless microservices, choose the right data store and

connection for the process.

Presentation

Client Frameworks

Considerations

➔ Route via the API gateway not directly from devices

➔ Fine-grained auth support may be needed in certain cases

➔ Balance inline processing vs out-of-process

➔ Pre-process for faster loading times

➔ Out-of-process for greater responsiveness

➔ Distribute processing but not necessarily core storage

Always remember that your users see your application as one unit regardless of

architectural pattern.

Operations

Configuration

Environments Dependencies Deployment

Support for easier migration paths

Consistent runtime from development to production

Empowers independent teams and workflows

Choose the right language for the specific microservice

Limited scope of dependent services and libraries

Scoped environment variables and runtimes

Build, test, and deploy on a simpler scale

Smaller services and teams means faster iterations

Leverage a PaaS for automated deployment configuration

Continuous Delivery

Code Test Deploy

Monitoring & Analytics

Responsibilities

Runtime Monitoring

Audit trails

Logging

Error Handling

Alerting

Performance Testing

Keeping it Together

STDOUT

Errors

Runtime

Performance

With microservices, monitoring and analytics must be done at both the

individual level and as part of the whole application.

Conclusion

Full Microservices Stack

API

Infrastructure

Compute Storage Networking

Message Queue Scheduler

Monitoring

How We Can Help

Pair ProgrammingGet a hands-on walkthrough

of our platform

Architecture ReviewLet us share some best practices and advice

Start a Free TrialStart building with Iron.io

in minutes

Iron.io

325 9th St

San Francisco, CA 94103

1-888-939-4623

www.iron.io

[email protected]

THANK YOU

QUESTIONS?