SlideShare una empresa de Scribd logo
1 de 32
Continuous Deployment of
Polyglot Microservices
A Practical Approach
Introduction: Who Am I
> Juan Larriba
> DevOps Engineer at everis innolab
> @compilemymind
Introduction: The DevOps World
> Currently the situation is completely volatile
> It is very complicated to visualize who the big players will be in the future
> Dozens of tools appear each week, each one apparently solving previously
unsolvable problems
> All the tools promise an easy, errorless experience
Introduction: DevOps in “traditional” companies
What do I pick? Who is the leader? Which tool won’t be abandoned 1 year from
now? Which tool is “the best”?
Introduction: DevOps in “traditional” companies
> Let’s face the facts: distributed computing is hard
> Currently, there are no “easy” tools
> But amazingly, almost all the development is being done open sourced
> We focused on leveraging the cloud to improve the development cycle inside
an IT company
> We developed a mock fraud detector application to test what was needed to
develop and deploy a “real world” application using microservices
How?
> Be Continuous
> Be Polyglot
> Be Immutable
> Be Reliable
> Be Operative
> Be Practical
Be Continuous
Be Continuous: Integration -> Delivery -> Deployment
> Most of IT companies today implement Continuous Integration methodology
for the majority of their recent projects
> In Java this means that usually the projects are already using a CI Server like
Jenkins
> We used Jenkins to manage all the Continuous Deployment lifecycle using
the Build Pipeline plugin
> Currently, as of Jenkins 2, it might be better to use the Pipeline plugin
(formerly Workflow)
Be Continuous: Jenkins + Build Pipeline
Be Continuous: Rules
> All microservices must provide a way to generate a Docker image, normally
being a Dockerfile
> All microservices should provide a build.sh describing their own build process
> The build process always has to end with a generated Docker image
> Version numbers are stored in a centralized configuration file and applied to
Docker tags and automatically increased by a Groovy script
Be Polyglot
Be Polyglot: Using the right tool for the right job
> Every programming language/framework has a set of advantages and some
disadvantages
> The main advantage of microservices is the possibility to use the right tool for
the right job
> So, we did just that...
Be Polyglot: Using the right tool for the right job
Be Polyglot: Vert.x
> The shortest definition for Vert.x is “NodeJS on the JVM”
> Vert.x is a polyglot framework/application platform that permits development of
reactive applications in every language supported by the JVM
> It is blazing fast, and seems the right choice for the receiver of potentially
millions of credit card transactions
Be Polyglot: Python
> Python is the “coolest” programming language right now
> It is the de-facto standard for Machine Learning and scientific programming
> It fits perfectly for doing the ML analysis of a fraud
Be Polyglot: Spring Boot
> Spring is the best known framework in the Java world
> It is known not only for its dependency injection capabilities but for being able to
connect to almost every system in the world
> In particular, the relationship between Spring Data and MongoDB is superb, so it
seems perfect for the storage microservice, which stores credit card transactions
on a MongoDB
> Spring Boot allows to quickly create the Microservice with very little
programming
Be Immutable
Be Immutable: Using containerization
> As each language generates a different kind of artifact, or none at all in case of
interpreted languages, containers provide a nice abstraction interface
> Each application must provide a Dockerfile for its build process, as the Docker
container will be the artifact
> Docker containers are versioned using tags and survive the whole pipeline, to
preserve the binary integrity of the build
> A private Docker Registry acts as our artifact repository
Be Reliable
Be Reliable: Writing functional tests while writing the
frontend
> Continuous Deployment relies heavily in testing. The more testing, the merrier
> There are lots of different tests: Unit, Integration, Performance, Security and
Functional
> The bare minimum to achieve a trustable CD cycle is Functional Testing
> Traditionally tooling for Functional Testing has been scarce and hard
(Selenium…)
Be Reliable: Writing functional tests while writing the
frontend
> Currently we can rely on the JavaScript world to provide tools for almost
everything, and Functional Testing is not an exception
> We used CasperJS, a Functional Testing framework developed on top of
PhantomJS
> This enables frontend developers to write Functional Tests while writing the
frontend, using the same tools and with the same programming language
Be Operative
Be Operative: Automating deployments
> Kubernetes has very good support for blue-green deployments using either the
kubectl rollout command on RC or kubectl set image on Deployments
> OpenShift support is even better thanks to registry notification and
ImageStreams
> Pushing an image to the OpenShift private repository triggers a blue-green
deployment of all the pods based on that image.
> During our tests, the whole deployment to the remote dev cluster took around 5-
10 seconds
Be Practical
Be Practical: Architecture vs Platform
> Traditionally, we use to expand the architecture to resolve all the problems we
face
> Most of the distributed computing related problems are not architecture related,
but systems related
> This makes them trivial to resolve on platform level but very hard and inefficient
to resolve on architecture level
Be Practical: Objectives
> Try to keep the architecture to the bare minimum
> The goal is that the architecture only applies to a microservice level, as if they
were “little monolithic” applications, completely unconscious they are part of a
microservice cloud
> Unit testing can be done locally, Integration testing should be done on the
platform
> Replace local Integration testing with automated deployments
Be Practical: Platform
> Service Discovery
> Api Gateway
> Security (Authentication and Authorization)
> Monitoring
> Health Check
> Autoscaling
> Log Management
Be Practical: Architecture
> Circuit Breaking
> REST Communication (client and server)
Lessons Learned
Lessons Learned
> OpenShift is an expensive monster that encapsulates a lot of different tools in an
abstract way
> Kubernetes alone fits for most situations/clients and gives you more control over
your cluster
> OpenShift offers multi-tenancy, registry notification, ImageStreams and the
Router component
> Eureka is redundant as Kubernetes offers embedded service discovery and load
balancing using Services
Lessons Learned
> Kubernetes (from version 1.2) offers a much more powerful routing component:
Ingress, which central part is the Ingress Controller
> An external Service Discovery component is useful if you want to use an
external router for the cluster: for example, traefik + Consul can replace the
Ingress Controllers
> This pattern is very useful when you want to authenticate requests before they
reach the cluster
Q&A
Questions and Answers
@compilemymind

