SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
NATS in action
A Real time Microservices Architecture handled by NATS
1
Who am I?
Raül Pérez
Senior Engineer at Carrenza Ltd.
Twitter: @repejota
Github: https://github.com/repejota
Email: repejota@gmail.com
2
Who am I?
Raül Pérez
Senior Engineer at Carrenza Ltd.
Twitter: @repejota
Github: https://github.com/repejota
Email: repejota@gmail.com
3
● Almost 4 years working on devop & distributed projects.
Who am I?
Raül Pérez
Senior Engineer at Carrenza Ltd.
Twitter: @repejota
Github: https://github.com/repejota
Email: repejota@gmail.com
4
● Almost 4 years working on devop & distributed projects.
● Still more a dev than op dude.
Who am I?
Raül Pérez
Senior Engineer at Carrenza Ltd.
Twitter: @repejota
Github: https://github.com/repejota
Email: repejota@gmail.com
5
● Almost 4 years working on devop & distributed projects.
● Still more a dev than op dude.
● Proud to be a Gopher after a looong PHP/Ruby/Python/Node.js past
experience. :P
Who am I?
Raül Pérez
Senior Engineer at Carrenza Ltd.
Twitter: @repejota
Github: https://github.com/repejota
Email: repejota@gmail.com
6
● Almost 4 years working on devop & distributed projects.
● Still more a dev than op dude.
● Proud to be a Gopher after a looong PHP/Ruby/Python/Node.js past
experience. :P
● Based in Barcelona.
Who am I?
Raül Pérez
Senior Engineer at Carrenza Ltd.
Twitter: @repejota
Github: https://github.com/repejota
Email: repejota@gmail.com
7
● Almost 4 years working on devop & distributed projects.
● Still more a dev than op dude.
● Proud to be a Gopher after a looong PHP/Ruby/Python/Node.js past
experience. :P
● Based in Barcelona.
● Love startups & love remote work!
Microservices
8
Microservices
● Small autonomous services that work together.
9
● Divide and conquer approach.
Microservices
● Small autonomous services that work together.
● Communicate with lightweight mechanisms.
10
● Divide and conquer approach.
● HTTP/REST microservices. ( Request / Response )
Microservices
● Small autonomous services that work together.
● Communicate with lightweight mechanisms.
11
● Divide and conquer approach.
● HTTP/REST microservices. ( Request / Response )
● Message Systems for asynchronous communication. ( Publish/Subscribe )
Microservices
● Small autonomous services that work together.
● Communicate with lightweight mechanisms.
● The platform is composed of one or more stateless processes.
12
● Divide and conquer approach.
● HTTP/REST microservices. ( Request / Response )
● Message Systems for asynchronous communication. ( Publish/Subscribe )
● There is no shared data between different processes.
Microservices
● Small autonomous services that work together.
● Communicate with lightweight mechanisms.
● The platform is composed of one or more stateless processes.
● Designed to be distributed.
13
● Divide and conquer approach.
● HTTP/REST microservices. ( Request / Response )
● Message Systems for asynchronous communication. ( Publish/Subscribe )
● There is no shared data between different processes.
● Scaling is easy, each microservice can be executed in a different server.
Microservices … Why?
● It is quick to (re) write and to deploy.
14
● Simple application can be handled by less developers.
Microservices … Why?
● It is quick to (re) write and to deploy.
15
● Simple application can be handled by less developers.
● Developers do not need to know the entire platform to be productive.
Microservices … Why?
● It is quick to (re) write and to deploy.
● It knows that failures exist and how to handle them.
16
● Simple application can be handled by less developers.
● Developer do not need to know the entire platform to be productive.
● Defensive programming, services should not break.
Microservices … Why?
● It is quick to (re) write and to deploy.
● It knows that failures exist and how to handle them.
● KISS: Keep It Simple and Stupid.
17
● Simple application can be handled by less developers.
● Developer do not need to know the entire platform to be productive.
● Defensive programming, services should not break.
● It must provide one functionality.
Microservices … Why?
● It is quick to (re) write and to deploy.
● It knows that failures exist and how to handle them.
● KISS: Keep It Simple and Stupid.
● It must provide an API that other services can use.
18
● Simple application can be handled by less developers.
● Developer do not need to know the entire platform to be productive.
● Defensive programming, services should not break.
● It must provide one functionality.
● Rely on best practices.
NATS
19
What is NATS?
● Cloud-native message platform.
20
● Designed to natively support modern cloud architectures.
What is NATS?
● Cloud-native message platform.
● Highly performant.
21
● Designed to natively support modern cloud architectures.
● It is fast! Can handle millions of messages per second.
What is NATS?
● Cloud-native message platform.
● Highly performant.
● Extremely lightweight.
22
● Designed to natively support modern cloud architectures.
● It is fast! Can handle millions of messages per second.
● A single binary, easy to deploy without unnecessary complexity.
What is NATS?
● Cloud-native message platform.
● Highly performant.
● Extremely lightweight.
● Support for various messaging models and use cases.
23
● Designed to natively support modern cloud architectures.
● It is fast! Can handle millions of messages per second.
● A single binary, easy to deploy without unnecessary complexity.
● Request/Response, Publish/Subscribe, Queues.
What is NATS?
● Cloud-native message platform.
● Highly performant.
● Extremely lightweight.
● Support for various messaging models and use cases.
24
● Designed to natively support modern cloud architectures.
● It is fast! Can handle millions of messages per second.
● A single binary, easy to deploy without unnecessary complexity.
● Request/Response, Publish/Subscribe, Queues.
● Simple text based protocol.
Ernest
IAAS+PAAS Hybrid Cloud
Platform
25
Ernest : IAAS+PAAS Hybrid Cloud Platform
● Manage your infrastructure. (IAAS)
26
● Manage servers, networks, balancers etc ... of your platform.
Ernest : IAAS+PAAS Hybrid Cloud Platform
● Manage your infrastructure. (IAAS)
● Manage your platform. (PAAS)
27
● Manage servers, networks, balancers etc ... of your platform.
● Deploy and upgrade your application to the desired servers.
Ernest : IAAS+PAAS Hybrid Cloud Platform
● Manage your infrastructure. (IAAS)
● Manage your platform. (PAAS)
● Scaling.
28
● Manage servers, networks, balancers etc ... of your platform.
● Deploy and upgrade your application to the desired servers.
● Automate everything.
Ernest : IAAS+PAAS Hybrid Cloud Platform
● Manage your infrastructure. (IAAS)
● Manage your platform. (PAAS)
● Scaling.
29
● Manage servers, networks, balancers etc ... of your platform.
● Deploy and upgrade your application to the desired servers.
● Automate everything.
● Evolve your platform when you need and redeploy your platform.
Ernest : IAAS+PAAS Hybrid Cloud Platform
● Manage your infrastructure. (IAAS)
● Manage your platform. (PAAS)
● Scaling.
● Hybrid (Multiple Providers)
30
● Manage servers, networks, balancers etc ... of your platform.
● Deploy and upgrade your application to the desired servers.
● Evolve your infrastructure when you need and redeploy your platform.
● Automate everything.
● Do not rely on a single provider, use different ones with a single interface.
Architecture of Ernest
31
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
Architecture of Ernest
32
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
REST API
Architecture of Ernest
33
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
REST API
Events + State
Architecture of Ernest
34
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
REST API
Events + State
Business Logic
Real Time(almost)
Architecture of Ernest
35
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
REST API
Events + State
Business Logic
Real Time(almost)
VMWare
Architecture of Ernest
36
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
REST API
Events + State
Business Logic
Real Time(almost)
VMWare
AWS
Architecture of Ernest
37
Provider
Provider
Provider
MicroservicesNATS
FSM
LogsDB
Public
API
&
UI
Monitor
Provider
REST API
Events + State
Business Logic
Real Time(almost)
VMWare
AWS
Others...
Ernest + NATS
38
Ernest + NATS
● NATS is the central communication system for Ernest.
39
● Ernest core is a series of microservices talking each other through NATS.
Ernest + NATS
● NATS is the central communication system for Ernest.
● Ernest executes workflows defined by the user to build environments.
40
● Ernest core is a series of microservices talking each other through NATS.
● Users posts a workflow written in a YAML file to be processed.
Workflow example
41
---
name: my-awesome-example
networks:
- name: network-web
subnet: 10.2.0.0/24
instances:
- name: instance-web
image: images/centos65-tty-sudo-disabled-nodejs-mongodb
count: 1
cpus: 1
memory: 4GB
disks:
- 40GB
network:
name: network-web
start_ip: "10.2.0.100"
provisioner:
- git clone https://host/user/myapp && make install && make run
● Simple example.
Workflow example
42
---
name: my-awesome-example
networks:
- name: network-web
subnet: 10.2.0.0/24
instances:
- name: instance-web
image: images/centos65-tty-sudo-disabled-nodejs-mongodb
count: 1
cpus: 1
memory: 4GB
disks:
- 40GB
network:
name: network-web
start_ip: "10.2.0.100"
provisioner:
- git clone https://host/user/myapp && make install && make run
● Simple example.
● Each environment has an unique name.
Workflow example
43
---
name: my-awesome-example
networks:
- name: network-web
subnet: 10.2.0.0/24
instances:
- name: instance-web
image: images/centos65-tty-sudo-disabled-nodejs-mongodb
count: 1
cpus: 1
memory: 4GB
disks:
- 40GB
network:
name: network-web
start_ip: "10.2.0.100"
provisioner:
- git clone https://host/user/myapp && make install && make run
● Simple example.
● Each environment has an unique name.
● Action: Create a network on our provider.
Workflow example
44
---
name: my-awesome-example
networks:
- name: network-web
subnet: 10.2.0.0/24
instances:
- name: instance-web
image: images/centos65-tty-sudo-disabled-nodejs-mongodb
count: 1
cpus: 1
memory: 4GB
disks:
- 40GB
network:
name: network-web
start_ip: "10.2.0.100"
provisioner:
- git clone https://host/user/myapp && make install && make run
● Simple example.
● Each environment has an unique name.
● Action: Create a network on our provider.
● Action: Create an instance type for our app.
Workflow example
45
---
name: my-awesome-example
networks:
- name: network-web
subnet: 10.2.0.0/24
instances:
- name: instance-web
image: images/centos65-tty-sudo-disabled-nodejs-mongodb
count: 1
cpus: 1
memory: 4GB
disks:
- 40GB
network:
name: network-web
start_ip: "10.2.0.100"
provisioner:
- git clone https://host/user/myapp && make install && make run
● Simple example.
● Each environment has an unique name.
● Action: Create a network on our provider.
● Action: Create an instance type for our app.
● Count determines the number of servers.
Workflow example
46
---
name: my-awesome-example
networks:
- name: network-web
subnet: 10.2.0.0/24
instances:
- name: instance-web
image: images/centos65-tty-sudo-disabled-nodejs-mongodb
count: 1
cpus: 1
memory: 4GB
disks:
- 40GB
network:
name: network-web
start_ip: "10.2.0.100"
provisioner:
- git clone https://host/user/myapp && make install && make run
● Simple example.
● Each environment has an unique name.
● Action: Create a network on our provider.
● Action: Create an instance type for our app.
● Count determines the number of servers.
● Action: Deploy your application and run it.
Ernest + NATS
● NATS is the central communication system for Ernest.
● A workflow composed by multiple actions is executed by the user.
● A finite state machine handles the state for the platform.
47
● Ernest core is a series of microservices talking each other through NATS.
● Users posts a workflow written in a YAML file to be processed.
● A list of actions are executed, one per microservice.
Ernest + NATS
● NATS is the central communication system for Ernest.
● A workflow composed by multiple actions is executed by the user.
● A finite state machine handles the state for the platform.
● Publish Subscribe is the main pattern used.
48
● Ernest core is a series of microservices talking each other through NATS.
● Users posts a workflow written in a YAML file to be processed.
● A list of actions are executed, one per microservice.
● Actions are published to NATS ( by a topic ) and microservices are
subscribed to execute them.
Ernest : Numbers
● Less than 5 developers.
49
● A developer “owns” a component / microservice.
Ernest : Numbers
● Less than 5 developers.
● Started as a prototype in Ruby, moving almost everything to Go.
50
● A developer “owns” a component / microservice.
● Fast to develop, less errors, less dependencies.
Ernest : Numbers
● Less than 5 developers.
● Started as a prototype in Ruby, moving almost everything to Go.
● Almost 50 microservices.
51
● A developer “owns” a component / microservice.
● Fast to develop, less errors, less dependencies.
● Unix philosophy, do one thing and do it well done.
Ernest : Numbers
● Less than 5 developers.
● Started as a prototype in Ruby, moving almost everything to Go.
● Almost 50 microservices.
● Everything specified. Everything tested.
52
● A developer “owns” a component / microservice.
● Fast to develop, less errors, less dependencies.
● Unix philosophy, do one thing and do it well done.
● Using TDD on each part of the platform.
Ernest : Numbers
● Less than 5 developers.
● Started as a prototype in Ruby, moving almost everything to Go.
● Almost 50 microservices.
● Everything specified. Everything tested.
53
● A developer “owns” a component / microservice.
● Fast to develop, less errors, less dependencies.
● Unix philosophy, do one thing and do it well done.
● Using TDD on each part of the platform.
● Documentation on APIs, documentation on payloads.
Resources
● http://microservices.io
● https://en.wikipedia.org/wiki/Cloud_computing
● http://nats.io
54
● http://carrenza.com
● http://apcera.com
Questions?
55
Thank you!
56

