Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Microservices with OSGi - D Fauth

138 views

Published on

OSGi Community Event 2017 Presentation by D Fauth [Bosch]

OSGi declarative services exist for a long time and are used to implement a modular service-oriented architecture. Because of the supported dynamics, the easy way to define, register and consume services, declarative services can be found in various scenarios. Using several of the long time existing specifications like Declarative Service, ConfigurationAdmin, EventAdmin and Remote Service Admin, it is also easy to setup the currently hyped micro services by using OSGi declarative services.

In this session we will give an introduction to OSGi Remote Services and the Remote Service Admin. We will explain the basic components in these specs and how they play together. And we will set up a small example to show in code how easy it is making OSGi services available as microservices using an OSGi framework, Remote Service Admin implementations like ECF and toolings like Bndtools or PDE.
We will show examples in a way that both Eclipse RCP and plain OSGi developers can benefit. So the required steps will be shown in PDE and Bndtools in parallel. The main focus is to understand how microservices can be created using OSGi standards. The tooling shouldn't be the limiting factor.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Microservices with OSGi - D Fauth

  1. 1. MICROSERVICES WITH OSGI
  2. 2. Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 2 Microservices with OSGi Speaker Dirk Fauth Software-Architect Rich Client Systeme Eclipse Committer Robert Bosch GmbH Franz-Oechsle-Straße 4 73207 Plochingen dirk.fauth@de.bosch.com www.bosch.com blog.vogella.com/author/fipro/ Twitter: fipro78
  3. 3. Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 3 Microservices with OSGi Speaker Peter Kirschner Developer, Architect, Build and Release Engineer OSS, OSGi & Eclipse Enthusiast Kirschners GmbH Löchgauer Straße 57 74321 Bietigheim-Bissingen peter@kirschners.de GitHub: peterkir.github.io Twitter: peterkir
  4. 4. MOTIVATION
  5. 5. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 5 Motivation  Microservices are one of the current hype topics  A lot of people are actually doing microservices with different approaches  OSGi has a mature service design  OSGi Core R6 – Chapter 5 Service Layer  OSGi Compendium R6 – Chapter 112 Declarative Services  OSGi has specifications for remote services  OSGi Compendium R6 – Chapter 100 Remote Services  OSGi Compendium R6 – Chapter 122 Remote Service Admin Service  There are several talks about OSGi, microservices and remote services  But mostly about architecture, cool demos but little about the technical details
  6. 6. OVERVIEW
  7. 7. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 7 Publish-Find-Bind  Bundles register (publish) services  Bundles get (bind) services  Bundles listen (find) services A BS register (publish) get (bind) listen (find) <<bundle>> <<bundle>><<service>>
  8. 8. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 8 Publish-Find-Bind - Remote A S register (publish) <<bundle>> <<service>> A S register (publish) <<bundle>> <<service>> A S register (publish) <<bundle>> <<service>> A S register (publish) <<bundle>> <<service>> B get (bind) listen (find) <<bundle>> S B get (bind) listen (find) <<bundle>> S B get (bind) listen (find) <<bundle>> S B get (bind) listen (find) <<bundle>> S
  9. 9. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 9 Remote Services OSGi Compendium Specification R6 – Figure 100.1 Architecture
  10. 10. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 10 Terminology  Remote Service (aka Distributed Service)  OSGi service that is available across container boundaries  Distribution Provider  Exports services by creating endpoints  Imports services by creating proxies to access endpoints  Manage policies around the topology  Discover remote services  Endpoint  Communication access mechanism to a remote service that requires some protocol for communications  Topology  Mapping between services and endpoints as well as their communication characteristics
  11. 11. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 11 Remote Service Admin OSGi Compendium Specification R6 – Figure 122.1 Remote Service Admin Entities
  12. 12. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 12 Terminology  Remote Service Admin Passive Distribution Provider providing the mechanism but actually does not export or import services itself  Topology Manager Provides the policy for importing and exporting services via RSA Implements a topology by using the RSA  Discovery Discover / announce Endpoint Descriptions via some discovery protocol  Endpoint Description Describes an Endpoint via configuration type (name and set of properties)
  13. 13. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 13 Remote Service Admin – Export Simplified Service Producer Discovery Topology Manager Remote Service Admin informsinstructs Remote Service Implementation endpoint created by RSA announced by Discovery
  14. 14. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 14 Remote Service Admin – Import Simplified Service Consumer Discovery Topology Manager Remote Service Admin learns from instructs Remote Service Implementation endpoint discovered by Discovery proxied by RSA
  15. 15. IMPLEMENTATION
  16. 16. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 16 Remote Service Implementation @Component(property= { "service.exported.interfaces=*", "service.exported.configs=ecf.generic.server" }) public class UppercaseModifier implements StringModifier { @Override public String modify(String input) { return input.toUpperCase(Locale.getDefault()); } } @Component(property= { "service.exported.interfaces=*", "service.exported.configs=ecf.generic.server" }) public class UppercaseModifier implements StringModifier { @Override public String modify(String input) { return input.toUpperCase(Locale.getDefault()); } }
  17. 17. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 17 Remote Service Properties  service.exported.interfaces=* Required property to mark a service for export. Specifies which service interfaces should be exported. Using the wildcard it says that all the interfaces that are registered should be exported.  service.exported.configs The configuration types that should be used to export a service. Each configuration type (endpoint type) represents the configuration parameters for endpoints. For example:  ECF Generic Provider = ecf.generic.server  CXF DOSGi provider RS = org.apache.cxf.rs https://wiki.eclipse.org/Distribution_Providers https://github.com/apache/cxf-dosgi
  18. 18. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 18 Implementations  Eclipse Communication Framework https://www.eclipse.org/ecf/  Apache Aries Remote Service Admin http://aries.apache.org/modules/rsa.html  Amdatu https://amdatu.org/application/remote/  Paremus RSA https://docs.paremus.com/display/SF113/Remote+Service+implementation  Apache CXF Distributed OSGi (distribution providers for Aries RSA) http://cxf.apache.org/distributed-osgi.html
  19. 19. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 19 Required Bundles – Equinox OSGi Application Bundle-SymbolicName Bundle-Name org.fipro.modifier.api Application Bundles org.fipro.modifier.uppercase org.apache.felix.gogo.command OSGi Console org.apache.felix.gogo.runtime org.apache.felix.gogo.shell org.eclipse.equinox.console org.eclipse.osgi Equinox OSGi System Bundle org.eclipse.osgi.services Equinox OSGi Service Interfaces org.eclipse.equinox.common Common Eclipse Runtime org.eclipse.equinox.event Event Admin org.eclipse.equinox.util Equinox Util Bundle org.apache.felix.scr Apache Felix Declarative Services org.eclipse.osgi.util OSGi Utility Classes
  20. 20. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 20 Required Bundles – ECF with Generic Provider Bundle-SymbolicName Bundle-Name org.eclipse.core.jobs Eclipse Jobs Mechanism org.eclipse.equinox.concurrent Equinox Concurrent API org.eclipse.ecf ECF Core Bundle org.eclipse.ecf.discovery ECF Discovery API Bundle org.eclipse.ecf.identity ECF Identity Bundle org.eclipse.ecf.osgi.services.distribution ECF RSA Basic Topology Manager org.eclipse.ecf.osgi.services.remoteserviceadmin ECF RSA Implementation org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy ECF RSA Proxy org.eclipse.ecf.provider ECF Generic Provider org.eclipse.ecf.provider.jmdns ECF Discovery Zeroconf/JMDNS Provider org.eclipse.ecf.provider.remoteservice ECF Generic Provider RemoteServices Support org.eclipse.ecf.remoteservice ECF RemoteServices API org.eclipse.ecf.remoteservice.asyncproxy ECF RemoteServices AsyncProxy API org.eclipse.ecf.sharedobject ECF SharedObject API org.eclipse.osgi.services.remoteserviceadmin OSGi RSA API Bundle-SymbolicName Bundle-Name org.eclipse.core.jobs Eclipse Jobs Mechanism org.eclipse.equinox.concurrent Equinox Concurrent API org.eclipse.ecf ECF Core Bundle org.eclipse.ecf.discovery ECF Discovery API Bundle org.eclipse.ecf.identity ECF Identity Bundle org.eclipse.ecf.osgi.services.distribution ECF RSA Basic Topology Manager org.eclipse.ecf.osgi.services.remoteserviceadmin ECF RSA Implementation org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy ECF RSA Proxy org.eclipse.ecf.provider ECF Generic Provider org.eclipse.ecf.provider.jmdns ECF Discovery Zeroconf/JMDNS Provider org.eclipse.ecf.provider.remoteservice ECF Generic Provider RemoteServices Support org.eclipse.ecf.remoteservice ECF RemoteServices API org.eclipse.ecf.remoteservice.asyncproxy ECF RemoteServices AsyncProxy API org.eclipse.ecf.sharedobject ECF SharedObject API org.eclipse.osgi.services.remoteserviceadmin OSGi RSA API
  21. 21. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 21  Discovery  Zeroconf/aka Bonjour/Rendevous (JmDNS) org.eclipse.ecf.provider.jmdns  jSLP aka SLP/RFC2608 org.eclipse.ecf.provider.jslp  Distribution Provider  Generic Provider org.eclipse.ecf.provider org.eclipse.ecf.provider.remoteservice  r-OSGi Provider org.eclipse.ecf.provider.r_osgi ch.ethz.iks.r_osgi.remote  Apache CXF Jax-RS Implementation org.eclipse.ecf.provider.cxf.server org.eclipse.ecf.provider.jaxrs.server org.eclipse.ecf.provider.jaxrs  … ECF – Providers https://wiki.eclipse.org/Distribution_Providers https://github.com/apache/cxf-dosgi
  22. 22. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 22 Troubleshooting with Equinox  Bundles that need to auto-started  org.eclipse.osgi  org.apache.felix.scr  org.eclipse.equinox.event  org.eclipse.ecf.osgi.services.distribution  org.eclipse.ecf.provider.jmdns  org.eclipse.ecf.provider.remoteservice  On the producer side when using a product file additional bundles needed  org.eclipse.equinox.app  org.eclipse.equinox.registry  On the consumer side  Eclipse RCP and @Service: configure the service interface bundles for a lower start level than the default  Eclipse RCP with low level OSGi API: ensure the bundle is started (UI bundles are typically not started)
  23. 23. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 23  Simple at service implementation  Complicated at runtime definition  Even more complicated on DevOps side  Fallacies of Distributed Computing https://de.wikipedia.org/wiki/Fallacies_of_Distributed_Computing  Service interface evolution  …  Developer specifies topology via service property, not the administrator Conclusion
  24. 24. DEMO
  25. 25. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 25 Demo Setup Consumer with local service PC Service Producer PC Service Producer Raspberry Pi Service Producer
  26. 26. REFERENCES
  27. 27. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 27  Neil Bartlett - Scaling and Orchestrating Microservices with OSGi https://de.slideshare.net/mfrancis/scaling-and-orchestrating- microservices-with-osgi-n-bartlett  Achim Nierbeck – Microservices and OSGi – running with Apache Karaf https://de.slideshare.net/AchimNierbeck/microservices- osgirunningwithapachekaraf  Christian Schneider – Lean microservices on OSGi https://de.slideshare.net/ChristianSchneider3/lean-microservices-on-osgi  Graham Charters - Microservices & OSGi - Better Together? https://de.slideshare.net/mfrancis/microservices-osgi-better-together- graham-charters References
  28. 28. Microservices with OSGi Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 28 References  Wim Jongman - How to cook an egg with the Eclipse Communication Framework http://www.eclipsecon.org/europe2014/sites/default/files/slides/How%20to %20Cook%20an%20Egg%20with%20the%20Eclipse%20Communication %20Framework.pdf  Christoph Keimel – Powering a Live Escape Game with ECF & e(fx)clipse https://de.slideshare.net/keimel/powering-a-live-escape-game-with-ecf- and-efxclipse
  29. 29. OSGi Remote Services Automotive Service Solutions | AA-AS/EIS2-EU | 24.10.2017 © Robert Bosch GmbH 2017. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 29 Evaluate the Sessions Sign in and vote at eclipsecon.org - 1 + 10

×