OSGi as a distributed operating system application manager

I was looking into a few components that I would need to implement some distributed processing. Akka for scala  has a small microkernel that runs on a node that you want to run a remote akka actor on. Communication with the remote actor is transparent. Similarly, hadoop has its process framework that runs on nodes that helps with job control, resource management, etc. (the naming and data nodes).

So essentially, all distributed software has some sort of manager that runs on a node. That process may run constantly, or it may only start up when the job starts that runs distributed. The manager helps with starting and stopping processes, arranging for resources to be available and other such . Some more layers are needed of course to handle distributed processing, such as synchronization and coordination primitives that operate across nodes.

If you think about OSGi, it allows programs to dynamically start and stop. It allows programs to share services. Its alot like the .NET AppDomain concept on Windows which is essentially a single JVM-like concept that runs all the .NET code (unlike the stardard java JVM where each process runs independently). OSGi is mostly about a per-instance management application.

So if you think of OSGi as a node in a distributed OS that *could* provide you services such as filesystem, resources and process control, then you can think of OSGi as the "microkernel" for your distribution application. You'll need to layer on some coordination software, but it seems like OSGi would be a good choice for your distribution application that requires a durable manager process running on a remote node.

Perhaps adding zookeeper and OSGi together gives you a ready-made microkernel for your new distributed application.  Check out virgo from eclipse or karaf from apache.

Popular posts from this blog

graphql (facebook), falcor (netflix) and odata and ...

React, Redux, Recompose and some simple steps to remove "some" boilerplate and improve reuse

Using wye and tee with scalaz-stream