Mais conteúdo relacionado

Mais procurados

Dual write strategies for microservices
Dual write strategies for microservicesDual write strategies for microservices
Dual write strategies for microservicesBilgin Ibryam
 
NGINX KubeCon Copenhagen 2018
NGINX KubeCon Copenhagen 2018 NGINX KubeCon Copenhagen 2018
NGINX KubeCon Copenhagen 2018 NGINX, Inc.
 
Moving Data Efficiently with Real-Time Streaming
Moving Data Efficiently with Real-Time StreamingMoving Data Efficiently with Real-Time Streaming
Moving Data Efficiently with Real-Time StreamingWSO2
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice ArchitectureRich Lee
 
Saga transactions msa_ architecture
Saga transactions msa_ architectureSaga transactions msa_ architecture
Saga transactions msa_ architectureMauro Vocale
 
MRA AMA Part 6: Service Mesh Models
MRA AMA Part 6: Service Mesh ModelsMRA AMA Part 6: Service Mesh Models
MRA AMA Part 6: Service Mesh ModelsNGINX, Inc.
 
Microservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsMicroservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsŁukasz Sowa
 
NGINX, Istio, and the Move to Microservices and Service Mesh
NGINX, Istio, and the Move to Microservices and Service MeshNGINX, Istio, and the Move to Microservices and Service Mesh
NGINX, Istio, and the Move to Microservices and Service MeshNGINX, Inc.
 
