SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
MAKE

MONEY

MATTER.
Cloud Native Aarhus
By Kasper Nissen (@phennex), DevOps Engineer @thelunarway
MAKE

MONEY

MATTER.
Cloud Native Aarhus
By Kasper Nissen (@phennex), DevOps Engineer @thelunarway
Lunar Way
• The Partner model
• Leverage the partner banks infrastructure
• All money is in the partner bank
• Currently only in Denmark, will move to the nordics in the near future
Kasper Nissen
DevOps & Infrastructure Engineer @thelunarway
Experience
DevOps & Infrastructure Engineer @ LEGO (CITMABIS) (oursourced by
IT Minds) for 5 months
Senior/Software Engineer @ IT Minds (~4 years part time)
Master thesis: KubeCloud - A Small-Scale Tangible Cloud Computing
Environment.

Interview with Software Engineering Daily: bit.ly/2paZ5lg
Blogging about Cloud Native Tech @ www.kubecloud.io
M. Eng. Computer Technology from Aarhus University - Department of
Engineering.
B. Eng. Information and Communication Technology from Aarhus
University - School of Engineering
What do we have running?
19services
215containers
in prod
13infrastructure
services
3node rabbitmq
cluster
1rails
monolith
2100 GB
postgresql
DB’s
3kubernetes
clusters
3AWS Accounts
Where are we running?
Service overview
api
nemid
signup
goals
feeds
topup
bec-bank-nk
bec-bank-ka
credit
support
supportsystem
social
stream
insight
Service overview (with infrastructure)
api
nemid
signup
goals
feeds
topup
bec-bank-nk
bec-bank-ka
credit
support
supportsystem
prometheus
elasticsearch
pushgateway
kibana
alertmanager
fluentd
node-exporter
rabbitmq
social
stream
insight
linkerd
Infrastructure
RabbitMQ Cluster Kubernetes Cluster Elasticsearch
Cluster
AWS
PostgreSQL
database
Where are we heading?
Horses vs Unicorns
- Gene Kim
Cloud Native Utopia
Microservice oriented Container packaged Dynamically scheduled
MICROSERVICES
Why ?
• Development
• Freedom and autonomy
• Best tool for the job
• Speed
• Architecture
• Fault tolerance
• Flexibility
• Coherence, decoupling, 

encapsulation
• Deployment
• Independence
• Scalability
• Speed
• Resource utilisation
1. 2. 3.
(our Microservice vision)
How are we building our services?
Asynchronous first
Decoupling in time and space allows for autonomy
Shared dependencies
Common packages, such as logging, monitoring, communication
Each service has it’s own repository
Containing source code, deployment spec, pipeline, etc.
HTTP REQ
event
Repo
Killing our Rails monolith
… slowly strangling Rails
Rails
Rails
Languages
Challenges - so far
• Development
• Tooling - e.g. Swagger for
events?
• Local env
• Shared code
• Deployment
• Automation
• Versioning
• Architecture
• Distributed monolith
• Transparency
• Complexity
• Cross cutting concerns
• Operation
• Monitoring
• Tracing events
CONTAINERS
What?
Container
App
Runtime
OS
HOST OS
DEVELOPERS OPERATIONS
Why?
Isolation
Services are isolated and contained in their environment
Consistency in portability
The container will run in the same way in local env as in prod
Versioning
Versioning a container is easy, rolling back and forth becomes easy
Container
App
Runtime
OS
Container
App
Runtime
OS
Container
App
Runtime
OS
Container
App
Runtime
OS
Development
Container
App
Runtime
OS
Production
Container
App V1
Runtime
OS
Container
App V2
Runtime
OS
Container
App
Runtime
OS
image:v1 image:v2 image:v3
DYNAMICALLY
SCHEDULED
What?
Node Node Node
Why?
Scheduling
The scheduler will schedule your service on a node
Resource optimization
Scheduling allows for better packaging of services in hosts
Resiliency
If a node dies, the scheduler will reschedule on another node
Scalability
Scaling a dynamically cluster is easy, just add more nodes
SO,
HOW DO WE WORK
TOWARDS BECOMING

