ACCESSIBLE
MICROSERVICES

Armagan Amcalar

DevOps Pro Moscow
November 15th, 2017

Agenda

  • 30 min Intro to microservices
  • 30 min Microservices demo with cote
  • 1 hour Application design
  • 2.5 hours Services development
  • 30 min Account set up
  • 1 hour Services deployment

Who am I?

Armagan Amcalar
Head of Software Engineering @ unu GmbH
Founder @ Lonca Works

        dashersw            dashersw

AUTHORED ON GITHUB

Outline

Microservices overview

An example e-commerce application

Properties of a modern microservices approach

Brief intro to a Node.js microservice

How Docker helps

Demo

dashersw

What is not a microservice?

Async operations with queue (and other) systems

Having 50 different queue consumers (for notifications, logging, reconciliation services, e-mailing etc) doesn’t mean you have 50 microservices

 

Multiple programs running on a single machine and communicating over HTTP

dashersw

What is a Microservice?

dashersw

If you are breaking down the fulfillment of a client request into multiple collaborating services that run in their own memory space, then you are doing microservices.

 

THE BASELINE

Microservices

The quality of your approach depends on how well you apply Domain Driven Design and other best practices.

 

You have to —

Embrace change

Give autonomy to teams, to services

Automate testing, configuration, deployment, monitoring and more

Favor cattle over pets

dashersw

An example e-commerce app

dashersw

Auto-discovery

dashersw

Auto-discovery

dashersw

Zero-configuration

dashersw

Highly-redundant

dashersw

Fault-tolerant

dashersw

Self-healing

dashersw

An example in Node.js

const cote = require('cote'),
    models = require('./models');

const userResponder = new cote.Responder({ name: 'user responder' });

userResponder.on('list', req => models.User.find(req.query));
userResponder.on('get', req => models.User.get(req.id));
userResponder.on('create', req => models.User.create(req.user));
const cote = require('cote'),
    router = express.Router();

const userRequester = new cote.Requester({ name: 'user requester' });

router.get('/users/:id', (req, res, next) => {
    userRequester.send({type: 'get', id: req.params.id})
        .then(user => res.send(user))
        .catch(next);
});

router.get('/users', (req, res, next) => {
    userRequester.send({type: 'list'})
        .then(users => res.send(users))
        .catch(next);
});

module.exports = router;
  • Zero dependency: Microservices with only Node.js
  • Zero-configuration: no IP addresses, ports or routing to manage
  • Decentralized: No fixed parts, no "manager" nodes, no single point of failure
  • Auto-discovery: Discovery without a central bookkeeper
  • Fault-tolerant: Don't lose any requests when a service is down
  • Scalable: Horizontally scale to any number of machines
  • Performant: Process thousands of messages per second
  • Humanized API: Simple to get started with a reasonable API

dashersw

Demo time!

npm install cote​

Create an empty Node.js project and...

How does Docker help?

Immutable environment
Overlay network
Auto-restart on failure
Docker Swarm — orchestration capabilities, scaling, rollbacks, secrets management, highly-available

dashersw

Docker Cloud

Automated server cluster management with AWS, DigitalOcean, etc. and BYOD

Automated builds from GitHub or Bitbucket repos

Automated testing to Docker Hub

Service and stacks similar to docker-compose

Slack notifications!

Scaling containers / nodes

Terminal access

Security scans

dashersw

Another demo time!

dashersw

Example projects

  • Account
  • User
  • Driver
  • Admin
  • Ride
  • Booking
  • Navigation
  • Invoice
  • Payment
  • Pricing

Taxi hailing

Example projects

  • Account
  • User
  • Marketplace
  • Admin
  • Purchase
  • Payment
  • Catalog
  • Stock
  • Invoice
  • Recommendations

E-commerce

Example projects

  • Account
  • User
  • Feed
  • Like
  • Notification
  • Recommendations
  • Topics
  • Follow
  • Ad
  • InterestingFeedItems

Social Network

thank you!

Join cote.js community

Let's keep in touch!

Armagan Amcalar
  dashersw

Next Generation Microservices with cote

By Armağan Amcalar

Next Generation Microservices with cote

The concept of microservices is a hot one and it attracts developers from a diverse background. Unfortunately, we’re seeing a lot of ideas from the past rebranded in the present as microservices. However, the thinking behind microservices implies and promises a bigger change than what we are seeing. This talk will go over the details of what actually makes a microservices architecture and how other distributed systems – systems which rely on queues and other mechanisms to function – fail to fulfill the promise. A modern microservices implementation should have the following characteristics: * Zero-configuration * Highly-redundant * Fault-tolerant * Self-healing * Auto-discovery This talk will present how such a system can be realised using Node.js and Docker.

  • 1,956