[WSO2Con EU 2018] Enabling Agile Integration Teams
[WSO2Con EU 2018] Enabling Agile Integration Teams[WSO2Con EU 2018] Enabling Agile Integration Teams
[WSO2Con EU 2018] Enabling Agile Integration TeamsWSO2
 
MQTT 5: Why you need it and potential pitfalls
MQTT 5: Why you need it and potential pitfallsMQTT 5: Why you need it and potential pitfalls
MQTT 5: Why you need it and potential pitfallsDominik Obermaier
 
Evaluating Streaming Data Solutions
Evaluating Streaming Data SolutionsEvaluating Streaming Data Solutions
Evaluating Streaming Data SolutionsStreamlio
 
Power of Microservices Architecture in Drupal Development
Power of Microservices Architecture in Drupal DevelopmentPower of Microservices Architecture in Drupal Development
Power of Microservices Architecture in Drupal DevelopmentOpenSense Labs
 
[WSO2Con EU 2018] Up-Leveling Brownfield Integration
[WSO2Con EU 2018] Up-Leveling Brownfield Integration[WSO2Con EU 2018] Up-Leveling Brownfield Integration
[WSO2Con EU 2018] Up-Leveling Brownfield IntegrationWSO2
 
Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...
Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...
Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...Severalnines
 
How to Migrate to Cloud with Complete Confidence and Trust
How to Migrate to Cloud with Complete Confidence and TrustHow to Migrate to Cloud with Complete Confidence and Trust
How to Migrate to Cloud with Complete Confidence and TrustApcera
 