Más contenido relacionado

La actualidad más candente

Openstack starter-guide-diablo
Openstack starter-guide-diabloOpenstack starter-guide-diablo
Openstack starter-guide-diablo
babycat_feifei
 
An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...
An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...
An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...
Neo4j
 

La actualidad más candente (20)

Abc of docker
Abc of dockerAbc of docker
Abc of docker
 
Deploying your first application with Kubernetes
Deploying your first application with KubernetesDeploying your first application with Kubernetes
Deploying your first application with Kubernetes
 
The Docker Ecosystem
The Docker EcosystemThe Docker Ecosystem
The Docker Ecosystem
 
Online Meetup: What's new in docker 1.13.0
Online Meetup: What's new in docker 1.13.0 Online Meetup: What's new in docker 1.13.0
Online Meetup: What's new in docker 1.13.0
 
Kubernetes - how to orchestrate containers
Kubernetes - how to orchestrate containersKubernetes - how to orchestrate containers
Kubernetes - how to orchestrate containers
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
What is Kubernets
What is  KubernetsWhat is  Kubernets
What is Kubernets
 
Nugwc k8s session-16-march-2021
Nugwc k8s session-16-march-2021Nugwc k8s session-16-march-2021
Nugwc k8s session-16-march-2021
 
Brief Introduction To Kubernetes
Brief Introduction To KubernetesBrief Introduction To Kubernetes
Brief Introduction To Kubernetes
 
Docker containerd Kubernetes sig node
Docker containerd Kubernetes sig nodeDocker containerd Kubernetes sig node
Docker containerd Kubernetes sig node
 
Docker introduction & benefits
Docker introduction & benefitsDocker introduction & benefits
Docker introduction & benefits
 
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
Revolutionizing WSO2 PaaS with Kubernetes & App FactoryRevolutionizing WSO2 PaaS with Kubernetes & App Factory
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
 
Openstack starter-guide-diablo
Openstack starter-guide-diabloOpenstack starter-guide-diablo
Openstack starter-guide-diablo
 