A UNICORN?
Currently used CNCF projects
Kubernetes
Container Orchestration with
Why Kubernetes?
Community
48k+ commits, 22+ GitHub stars, 1.1k contributors
Crossplatform
Multiple arcs, multiple cloud providers
Resource optimization
Packing nodes to utilize available resources
Tooling
A lot of great tools
Scaling
Great integration with auto-scaling, both
on node- and container-level
High availability
Automatic failover, redundancy
Pure Awesomeness!
It’s just awesome!
1.5 release:
Estimated 400 years of work hours
What does it do?
Node Node Node Node Node
Node Node Node Node Node
big dataapp Bapp A database
datacenter
Cluster Manager
Where does it run?
eu-west-1a
eu-west-1b
eu-west-1c
Private
Public
Services running in kubernetes
Networking
infrastructure
elb
internal
elb
api
elb
nginx-ingress linkerd route53 default-backend
Logging
es-proxy
Dev Demo
service 1 service #
…
service 1 service #
…
Monitoring
prometheus
Misc
sanity-checks
release-notifier
pushgateway
alertmanager
grafana
fluentd
kibana
node-exporter
postgresql-exporter
rabbitmq-exporter
cloudwatch-
exporter
What do we think of it?
Freedom
Squads can deploy and more or less implement
how they see fit
Autonomous services
Squads can work independent of other squads
Continuous Delivery
Kubernetes allows us to deploy multiple times
a day. It’s easy to rollback in case something
went wrong
Flexibility
We run many different type of workloads in the
cluster. Gives us mobility to become cloud
agnostic
Scalable infrastructure
Scaling the infrastructure is easy, both on
node and container level
High availability
Kubernetes takes care of container
failures, AWS Auto Scaling groups takes
care of node failures
Easy maintenance
We are using Kubernetes Operations to
help us spin up our clusters, and maintain
them.
Fluentd
Log collection with
Why fluentd?
Simple and Easy
Provides a simple interface for specifying input and output. Works great with Kubernetes and containers.
Community
Big community around fluentd, validates our choice.
Small memory footprint
Do not require a lot of resources in the cluster
Proven reliability and performance
It’s a fairly battle tested project
What does it do?
<source>
@type tail
path /var/log/containers/*.log
pos_file /var/log/containers/es-containers.log.pos
tag kubernetes.application.*
format json
time_key event_time
time_format %Y-%m-%dT%H:%M:%S.%3NZ
</source>
<filter kubernetes.application.**>
@type kubernetes_metadata
merge_json_log true
preserve_json_log false
</filter>
<match kubernetes.application.**>
type elasticsearch
host es-proxy
port 9200
include_tag_key true
logstash_format true
logstash_prefix application-
reload_on_failure true
</match>
1.
2.
3.
Logging setup
AWS Elasticsearch Cluster
fluentd aws-signing-proxy
What do we think of it?
Very easy to use
Set up is easy!
Works great with Kubernetes
Awesome plugin for adding Kubernetes metadata - making it easy to identify pods etc.
Run as a daemonset
Easy to run in every node of the cluster as a daemonset
Prometheus
Monitoring with
Alertmanager
Grafana
Prometheus
Pushgateway
short-lived jobs
long-lived jobs
scrapes
What?
What does it do?
Multi-dimensional data model
Time series identified by metric name and key/value pairs
Flexible query language
Comes with a builtin query language for al kinds of operations, sums, averages, increase, rate, etc.
Easy and simple
Easy to setup, and works great with Kubernetes service discovery
Alerting and great integration with Grafana
Prometheus has a builtin alerting system, and Grafana provides easy integration for making
metrics visible in dashboards
Pull-based approach
Prometheus scrapes it’s targets at a regular interval
What metrics are we collecting?
Kubernetes specific metrics
Pods running, health of Kubernetes system components, etc.
RabbitMQ
Activity in queues, unacknowledged messages
Nodes
CPU, Memory
Traffic
Incoming traffic, upstream latency in cluster, etc.
Containers
CPU, Memory
Application Specific metrics
Relevant metrics, instrumented by the services owners
DEMO
What do we think of it?
Provides great insights
Provides valuable insights in the state of the cluster
Makes is easy to developers to instrument their services
We provide a simple package for instrumentation, making squads able to do their own
monitoring. YOU BUILT IT, YOU RUN IT!
Grafana integrations is sweet!
Grafana and Prometheus works well together, making Grafana the interface for building dashboards
and alerts
Kubernetes <3 Prometheus
The only thing a service owner has to do in the cluster to make Prometheus scrape their services is to
add:
annotations:
prometheus.io/scrape: 'true'
gRPC
Service to service communication with
What?
gRPCserver
Service #2Service #1
gRPCclient
Protocol
buffer
proto req
proto response
What do we use it for?
It will be our default choice for synchronous calls
Synchronous service to service communication will be aligned on gRPC
Internal support system will use it to fetch data from our services
Our internal support system needs information from different services on demand, the service
will use gRPC to fetch the data
service 4
service 3
service 1
service 2
Support
Why gRPC?
Simple service definition using Protocol buffers
Simpler request handling, no need for serialization and deserialization
Binary protocol
Less overhead in communication.
Works across multiple languages and platforms
gRPC has a widespread support for multiple languages, making it a perfect fit in our current
polyglot architecture
Works great with go and the rest of the ecosystem
Docker, Kubernetes uses gRPC as long with Go. It’s a natural extension for service to service
communication. Based on many years of Google experience!
UNICORN…
Back to the
Are we there yet?
YES! and no..
We deploy multiple times a day
Deployment is autonomous, squads can deploy to production as they please.
We can easily scale to larger demands, if necessary
Scaling our infrastructure is easy
HOWEVER, doing microservices are complex!
We still need to implement better tracing, using the CNCF project OpenTracing and Zipkin
We need more insights and smarter routing in our service to service communication, we will be
using linkerd.
We can tolerate AZ failures to some extend
Our services are spread across availability zones
DO YOU HAVE ANY QUESTIONS?
Last thing
Thank you for listening!
That was it for me!
If you wanna know more, send me a message in the Cloud Native DK Slack Community.
Remember to sign up at: https://cloudnative-dk.herokuapp.com/
Catch me on Twitter @phennex
I will be speaking again:

• CoDe:U - Continuous Delivery Users Århus (June 20th in INCUBA, Åbogade 15, Aarhus N)
• Link: https://www.meetup.com/CoDe-U-AROS/events/239847862/ 

• GOTOCon Copenhagen - October 1st
• Link: https://gotocph.com/2017/sessions/237

Mais conteúdo relacionado

Mais procurados

DevOps with Azure, Kubernetes, and Helm Webinar
DevOps with Azure, Kubernetes, and Helm WebinarDevOps with Azure, Kubernetes, and Helm Webinar
DevOps with Azure, Kubernetes, and Helm WebinarCodefresh
 
Managing Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing KubernetesManaging Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing KubernetesMarc Sluiter
 
Kubernetes on AWS gone wild
Kubernetes on AWS gone wildKubernetes on AWS gone wild
Kubernetes on AWS gone wildChristian Jantz
 
"On-premises" FaaS on Kubernetes
"On-premises" FaaS on Kubernetes"On-premises" FaaS on Kubernetes
"On-premises" FaaS on KubernetesAlex Casalboni
 
Zero downtime deployment of micro-services with Kubernetes
Zero downtime deployment of micro-services with KubernetesZero downtime deployment of micro-services with Kubernetes
Zero downtime deployment of micro-services with KubernetesWojciech Barczyński
 
Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple Wojciech Barczyński
 
CI Implementation with Kubernetes at LivePerson by Saar Demri
CI Implementation with Kubernetes at LivePerson by Saar DemriCI Implementation with Kubernetes at LivePerson by Saar Demri
CI Implementation with Kubernetes at LivePerson by Saar DemriDoiT International
 
Autoscaling Kubernetes
Autoscaling KubernetesAutoscaling Kubernetes
Autoscaling Kubernetescraigbox
 
How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...
How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...
How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...VMware Tanzu
 
Git deep dive – chopping Kubernetes
Git deep dive – chopping KubernetesGit deep dive – chopping Kubernetes
Git deep dive – chopping KubernetesStefan Schimanski
 
Using source code management patterns to configure and secure your Kubernetes...
Using source code management patterns to configure and secure your Kubernetes...Using source code management patterns to configure and secure your Kubernetes...
Using source code management patterns to configure and secure your Kubernetes...Giovanni Galloro
 
Continuous Deployment with Jenkins on Kubernetes
Continuous Deployment with Jenkins on KubernetesContinuous Deployment with Jenkins on Kubernetes
Continuous Deployment with Jenkins on KubernetesMatt Baldwin
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWSGrant Ellis
 
Cloud native - CI/CD
Cloud native - CI/CDCloud native - CI/CD
Cloud native - CI/CDElad Hirsch
 
PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...
PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...
PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...Puppet
 
Kubernetes @ Nanit by Chen Fisher
Kubernetes @ Nanit by Chen FisherKubernetes @ Nanit by Chen Fisher
Kubernetes @ Nanit by Chen FisherDoiT International
 
Kubernetes best practices
Kubernetes best practicesKubernetes best practices
Kubernetes best practicesBill Liu
 
Kubernetes in Highly Restrictive Environments
Kubernetes in Highly Restrictive EnvironmentsKubernetes in Highly Restrictive Environments
Kubernetes in Highly Restrictive EnvironmentsKublr
 

Mais procurados (20)

DevOps with Azure, Kubernetes, and Helm Webinar
DevOps with Azure, Kubernetes, and Helm WebinarDevOps with Azure, Kubernetes, and Helm Webinar
DevOps with Azure, Kubernetes, and Helm Webinar
 
Managing Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing KubernetesManaging Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing Kubernetes
 
Serverless on Kubernetes
Serverless on KubernetesServerless on Kubernetes
Serverless on Kubernetes
 
Kubernetes on AWS gone wild
Kubernetes on AWS gone wildKubernetes on AWS gone wild
Kubernetes on AWS gone wild
 
"On-premises" FaaS on Kubernetes
"On-premises" FaaS on Kubernetes"On-premises" FaaS on Kubernetes
"On-premises" FaaS on Kubernetes
 
Zero downtime deployment of micro-services with Kubernetes
Zero downtime deployment of micro-services with KubernetesZero downtime deployment of micro-services with Kubernetes
Zero downtime deployment of micro-services with Kubernetes
 
Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple Effective Building your Platform with Kubernetes == Keep it Simple
Effective Building your Platform with Kubernetes == Keep it Simple
 
CI Implementation with Kubernetes at LivePerson by Saar Demri
CI Implementation with Kubernetes at LivePerson by Saar DemriCI Implementation with Kubernetes at LivePerson by Saar Demri
CI Implementation with Kubernetes at LivePerson by Saar Demri
 
Autoscaling Kubernetes
Autoscaling KubernetesAutoscaling Kubernetes
Autoscaling Kubernetes
 
How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...
How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...
How to Live in a Post-Spring-Cloud-Netflix World - Olga Maciaszek-Sharma & Ja...
 
Git deep dive – chopping Kubernetes
Git deep dive – chopping KubernetesGit deep dive – chopping Kubernetes
Git deep dive – chopping Kubernetes
 
What's Cooking in the Cloud?
What's Cooking in the Cloud?What's Cooking in the Cloud?
What's Cooking in the Cloud?
 
Using source code management patterns to configure and secure your Kubernetes...
Using source code management patterns to configure and secure your Kubernetes...Using source code management patterns to configure and secure your Kubernetes...
Using source code management patterns to configure and secure your Kubernetes...
 
Continuous Deployment with Jenkins on Kubernetes
Continuous Deployment with Jenkins on KubernetesContinuous Deployment with Jenkins on Kubernetes
Continuous Deployment with Jenkins on Kubernetes
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWS
 
Cloud native - CI/CD
Cloud native - CI/CDCloud native - CI/CD
Cloud native - CI/CD
 
PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...
PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...
PuppetConf 2016: Scaling Puppet on AWS ECS with Terraform and Docker – Maxime...
 
Kubernetes @ Nanit by Chen Fisher
Kubernetes @ Nanit by Chen FisherKubernetes @ Nanit by Chen Fisher
Kubernetes @ Nanit by Chen Fisher
 
Kubernetes best practices
Kubernetes best practicesKubernetes best practices
Kubernetes best practices
 
Kubernetes in Highly Restrictive Environments
Kubernetes in Highly Restrictive EnvironmentsKubernetes in Highly Restrictive Environments
Kubernetes in Highly Restrictive Environments
 

Semelhante a Lunar Way and the Cloud Native "stack"

Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)
Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)
Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)QAware GmbH
 
Gatekeeper: API gateway
Gatekeeper: API gatewayGatekeeper: API gateway
Gatekeeper: API gatewayChengHui Weng
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kuberneteskloia
 
DevOps and BigData Analytics
DevOps and BigData Analytics DevOps and BigData Analytics
DevOps and BigData Analytics sbbabu
 
Pivotal Container Service Overview
Pivotal Container Service Overview Pivotal Container Service Overview
Pivotal Container Service Overview VMware Tanzu
 
prodops.io k8s presentation
prodops.io k8s presentationprodops.io k8s presentation
prodops.io k8s presentationProdops.io
 
Faster, more Secure Application Modernization and Replatforming with PKS - Ku...
Faster, more Secure Application Modernization and Replatforming with PKS - Ku...Faster, more Secure Application Modernization and Replatforming with PKS - Ku...
Faster, more Secure Application Modernization and Replatforming with PKS - Ku...VMware Tanzu
 
Episode 1: Building Kubernetes-as-a-Service
Episode 1: Building Kubernetes-as-a-ServiceEpisode 1: Building Kubernetes-as-a-Service
Episode 1: Building Kubernetes-as-a-ServiceMesosphere Inc.
 
Persistent Storage for stateful applications on Kubernetes made easy with Ope...
Persistent Storage for stateful applications on Kubernetes made easy with Ope...Persistent Storage for stateful applications on Kubernetes made easy with Ope...
Persistent Storage for stateful applications on Kubernetes made easy with Ope...MayaData Inc
 
Move fast and make things with microservices
Move fast and make things with microservicesMove fast and make things with microservices
Move fast and make things with microservicesMithun Arunan
 
What's New in Docker - February 2017
What's New in Docker - February 2017What's New in Docker - February 2017
What's New in Docker - February 2017Patrick Chanezon
 
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 toolkitMarco Ferrigno
 
The DevOps Paradigm
The DevOps ParadigmThe DevOps Paradigm
The DevOps ParadigmNaLUG
 
Kubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDKubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDStfalcon Meetups
 
Reference architectures shows a microservices deployed to Kubernetes
Reference architectures shows a microservices deployed to KubernetesReference architectures shows a microservices deployed to Kubernetes
Reference architectures shows a microservices deployed to KubernetesRakesh Gujjarlapudi
 
Fluentd Overview, Now and Then
Fluentd Overview, Now and ThenFluentd Overview, Now and Then
Fluentd Overview, Now and ThenSATOSHI TAGOMORI
 
Pivotal Container Service (PKS) at SF Cloud Foundry Meetup
Pivotal Container Service (PKS) at SF Cloud Foundry MeetupPivotal Container Service (PKS) at SF Cloud Foundry Meetup
Pivotal Container Service (PKS) at SF Cloud Foundry Meetupcornelia davis
 
The path to a serverless-native era with Kubernetes
The path to a serverless-native era with KubernetesThe path to a serverless-native era with Kubernetes
The path to a serverless-native era with Kubernetessparkfabrik
 

Semelhante a Lunar Way and the Cloud Native "stack" (20)

Where should I run my code? Serverless, Containers, Virtual Machines and more
Where should I run my code? Serverless, Containers, Virtual Machines and moreWhere should I run my code? Serverless, Containers, Virtual Machines and more
Where should I run my code? Serverless, Containers, Virtual Machines and more
 
Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)
Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)
Kubernetes One-Click Deployment: Hands-on Workshop (Mainz)
 
Gatekeeper: API gateway
Gatekeeper: API gatewayGatekeeper: API gateway
Gatekeeper: API gateway
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kubernetes
 
DevOps and BigData Analytics
DevOps and BigData Analytics DevOps and BigData Analytics
DevOps and BigData Analytics
 
Pivotal Container Service Overview
Pivotal Container Service Overview Pivotal Container Service Overview
Pivotal Container Service Overview
 
prodops.io k8s presentation
prodops.io k8s presentationprodops.io k8s presentation
prodops.io k8s presentation
 
Faster, more Secure Application Modernization and Replatforming with PKS - Ku...
Faster, more Secure Application Modernization and Replatforming with PKS - Ku...Faster, more Secure Application Modernization and Replatforming with PKS - Ku...
Faster, more Secure Application Modernization and Replatforming with PKS - Ku...
 
Episode 1: Building Kubernetes-as-a-Service
Episode 1: Building Kubernetes-as-a-ServiceEpisode 1: Building Kubernetes-as-a-Service
Episode 1: Building Kubernetes-as-a-Service
 
Persistent Storage for stateful applications on Kubernetes made easy with Ope...
Persistent Storage for stateful applications on Kubernetes made easy with Ope...Persistent Storage for stateful applications on Kubernetes made easy with Ope...
Persistent Storage for stateful applications on Kubernetes made easy with Ope...
 
Move fast and make things with microservices
Move fast and make things with microservicesMove fast and make things with microservices
Move fast and make things with microservices
 
What's New in Docker - February 2017
What's New in Docker - February 2017What's New in Docker - February 2017
What's New in Docker - February 2017
 
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
 
Kubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CDKubernetes: від знайомства до використання у CI/CD
Kubernetes: від знайомства до використання у CI/CD
 
Reference architectures shows a microservices deployed to Kubernetes
Reference architectures shows a microservices deployed to KubernetesReference architectures shows a microservices deployed to Kubernetes
Reference architectures shows a microservices deployed to Kubernetes
 
Fluentd Overview, Now and Then
Fluentd Overview, Now and ThenFluentd Overview, Now and Then
Fluentd Overview, Now and Then
 
Pivotal Container Service (PKS) at SF Cloud Foundry Meetup
Pivotal Container Service (PKS) at SF Cloud Foundry MeetupPivotal Container Service (PKS) at SF Cloud Foundry Meetup
Pivotal Container Service (PKS) at SF Cloud Foundry Meetup
 
The path to a serverless-native era with Kubernetes
The path to a serverless-native era with KubernetesThe path to a serverless-native era with Kubernetes
The path to a serverless-native era with Kubernetes
 
56k.cloud training
56k.cloud training56k.cloud training
56k.cloud training
 

Mais de Kasper Nissen

GitOps - Operation By Pull Request
GitOps - Operation By Pull RequestGitOps - Operation By Pull Request
GitOps - Operation By Pull RequestKasper Nissen
 
Cloud Native CI/CD with GitOps
Cloud Native CI/CD with GitOpsCloud Native CI/CD with GitOps
Cloud Native CI/CD with GitOpsKasper Nissen
 
Monitoring with prometheus
Monitoring with prometheusMonitoring with prometheus
Monitoring with prometheusKasper Nissen
 
IT Minds Mindblown Networking Event 2016
IT Minds Mindblown Networking Event 2016IT Minds Mindblown Networking Event 2016
IT Minds Mindblown Networking Event 2016Kasper Nissen
 
Google Cloud Platform and Kubernetes
Google Cloud Platform and KubernetesGoogle Cloud Platform and Kubernetes
Google Cloud Platform and KubernetesKasper Nissen
 
Let's tak Productivity (Let's talk Apple #4)
Let's tak Productivity (Let's talk Apple #4)Let's tak Productivity (Let's talk Apple #4)
Let's tak Productivity (Let's talk Apple #4)Kasper Nissen
 

Mais de Kasper Nissen (6)

GitOps - Operation By Pull Request
GitOps - Operation By Pull RequestGitOps - Operation By Pull Request
GitOps - Operation By Pull Request
 
Cloud Native CI/CD with GitOps
Cloud Native CI/CD with GitOpsCloud Native CI/CD with GitOps
Cloud Native CI/CD with GitOps
 
Monitoring with prometheus
Monitoring with prometheusMonitoring with prometheus
Monitoring with prometheus
 
IT Minds Mindblown Networking Event 2016
IT Minds Mindblown Networking Event 2016IT Minds Mindblown Networking Event 2016
IT Minds Mindblown Networking Event 2016
 
Google Cloud Platform and Kubernetes
Google Cloud Platform and KubernetesGoogle Cloud Platform and Kubernetes
Google Cloud Platform and Kubernetes
 
Let's tak Productivity (Let's talk Apple #4)
Let's tak Productivity (Let's talk Apple #4)Let's tak Productivity (Let's talk Apple #4)
Let's tak Productivity (Let's talk Apple #4)
 

Último

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 MenDelhi Call girls
 
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.pdfEnterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
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.pptxMalak Abu Hammad
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
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 2024Results
 
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.pptxHampshireHUG
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Último (20)

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
 
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
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
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
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
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
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Lunar Way and the Cloud Native "stack"

  • 1. MAKE
 MONEY
 MATTER. Cloud Native Aarhus By Kasper Nissen (@phennex), DevOps Engineer @thelunarway
  • 2. MAKE
 MONEY
 MATTER. Cloud Native Aarhus By Kasper Nissen (@phennex), DevOps Engineer @thelunarway
  • 3. Lunar Way • The Partner model • Leverage the partner banks infrastructure • All money is in the partner bank • Currently only in Denmark, will move to the nordics in the near future
  • 4. Kasper Nissen DevOps & Infrastructure Engineer @thelunarway Experience DevOps & Infrastructure Engineer @ LEGO (CITMABIS) (oursourced by IT Minds) for 5 months Senior/Software Engineer @ IT Minds (~4 years part time) Master thesis: KubeCloud - A Small-Scale Tangible Cloud Computing Environment.
 Interview with Software Engineering Daily: bit.ly/2paZ5lg Blogging about Cloud Native Tech @ www.kubecloud.io M. Eng. Computer Technology from Aarhus University - Department of Engineering. B. Eng. Information and Communication Technology from Aarhus University - School of Engineering
  • 5. What do we have running? 19services 215containers in prod 13infrastructure services 3node rabbitmq cluster 1rails monolith 2100 GB postgresql DB’s 3kubernetes clusters 3AWS Accounts
  • 6. Where are we running?
  • 8. Service overview (with infrastructure) api nemid signup goals feeds topup bec-bank-nk bec-bank-ka credit support supportsystem prometheus elasticsearch pushgateway kibana alertmanager fluentd node-exporter rabbitmq social stream insight linkerd
  • 9. Infrastructure RabbitMQ Cluster Kubernetes Cluster Elasticsearch Cluster AWS PostgreSQL database
  • 10. Where are we heading? Horses vs Unicorns - Gene Kim
  • 11. Cloud Native Utopia Microservice oriented Container packaged Dynamically scheduled
  • 13. Why ? • Development • Freedom and autonomy • Best tool for the job • Speed • Architecture • Fault tolerance • Flexibility • Coherence, decoupling, 
 encapsulation • Deployment • Independence • Scalability • Speed • Resource utilisation 1. 2. 3. (our Microservice vision)
  • 14. How are we building our services? Asynchronous first Decoupling in time and space allows for autonomy Shared dependencies Common packages, such as logging, monitoring, communication Each service has it’s own repository Containing source code, deployment spec, pipeline, etc. HTTP REQ event Repo
  • 15. Killing our Rails monolith … slowly strangling Rails Rails Rails
  • 17. Challenges - so far • Development • Tooling - e.g. Swagger for events? • Local env • Shared code • Deployment • Automation • Versioning • Architecture • Distributed monolith • Transparency • Complexity • Cross cutting concerns • Operation • Monitoring • Tracing events
  • 20. Why? Isolation Services are isolated and contained in their environment Consistency in portability The container will run in the same way in local env as in prod Versioning Versioning a container is easy, rolling back and forth becomes easy Container App Runtime OS Container App Runtime OS Container App Runtime OS Container App Runtime OS Development Container App Runtime OS Production Container App V1 Runtime OS Container App V2 Runtime OS Container App Runtime OS image:v1 image:v2 image:v3
  • 23. Why? Scheduling The scheduler will schedule your service on a node Resource optimization Scheduling allows for better packaging of services in hosts Resiliency If a node dies, the scheduler will reschedule on another node Scalability Scaling a dynamically cluster is easy, just add more nodes
  • 24. SO, HOW DO WE WORK TOWARDS BECOMING
 A UNICORN?
  • 27. Why Kubernetes? Community 48k+ commits, 22+ GitHub stars, 1.1k contributors Crossplatform Multiple arcs, multiple cloud providers Resource optimization Packing nodes to utilize available resources Tooling A lot of great tools Scaling Great integration with auto-scaling, both on node- and container-level High availability Automatic failover, redundancy Pure Awesomeness! It’s just awesome! 1.5 release: Estimated 400 years of work hours
  • 28. What does it do? Node Node Node Node Node Node Node Node Node Node big dataapp Bapp A database datacenter Cluster Manager
  • 29. Where does it run? eu-west-1a eu-west-1b eu-west-1c Private Public
  • 30. Services running in kubernetes Networking infrastructure elb internal elb api elb nginx-ingress linkerd route53 default-backend Logging es-proxy Dev Demo service 1 service # … service 1 service # … Monitoring prometheus Misc sanity-checks release-notifier pushgateway alertmanager grafana fluentd kibana node-exporter postgresql-exporter rabbitmq-exporter cloudwatch- exporter
  • 31. What do we think of it? Freedom Squads can deploy and more or less implement how they see fit Autonomous services Squads can work independent of other squads Continuous Delivery Kubernetes allows us to deploy multiple times a day. It’s easy to rollback in case something went wrong Flexibility We run many different type of workloads in the cluster. Gives us mobility to become cloud agnostic Scalable infrastructure Scaling the infrastructure is easy, both on node and container level High availability Kubernetes takes care of container failures, AWS Auto Scaling groups takes care of node failures Easy maintenance We are using Kubernetes Operations to help us spin up our clusters, and maintain them.
  • 33. Why fluentd? Simple and Easy Provides a simple interface for specifying input and output. Works great with Kubernetes and containers. Community Big community around fluentd, validates our choice. Small memory footprint Do not require a lot of resources in the cluster Proven reliability and performance It’s a fairly battle tested project
  • 34. What does it do? <source> @type tail path /var/log/containers/*.log pos_file /var/log/containers/es-containers.log.pos tag kubernetes.application.* format json time_key event_time time_format %Y-%m-%dT%H:%M:%S.%3NZ </source> <filter kubernetes.application.**> @type kubernetes_metadata merge_json_log true preserve_json_log false </filter> <match kubernetes.application.**> type elasticsearch host es-proxy port 9200 include_tag_key true logstash_format true logstash_prefix application- reload_on_failure true </match> 1. 2. 3.
  • 35. Logging setup AWS Elasticsearch Cluster fluentd aws-signing-proxy
  • 36. What do we think of it? Very easy to use Set up is easy! Works great with Kubernetes Awesome plugin for adding Kubernetes metadata - making it easy to identify pods etc. Run as a daemonset Easy to run in every node of the cluster as a daemonset
  • 39. What does it do? Multi-dimensional data model Time series identified by metric name and key/value pairs Flexible query language Comes with a builtin query language for al kinds of operations, sums, averages, increase, rate, etc. Easy and simple Easy to setup, and works great with Kubernetes service discovery Alerting and great integration with Grafana Prometheus has a builtin alerting system, and Grafana provides easy integration for making metrics visible in dashboards Pull-based approach Prometheus scrapes it’s targets at a regular interval
  • 40. What metrics are we collecting? Kubernetes specific metrics Pods running, health of Kubernetes system components, etc. RabbitMQ Activity in queues, unacknowledged messages Nodes CPU, Memory Traffic Incoming traffic, upstream latency in cluster, etc. Containers CPU, Memory Application Specific metrics Relevant metrics, instrumented by the services owners
  • 41. DEMO
  • 42. What do we think of it? Provides great insights Provides valuable insights in the state of the cluster Makes is easy to developers to instrument their services We provide a simple package for instrumentation, making squads able to do their own monitoring. YOU BUILT IT, YOU RUN IT! Grafana integrations is sweet! Grafana and Prometheus works well together, making Grafana the interface for building dashboards and alerts Kubernetes <3 Prometheus The only thing a service owner has to do in the cluster to make Prometheus scrape their services is to add: annotations: prometheus.io/scrape: 'true'
  • 43. gRPC Service to service communication with
  • 45. What do we use it for? It will be our default choice for synchronous calls Synchronous service to service communication will be aligned on gRPC Internal support system will use it to fetch data from our services Our internal support system needs information from different services on demand, the service will use gRPC to fetch the data service 4 service 3 service 1 service 2 Support
  • 46. Why gRPC? Simple service definition using Protocol buffers Simpler request handling, no need for serialization and deserialization Binary protocol Less overhead in communication. Works across multiple languages and platforms gRPC has a widespread support for multiple languages, making it a perfect fit in our current polyglot architecture Works great with go and the rest of the ecosystem Docker, Kubernetes uses gRPC as long with Go. It’s a natural extension for service to service communication. Based on many years of Google experience!
  • 48. Are we there yet? YES! and no.. We deploy multiple times a day Deployment is autonomous, squads can deploy to production as they please. We can easily scale to larger demands, if necessary Scaling our infrastructure is easy HOWEVER, doing microservices are complex! We still need to implement better tracing, using the CNCF project OpenTracing and Zipkin We need more insights and smarter routing in our service to service communication, we will be using linkerd. We can tolerate AZ failures to some extend Our services are spread across availability zones
  • 49. DO YOU HAVE ANY QUESTIONS? Last thing
  • 50. Thank you for listening! That was it for me! If you wanna know more, send me a message in the Cloud Native DK Slack Community. Remember to sign up at: https://cloudnative-dk.herokuapp.com/ Catch me on Twitter @phennex I will be speaking again:
 • CoDe:U - Continuous Delivery Users Århus (June 20th in INCUBA, Åbogade 15, Aarhus N) • Link: https://www.meetup.com/CoDe-U-AROS/events/239847862/ 
 • GOTOCon Copenhagen - October 1st • Link: https://gotocph.com/2017/sessions/237