Icsa2018 blockchain tutorial
Icsa2018 blockchain tutorialIcsa2018 blockchain tutorial
Icsa2018 blockchain tutorialLen Bass
 
infrastructure management at digital ages
infrastructure management at digital agesinfrastructure management at digital ages
infrastructure management at digital agesBernard Paques
 
Implementing Domain Events with Kafka
Implementing Domain Events with KafkaImplementing Domain Events with Kafka
Implementing Domain Events with KafkaAndrei Rugina
 
Inntroduction to MQTT Sparkplug with HiveMQ and Opto22
Inntroduction to MQTT Sparkplug with HiveMQ and Opto22Inntroduction to MQTT Sparkplug with HiveMQ and Opto22
Inntroduction to MQTT Sparkplug with HiveMQ and Opto22Dominik Obermaier
 

Mais procurados (19)

Dual write strategies for microservices
Dual write strategies for microservicesDual write strategies for microservices
Dual write strategies for microservices
 
NGINX KubeCon Copenhagen 2018
NGINX KubeCon Copenhagen 2018 NGINX KubeCon Copenhagen 2018
NGINX KubeCon Copenhagen 2018
 
Moving Data Efficiently with Real-Time Streaming
Moving Data Efficiently with Real-Time StreamingMoving Data Efficiently with Real-Time Streaming
Moving Data Efficiently with Real-Time Streaming
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Saga transactions msa_ architecture
Saga transactions msa_ architectureSaga transactions msa_ architecture
Saga transactions msa_ architecture
 
MRA AMA Part 6: Service Mesh Models
MRA AMA Part 6: Service Mesh ModelsMRA AMA Part 6: Service Mesh Models
MRA AMA Part 6: Service Mesh Models
 
Microservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problemsMicroservices - opportunities, dilemmas and problems
Microservices - opportunities, dilemmas and problems
 
NGINX, Istio, and the Move to Microservices and Service Mesh
NGINX, Istio, and the Move to Microservices and Service MeshNGINX, Istio, and the Move to Microservices and Service Mesh
NGINX, Istio, and the Move to Microservices and Service Mesh
 
[WSO2Con EU 2018] Enabling Agile Integration Teams
[WSO2Con EU 2018] Enabling Agile Integration Teams[WSO2Con EU 2018] Enabling Agile Integration Teams
[WSO2Con EU 2018] Enabling Agile Integration Teams
 
MQTT 5: Why you need it and potential pitfalls
MQTT 5: Why you need it and potential pitfallsMQTT 5: Why you need it and potential pitfalls
MQTT 5: Why you need it and potential pitfalls
 
Evaluating Streaming Data Solutions
Evaluating Streaming Data SolutionsEvaluating Streaming Data Solutions
Evaluating Streaming Data Solutions
 
Power of Microservices Architecture in Drupal Development
Power of Microservices Architecture in Drupal DevelopmentPower of Microservices Architecture in Drupal Development
Power of Microservices Architecture in Drupal Development
 