K8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals TrainingK8s in 3h - Kubernetes Fundamentals Training
K8s in 3h - Kubernetes Fundamentals Training
 
An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...
An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...
An Introduction to Container Organization with Docker Swarm, Kubernetes, Meso...
 
Kubernetes Architecture
 Kubernetes Architecture Kubernetes Architecture
Kubernetes Architecture
 
Infinit: Modern Storage Platform for Container Environments
Infinit: Modern Storage Platform for Container EnvironmentsInfinit: Modern Storage Platform for Container Environments
Infinit: Modern Storage Platform for Container Environments
 
Kubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive OverviewKubernetes - A Comprehensive Overview
Kubernetes - A Comprehensive Overview
 
Kubernetes in Docker
Kubernetes in DockerKubernetes in Docker
Kubernetes in Docker
 
UniK - a unikernel compiler and runtime
UniK - a unikernel compiler and runtimeUniK - a unikernel compiler and runtime
UniK - a unikernel compiler and runtime
 

Destacado

Destacado (16)

PRACTICA DE CONTROL DE MEDICAMENTOS
PRACTICA DE CONTROL DE MEDICAMENTOSPRACTICA DE CONTROL DE MEDICAMENTOS
PRACTICA DE CONTROL DE MEDICAMENTOS
 
Spring boot
Spring bootSpring boot
Spring boot
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Publishing RDF SKOS with microservices
Publishing RDF SKOS with microservicesPublishing RDF SKOS with microservices
Publishing RDF SKOS with microservices
 
Dropwizard Introduction
Dropwizard IntroductionDropwizard Introduction
Dropwizard Introduction
 
Continuous Deployment into the Unknown with Artifactory, Bintray, Docker and ...
Continuous Deployment into the Unknown with Artifactory, Bintray, Docker and ...Continuous Deployment into the Unknown with Artifactory, Bintray, Docker and ...
Continuous Deployment into the Unknown with Artifactory, Bintray, Docker and ...
 
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
 
Microservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-dockerMicroservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-docker
 
Repository Management with JFrog Artifactory
Repository Management with JFrog ArtifactoryRepository Management with JFrog Artifactory
Repository Management with JFrog Artifactory
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Microservices Development Process at Predix.io
Microservices Development Process at Predix.ioMicroservices Development Process at Predix.io
Microservices Development Process at Predix.io
 
Artifactory Docker Integration Webinar
Artifactory Docker Integration WebinarArtifactory Docker Integration Webinar
Artifactory Docker Integration Webinar
 
Microservice Architecture JavaCro 2015
Microservice Architecture JavaCro 2015Microservice Architecture JavaCro 2015
Microservice Architecture JavaCro 2015
 
Deployment - Done Right!
Deployment - Done Right!Deployment - Done Right!
Deployment - Done Right!
 
Java application monitoring with Dropwizard Metrics and graphite
Java application monitoring with Dropwizard Metrics and graphite Java application monitoring with Dropwizard Metrics and graphite
Java application monitoring with Dropwizard Metrics and graphite
 
Data Architecture not Just for Microservices
Data Architecture not Just for MicroservicesData Architecture not Just for Microservices
Data Architecture not Just for Microservices
 

Similar a Continuous deployment of polyglot microservices: A practical approach

Similar a Continuous deployment of polyglot microservices: A practical approach (20)

Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three BuzzwordsMicroservices, DevOps, Continuous Delivery – More Than Three Buzzwords
Microservices, DevOps, Continuous Delivery – More Than Three Buzzwords
 
Top DevOps tools
Top DevOps toolsTop DevOps tools
Top DevOps tools
 
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitThe DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
 
The DevOps Paradigm
The DevOps ParadigmThe DevOps Paradigm
The DevOps Paradigm
 
Containers: DevOp Enablers of Technical Solutions
Containers: DevOp Enablers of Technical SolutionsContainers: DevOp Enablers of Technical Solutions
Containers: DevOp Enablers of Technical Solutions
 
