service discovery in osgi: beyond the jvm using docker and consul

30
Service Discovery in OSGi Beyond the JVM using Docker and Consul

Upload: frank-lyaruu

Post on 06-Aug-2015

215 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Service Discovery in OSGi

Beyond the JVM using Docker and Consul

Page 2: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

About me

CTO @ Dexels

Architect at Sendrato Wearables

OSGi tinkerer

NoSQL advocate

Page 3: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Service Discovery

• As old as distributed systems

• Find system components

• Prevent hard-coding network addresses

• Important for micro service architectures

Page 4: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Service Discovery

• Finding services by exploring systems

• Use a well-known central registry where every service registers

Page 5: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Service Repository

• Watch out for a single point of failure

• Distributed key-value stores

• Low volume

• Resilience and availability are most important

Page 6: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Service Discovery (SOA)

• Can change providers at will

• Access to many 3rd party services

• Services go shopping for other services

• Services can respond to ‘markets’

Page 7: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker containers

• Light-weight virtual machine

• Process with a filesystem and a network

• Universal, polyglot application deployment mechanism

• DockerHub image store

Page 8: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Mini demo

Page 9: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker from a service perspective

• An image

• An id

• Exposed ports

• ENV variables (& labels since Docker 1.6)

Page 10: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker

• Makes reasoning about services much easier

Page 11: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker

• Restful HTTP daemon on each host

• CLI tools use the HTTP interface to the daemon

Page 12: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Service discovery

So how do we ‘discover’ these services?

We ask the Docker daemon

Page 13: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

What’s missing?

HostIp: 192.168.59.103

HostPort: 49212

ContainerPort: 3306

Protocol: TCP

… we need more metadata

Page 14: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Metadata• Which service is this (name, tags)

• What protocol? How do I consume the service?

We can add them as environment parameters

Page 15: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Monitor the Docker Daemon

• Completely generic

• No need for a registry

• Only require a few ‘annotations’

Page 16: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

This was the easy part

Page 17: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Dynamic Services

• Any service can just appear

• Multiple instances can appear

• Instances can disappear without warning

• Service cascades

Page 18: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

OSGi

• Java based dynamic service framework

• Since 1999

• Initially for embedded systems

• Now very popular in cloud deployments

Page 19: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

OSGi• Central ‘Service Bus’

• Any Java object can be registered as a service

• Code can redeploy on the fly

• Services can come and go dynamically

• Services can depend on other services

Page 20: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker & OSGi

• Monitor the Docker daemon

• Inject into OSGi

Page 21: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker & OSGi

• Mismatch between Java objects and Docker connection data

• The Docker ‘monitor’ won’t know what a service is really about

Page 22: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Configuration Admin

• Create Configuration objects based on docker data

• Leave the actual interpretation to ‘driver bundles’

Page 23: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Docker

Container

Container

OSGi Environment

Config

Config

Bridge

Factory

Instance

Instance

Page 24: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Another demo!

Page 25: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Limitations

• Single host*

• Docker API Security

• Scalability

Page 26: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Consul• Distributed Key/Value configuration store

• Like Etcd or Zookeeper

• Very robust for node failure

• But specifically built for Service Discovery

• Nice web UI

Page 27: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

ConsulDocker

Container

ContainerContainer

OSGi Environment

Config

ConfigConfig

Consul Bridge

Consul Cluster

Node

NodeNode

Host Bridge

Page 28: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Final demo!

Page 29: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Future work

• Conventions on metadata would be nice

• Better security model for Docker

• Use other sources of configuration like Kubernetes

Page 30: Service Discovery in OSGi: Beyond the JVM using Docker and Consul

Thank [email protected]

Twitter @lyaruu

Tasman: https://github.com/flyaruu/tasman

Blog: http://www.codemonkey.nl/