[WSO2Con EU 2018] Up-Leveling Brownfield Integration
[WSO2Con EU 2018] Up-Leveling Brownfield Integration[WSO2Con EU 2018] Up-Leveling Brownfield Integration
[WSO2Con EU 2018] Up-Leveling Brownfield Integration
 
Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...
Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...
Webinar slides: How to Achieve PCI Compliance for MySQL & MariaDB with Cluste...
 
How to Migrate to Cloud with Complete Confidence and Trust
How to Migrate to Cloud with Complete Confidence and TrustHow to Migrate to Cloud with Complete Confidence and Trust
How to Migrate to Cloud with Complete Confidence and Trust
 
Icsa2018 blockchain tutorial
Icsa2018 blockchain tutorialIcsa2018 blockchain tutorial
Icsa2018 blockchain tutorial
 
infrastructure management at digital ages
infrastructure management at digital agesinfrastructure management at digital ages
infrastructure management at digital ages
 
Implementing Domain Events with Kafka
Implementing Domain Events with KafkaImplementing Domain Events with Kafka
Implementing Domain Events with Kafka
 
Inntroduction to MQTT Sparkplug with HiveMQ and Opto22
Inntroduction to MQTT Sparkplug with HiveMQ and Opto22Inntroduction to MQTT Sparkplug with HiveMQ and Opto22
Inntroduction to MQTT Sparkplug with HiveMQ and Opto22
 

Semelhante a NATS in action - A Real time Microservices Architecture handled by NATS

MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference ArchitectureMRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference ArchitectureNGINX, Inc.
 
Microservice Pattern Launguage
Microservice Pattern LaunguageMicroservice Pattern Launguage
Microservice Pattern LaunguageInho Kang
 
Containerizing couchbase with microservice architecture on mesosphere.pptx
Containerizing couchbase with microservice architecture on mesosphere.pptxContainerizing couchbase with microservice architecture on mesosphere.pptx
Containerizing couchbase with microservice architecture on mesosphere.pptxRavi Yadav
 
Integration Microservices
Integration MicroservicesIntegration Microservices
Integration MicroservicesKasun Indrasiri
 
Comparison of Current Service Mesh Architectures
Comparison of Current Service Mesh ArchitecturesComparison of Current Service Mesh Architectures
Comparison of Current Service Mesh ArchitecturesMirantis
 
Openshift serverless Solution
Openshift serverless SolutionOpenshift serverless Solution
Openshift serverless SolutionRyan ZhangCheng
 
Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...
Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...
Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...Ambassador Labs
 
Netflix Architecture and Open Source
Netflix Architecture and Open SourceNetflix Architecture and Open Source
Netflix Architecture and Open SourceAll Things Open
 
Yotpo microservices
Yotpo microservicesYotpo microservices
Yotpo microservicesRon Barabash
 
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storageWebinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storageMayaData Inc
 
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEANGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEANGINX, Inc.
 
Microservices Architecture, Monolith Migration Patterns
Microservices Architecture, Monolith Migration PatternsMicroservices Architecture, Monolith Migration Patterns
Microservices Architecture, Monolith Migration PatternsAraf Karsh Hamid
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Peter Lawrey
 
Microservices at ibotta pitfalls and learnings
Microservices at ibotta pitfalls and learningsMicroservices at ibotta pitfalls and learnings
Microservices at ibotta pitfalls and learningsMatthew Reynolds
 
Horizontal Scaling for Millions of Customers!
Horizontal Scaling for Millions of Customers! Horizontal Scaling for Millions of Customers!
Horizontal Scaling for Millions of Customers! elangovans
 
Overview and Opentracing in theory by Gianluca Arbezzano
Overview and Opentracing in theory by Gianluca ArbezzanoOverview and Opentracing in theory by Gianluca Arbezzano
Overview and Opentracing in theory by Gianluca ArbezzanoGianluca Arbezzano
 

Semelhante a NATS in action - A Real time Microservices Architecture handled by NATS (20)

MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference ArchitectureMRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
 
Microservice Pattern Launguage
Microservice Pattern LaunguageMicroservice Pattern Launguage
Microservice Pattern Launguage
 
Containerizing couchbase with microservice architecture on mesosphere.pptx
Containerizing couchbase with microservice architecture on mesosphere.pptxContainerizing couchbase with microservice architecture on mesosphere.pptx
Containerizing couchbase with microservice architecture on mesosphere.pptx
 
Integration Microservices
Integration MicroservicesIntegration Microservices
Integration Microservices
 
Comparison of Current Service Mesh Architectures
Comparison of Current Service Mesh ArchitecturesComparison of Current Service Mesh Architectures
Comparison of Current Service Mesh Architectures
 
Openshift serverless Solution
Openshift serverless SolutionOpenshift serverless Solution
Openshift serverless Solution
 
Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...
Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...
Montreal Kubernetes Meetup: Developer-first workflows (for microservices) on ...
 
Microservices
MicroservicesMicroservices
Microservices
 