Docker Meetup at Docker HQ: Docker Cloud
Docker Meetup at Docker HQ: Docker CloudDocker Meetup at Docker HQ: Docker Cloud
Docker Meetup at Docker HQ: Docker Cloud
 
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
 
10 Reasons Why Java Now Rocks More Than Ever
10 Reasons Why Java Now Rocks More Than Ever10 Reasons Why Java Now Rocks More Than Ever
10 Reasons Why Java Now Rocks More Than Ever
 
Devops phase-1
Devops phase-1Devops phase-1
Devops phase-1
 
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe DevelopmentEclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
Eclipse Che - A Revolutionary IDE for Distributed & Mainframe Development
 
Top 10 Best DevOps tools in 2020
Top 10 Best DevOps tools in 2020Top 10 Best DevOps tools in 2020
Top 10 Best DevOps tools in 2020
 
When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?
 
DevOps - Introduction to data science
DevOps - Introduction to data scienceDevOps - Introduction to data science
DevOps - Introduction to data science
 
Leading DevOps Tools for 2022.pdf
Leading DevOps Tools for 2022.pdfLeading DevOps Tools for 2022.pdf
Leading DevOps Tools for 2022.pdf
 
How Azure DevOps can boost your organization's productivity
How Azure DevOps can boost your organization's productivityHow Azure DevOps can boost your organization's productivity
How Azure DevOps can boost your organization's productivity
 
Slide DevSecOps Microservices
Slide DevSecOps Microservices Slide DevSecOps Microservices
Slide DevSecOps Microservices
 
Part 2 improving your software development v1.0
Part 2   improving your software development v1.0Part 2   improving your software development v1.0
Part 2 improving your software development v1.0
 
Introduction to Dev Ops and Containerisation with Docker
Introduction to Dev Ops and Containerisation with DockerIntroduction to Dev Ops and Containerisation with Docker
Introduction to Dev Ops and Containerisation with Docker
 
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
 
DevOps Days Boston 2017: Developer first workflows for Kubernetes
DevOps Days Boston 2017: Developer first workflows for KubernetesDevOps Days Boston 2017: Developer first workflows for Kubernetes
DevOps Days Boston 2017: Developer first workflows for Kubernetes
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Último (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Continuous deployment of polyglot microservices: A practical approach

  • 1. Continuous Deployment of Polyglot Microservices A Practical Approach
  • 2. Introduction: Who Am I > Juan Larriba > DevOps Engineer at everis innolab > @compilemymind
  • 3. Introduction: The DevOps World > Currently the situation is completely volatile > It is very complicated to visualize who the big players will be in the future > Dozens of tools appear each week, each one apparently solving previously unsolvable problems > All the tools promise an easy, errorless experience
  • 4. Introduction: DevOps in “traditional” companies What do I pick? Who is the leader? Which tool won’t be abandoned 1 year from now? Which tool is “the best”?
  • 5. Introduction: DevOps in “traditional” companies > Let’s face the facts: distributed computing is hard > Currently, there are no “easy” tools > But amazingly, almost all the development is being done open sourced > We focused on leveraging the cloud to improve the development cycle inside an IT company > We developed a mock fraud detector application to test what was needed to develop and deploy a “real world” application using microservices
  • 6. How? > Be Continuous > Be Polyglot > Be Immutable > Be Reliable > Be Operative > Be Practical
  • 8. Be Continuous: Integration -> Delivery -> Deployment > Most of IT companies today implement Continuous Integration methodology for the majority of their recent projects > In Java this means that usually the projects are already using a CI Server like Jenkins > We used Jenkins to manage all the Continuous Deployment lifecycle using the Build Pipeline plugin > Currently, as of Jenkins 2, it might be better to use the Pipeline plugin (formerly Workflow)
  • 9. Be Continuous: Jenkins + Build Pipeline
  • 10. Be Continuous: Rules > All microservices must provide a way to generate a Docker image, normally being a Dockerfile > All microservices should provide a build.sh describing their own build process > The build process always has to end with a generated Docker image > Version numbers are stored in a centralized configuration file and applied to Docker tags and automatically increased by a Groovy script
  • 12. Be Polyglot: Using the right tool for the right job > Every programming language/framework has a set of advantages and some disadvantages > The main advantage of microservices is the possibility to use the right tool for the right job > So, we did just that...
  • 13. Be Polyglot: Using the right tool for the right job
  • 14. Be Polyglot: Vert.x > The shortest definition for Vert.x is “NodeJS on the JVM” > Vert.x is a polyglot framework/application platform that permits development of reactive applications in every language supported by the JVM > It is blazing fast, and seems the right choice for the receiver of potentially millions of credit card transactions
  • 15. Be Polyglot: Python > Python is the “coolest” programming language right now > It is the de-facto standard for Machine Learning and scientific programming > It fits perfectly for doing the ML analysis of a fraud
  • 16. Be Polyglot: Spring Boot > Spring is the best known framework in the Java world > It is known not only for its dependency injection capabilities but for being able to connect to almost every system in the world > In particular, the relationship between Spring Data and MongoDB is superb, so it seems perfect for the storage microservice, which stores credit card transactions on a MongoDB > Spring Boot allows to quickly create the Microservice with very little programming
  • 18. Be Immutable: Using containerization > As each language generates a different kind of artifact, or none at all in case of interpreted languages, containers provide a nice abstraction interface > Each application must provide a Dockerfile for its build process, as the Docker container will be the artifact > Docker containers are versioned using tags and survive the whole pipeline, to preserve the binary integrity of the build > A private Docker Registry acts as our artifact repository
  • 20. Be Reliable: Writing functional tests while writing the frontend > Continuous Deployment relies heavily in testing. The more testing, the merrier > There are lots of different tests: Unit, Integration, Performance, Security and Functional > The bare minimum to achieve a trustable CD cycle is Functional Testing > Traditionally tooling for Functional Testing has been scarce and hard (Selenium…)
  • 21. Be Reliable: Writing functional tests while writing the frontend > Currently we can rely on the JavaScript world to provide tools for almost everything, and Functional Testing is not an exception > We used CasperJS, a Functional Testing framework developed on top of PhantomJS > This enables frontend developers to write Functional Tests while writing the frontend, using the same tools and with the same programming language
  • 23. Be Operative: Automating deployments > Kubernetes has very good support for blue-green deployments using either the kubectl rollout command on RC or kubectl set image on Deployments > OpenShift support is even better thanks to registry notification and ImageStreams > Pushing an image to the OpenShift private repository triggers a blue-green deployment of all the pods based on that image. > During our tests, the whole deployment to the remote dev cluster took around 5- 10 seconds
  • 25. Be Practical: Architecture vs Platform > Traditionally, we use to expand the architecture to resolve all the problems we face > Most of the distributed computing related problems are not architecture related, but systems related > This makes them trivial to resolve on platform level but very hard and inefficient to resolve on architecture level
  • 26. Be Practical: Objectives > Try to keep the architecture to the bare minimum > The goal is that the architecture only applies to a microservice level, as if they were “little monolithic” applications, completely unconscious they are part of a microservice cloud > Unit testing can be done locally, Integration testing should be done on the platform > Replace local Integration testing with automated deployments
  • 27. Be Practical: Platform > Service Discovery > Api Gateway > Security (Authentication and Authorization) > Monitoring > Health Check > Autoscaling > Log Management
  • 28. Be Practical: Architecture > Circuit Breaking > REST Communication (client and server)
  • 30. Lessons Learned > OpenShift is an expensive monster that encapsulates a lot of different tools in an abstract way > Kubernetes alone fits for most situations/clients and gives you more control over your cluster > OpenShift offers multi-tenancy, registry notification, ImageStreams and the Router component > Eureka is redundant as Kubernetes offers embedded service discovery and load balancing using Services
  • 31. Lessons Learned > Kubernetes (from version 1.2) offers a much more powerful routing component: Ingress, which central part is the Ingress Controller > An external Service Discovery component is useful if you want to use an external router for the cluster: for example, traefik + Consul can replace the Ingress Controllers > This pattern is very useful when you want to authenticate requests before they reach the cluster