Netflix Architecture and Open Source
Netflix Architecture and Open SourceNetflix Architecture and Open Source
Netflix Architecture and Open Source
 
Yotpo microservices
Yotpo microservicesYotpo microservices
Yotpo microservices
 
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storageWebinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
 
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEANGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
 
Microservices Architecture, Monolith Migration Patterns
Microservices Architecture, Monolith Migration PatternsMicroservices Architecture, Monolith Migration Patterns
Microservices Architecture, Monolith Migration Patterns
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016
 
Microservices at ibotta pitfalls and learnings
Microservices at ibotta pitfalls and learningsMicroservices at ibotta pitfalls and learnings
Microservices at ibotta pitfalls and learnings
 
Horizontal Scaling for Millions of Customers!
Horizontal Scaling for Millions of Customers! Horizontal Scaling for Millions of Customers!
Horizontal Scaling for Millions of Customers!
 
NkSIP: The Erlang SIP application server
NkSIP: The Erlang SIP application serverNkSIP: The Erlang SIP application server
NkSIP: The Erlang SIP application server
 
Overview and Opentracing in theory by Gianluca Arbezzano
Overview and Opentracing in theory by Gianluca ArbezzanoOverview and Opentracing in theory by Gianluca Arbezzano
Overview and Opentracing in theory by Gianluca Arbezzano
 
The Decoupled CMS in Financial Services
The Decoupled CMS in Financial ServicesThe Decoupled CMS in Financial Services
The Decoupled CMS in Financial Services
 

NATS in action - A Real time Microservices Architecture handled by NATS

  • 1. NATS in action A Real time Microservices Architecture handled by NATS 1
  • 2. Who am I? Raül Pérez Senior Engineer at Carrenza Ltd. Twitter: @repejota Github: https://github.com/repejota Email: repejota@gmail.com 2
  • 3. Who am I? Raül Pérez Senior Engineer at Carrenza Ltd. Twitter: @repejota Github: https://github.com/repejota Email: repejota@gmail.com 3 ● Almost 4 years working on devop & distributed projects.
  • 4. Who am I? Raül Pérez Senior Engineer at Carrenza Ltd. Twitter: @repejota Github: https://github.com/repejota Email: repejota@gmail.com 4 ● Almost 4 years working on devop & distributed projects. ● Still more a dev than op dude.
  • 5. Who am I? Raül Pérez Senior Engineer at Carrenza Ltd. Twitter: @repejota Github: https://github.com/repejota Email: repejota@gmail.com 5 ● Almost 4 years working on devop & distributed projects. ● Still more a dev than op dude. ● Proud to be a Gopher after a looong PHP/Ruby/Python/Node.js past experience. :P
  • 6. Who am I? Raül Pérez Senior Engineer at Carrenza Ltd. Twitter: @repejota Github: https://github.com/repejota Email: repejota@gmail.com 6 ● Almost 4 years working on devop & distributed projects. ● Still more a dev than op dude. ● Proud to be a Gopher after a looong PHP/Ruby/Python/Node.js past experience. :P ● Based in Barcelona.
  • 7. Who am I? Raül Pérez Senior Engineer at Carrenza Ltd. Twitter: @repejota Github: https://github.com/repejota Email: repejota@gmail.com 7 ● Almost 4 years working on devop & distributed projects. ● Still more a dev than op dude. ● Proud to be a Gopher after a looong PHP/Ruby/Python/Node.js past experience. :P ● Based in Barcelona. ● Love startups & love remote work!
  • 9. Microservices ● Small autonomous services that work together. 9 ● Divide and conquer approach.
  • 10. Microservices ● Small autonomous services that work together. ● Communicate with lightweight mechanisms. 10 ● Divide and conquer approach. ● HTTP/REST microservices. ( Request / Response )
  • 11. Microservices ● Small autonomous services that work together. ● Communicate with lightweight mechanisms. 11 ● Divide and conquer approach. ● HTTP/REST microservices. ( Request / Response ) ● Message Systems for asynchronous communication. ( Publish/Subscribe )
  • 12. Microservices ● Small autonomous services that work together. ● Communicate with lightweight mechanisms. ● The platform is composed of one or more stateless processes. 12 ● Divide and conquer approach. ● HTTP/REST microservices. ( Request / Response ) ● Message Systems for asynchronous communication. ( Publish/Subscribe ) ● There is no shared data between different processes.
  • 13. Microservices ● Small autonomous services that work together. ● Communicate with lightweight mechanisms. ● The platform is composed of one or more stateless processes. ● Designed to be distributed. 13 ● Divide and conquer approach. ● HTTP/REST microservices. ( Request / Response ) ● Message Systems for asynchronous communication. ( Publish/Subscribe ) ● There is no shared data between different processes. ● Scaling is easy, each microservice can be executed in a different server.
  • 14. Microservices … Why? ● It is quick to (re) write and to deploy. 14 ● Simple application can be handled by less developers.
  • 15. Microservices … Why? ● It is quick to (re) write and to deploy. 15 ● Simple application can be handled by less developers. ● Developers do not need to know the entire platform to be productive.
  • 16. Microservices … Why? ● It is quick to (re) write and to deploy. ● It knows that failures exist and how to handle them. 16 ● Simple application can be handled by less developers. ● Developer do not need to know the entire platform to be productive. ● Defensive programming, services should not break.
  • 17. Microservices … Why? ● It is quick to (re) write and to deploy. ● It knows that failures exist and how to handle them. ● KISS: Keep It Simple and Stupid. 17 ● Simple application can be handled by less developers. ● Developer do not need to know the entire platform to be productive. ● Defensive programming, services should not break. ● It must provide one functionality.
  • 18. Microservices … Why? ● It is quick to (re) write and to deploy. ● It knows that failures exist and how to handle them. ● KISS: Keep It Simple and Stupid. ● It must provide an API that other services can use. 18 ● Simple application can be handled by less developers. ● Developer do not need to know the entire platform to be productive. ● Defensive programming, services should not break. ● It must provide one functionality. ● Rely on best practices.
  • 20. What is NATS? ● Cloud-native message platform. 20 ● Designed to natively support modern cloud architectures.
  • 21. What is NATS? ● Cloud-native message platform. ● Highly performant. 21 ● Designed to natively support modern cloud architectures. ● It is fast! Can handle millions of messages per second.
  • 22. What is NATS? ● Cloud-native message platform. ● Highly performant. ● Extremely lightweight. 22 ● Designed to natively support modern cloud architectures. ● It is fast! Can handle millions of messages per second. ● A single binary, easy to deploy without unnecessary complexity.
  • 23. What is NATS? ● Cloud-native message platform. ● Highly performant. ● Extremely lightweight. ● Support for various messaging models and use cases. 23 ● Designed to natively support modern cloud architectures. ● It is fast! Can handle millions of messages per second. ● A single binary, easy to deploy without unnecessary complexity. ● Request/Response, Publish/Subscribe, Queues.
  • 24. What is NATS? ● Cloud-native message platform. ● Highly performant. ● Extremely lightweight. ● Support for various messaging models and use cases. 24 ● Designed to natively support modern cloud architectures. ● It is fast! Can handle millions of messages per second. ● A single binary, easy to deploy without unnecessary complexity. ● Request/Response, Publish/Subscribe, Queues. ● Simple text based protocol.
  • 26. Ernest : IAAS+PAAS Hybrid Cloud Platform ● Manage your infrastructure. (IAAS) 26 ● Manage servers, networks, balancers etc ... of your platform.
  • 27. Ernest : IAAS+PAAS Hybrid Cloud Platform ● Manage your infrastructure. (IAAS) ● Manage your platform. (PAAS) 27 ● Manage servers, networks, balancers etc ... of your platform. ● Deploy and upgrade your application to the desired servers.
  • 28. Ernest : IAAS+PAAS Hybrid Cloud Platform ● Manage your infrastructure. (IAAS) ● Manage your platform. (PAAS) ● Scaling. 28 ● Manage servers, networks, balancers etc ... of your platform. ● Deploy and upgrade your application to the desired servers. ● Automate everything.
  • 29. Ernest : IAAS+PAAS Hybrid Cloud Platform ● Manage your infrastructure. (IAAS) ● Manage your platform. (PAAS) ● Scaling. 29 ● Manage servers, networks, balancers etc ... of your platform. ● Deploy and upgrade your application to the desired servers. ● Automate everything. ● Evolve your platform when you need and redeploy your platform.
  • 30. Ernest : IAAS+PAAS Hybrid Cloud Platform ● Manage your infrastructure. (IAAS) ● Manage your platform. (PAAS) ● Scaling. ● Hybrid (Multiple Providers) 30 ● Manage servers, networks, balancers etc ... of your platform. ● Deploy and upgrade your application to the desired servers. ● Evolve your infrastructure when you need and redeploy your platform. ● Automate everything. ● Do not rely on a single provider, use different ones with a single interface.
  • 39. Ernest + NATS ● NATS is the central communication system for Ernest. 39 ● Ernest core is a series of microservices talking each other through NATS.
  • 40. Ernest + NATS ● NATS is the central communication system for Ernest. ● Ernest executes workflows defined by the user to build environments. 40 ● Ernest core is a series of microservices talking each other through NATS. ● Users posts a workflow written in a YAML file to be processed.
  • 41. Workflow example 41 --- name: my-awesome-example networks: - name: network-web subnet: 10.2.0.0/24 instances: - name: instance-web image: images/centos65-tty-sudo-disabled-nodejs-mongodb count: 1 cpus: 1 memory: 4GB disks: - 40GB network: name: network-web start_ip: "10.2.0.100" provisioner: - git clone https://host/user/myapp && make install && make run ● Simple example.
  • 42. Workflow example 42 --- name: my-awesome-example networks: - name: network-web subnet: 10.2.0.0/24 instances: - name: instance-web image: images/centos65-tty-sudo-disabled-nodejs-mongodb count: 1 cpus: 1 memory: 4GB disks: - 40GB network: name: network-web start_ip: "10.2.0.100" provisioner: - git clone https://host/user/myapp && make install && make run ● Simple example. ● Each environment has an unique name.
  • 43. Workflow example 43 --- name: my-awesome-example networks: - name: network-web subnet: 10.2.0.0/24 instances: - name: instance-web image: images/centos65-tty-sudo-disabled-nodejs-mongodb count: 1 cpus: 1 memory: 4GB disks: - 40GB network: name: network-web start_ip: "10.2.0.100" provisioner: - git clone https://host/user/myapp && make install && make run ● Simple example. ● Each environment has an unique name. ● Action: Create a network on our provider.
  • 44. Workflow example 44 --- name: my-awesome-example networks: - name: network-web subnet: 10.2.0.0/24 instances: - name: instance-web image: images/centos65-tty-sudo-disabled-nodejs-mongodb count: 1 cpus: 1 memory: 4GB disks: - 40GB network: name: network-web start_ip: "10.2.0.100" provisioner: - git clone https://host/user/myapp && make install && make run ● Simple example. ● Each environment has an unique name. ● Action: Create a network on our provider. ● Action: Create an instance type for our app.
  • 45. Workflow example 45 --- name: my-awesome-example networks: - name: network-web subnet: 10.2.0.0/24 instances: - name: instance-web image: images/centos65-tty-sudo-disabled-nodejs-mongodb count: 1 cpus: 1 memory: 4GB disks: - 40GB network: name: network-web start_ip: "10.2.0.100" provisioner: - git clone https://host/user/myapp && make install && make run ● Simple example. ● Each environment has an unique name. ● Action: Create a network on our provider. ● Action: Create an instance type for our app. ● Count determines the number of servers.
  • 46. Workflow example 46 --- name: my-awesome-example networks: - name: network-web subnet: 10.2.0.0/24 instances: - name: instance-web image: images/centos65-tty-sudo-disabled-nodejs-mongodb count: 1 cpus: 1 memory: 4GB disks: - 40GB network: name: network-web start_ip: "10.2.0.100" provisioner: - git clone https://host/user/myapp && make install && make run ● Simple example. ● Each environment has an unique name. ● Action: Create a network on our provider. ● Action: Create an instance type for our app. ● Count determines the number of servers. ● Action: Deploy your application and run it.
  • 47. Ernest + NATS ● NATS is the central communication system for Ernest. ● A workflow composed by multiple actions is executed by the user. ● A finite state machine handles the state for the platform. 47 ● Ernest core is a series of microservices talking each other through NATS. ● Users posts a workflow written in a YAML file to be processed. ● A list of actions are executed, one per microservice.
  • 48. Ernest + NATS ● NATS is the central communication system for Ernest. ● A workflow composed by multiple actions is executed by the user. ● A finite state machine handles the state for the platform. ● Publish Subscribe is the main pattern used. 48 ● Ernest core is a series of microservices talking each other through NATS. ● Users posts a workflow written in a YAML file to be processed. ● A list of actions are executed, one per microservice. ● Actions are published to NATS ( by a topic ) and microservices are subscribed to execute them.
  • 49. Ernest : Numbers ● Less than 5 developers. 49 ● A developer “owns” a component / microservice.
  • 50. Ernest : Numbers ● Less than 5 developers. ● Started as a prototype in Ruby, moving almost everything to Go. 50 ● A developer “owns” a component / microservice. ● Fast to develop, less errors, less dependencies.
  • 51. Ernest : Numbers ● Less than 5 developers. ● Started as a prototype in Ruby, moving almost everything to Go. ● Almost 50 microservices. 51 ● A developer “owns” a component / microservice. ● Fast to develop, less errors, less dependencies. ● Unix philosophy, do one thing and do it well done.
  • 52. Ernest : Numbers ● Less than 5 developers. ● Started as a prototype in Ruby, moving almost everything to Go. ● Almost 50 microservices. ● Everything specified. Everything tested. 52 ● A developer “owns” a component / microservice. ● Fast to develop, less errors, less dependencies. ● Unix philosophy, do one thing and do it well done. ● Using TDD on each part of the platform.
  • 53. Ernest : Numbers ● Less than 5 developers. ● Started as a prototype in Ruby, moving almost everything to Go. ● Almost 50 microservices. ● Everything specified. Everything tested. 53 ● A developer “owns” a component / microservice. ● Fast to develop, less errors, less dependencies. ● Unix philosophy, do one thing and do it well done. ● Using TDD on each part of the platform. ● Documentation on APIs, documentation on payloads.
  • 54. Resources ● http://microservices.io ● https://en.wikipedia.org/wiki/Cloud_computing ● http://nats.io 54 ● http://carrenza.com ● http://apcera.com