Skip to content
vasanth-asokan edited this page Feb 6, 2015 · 3 revisions

Introduction

Nicobar is a dynamic scripting framework for Java, powered by a module loading system that uses Java classloaders to isolate modules from one other, as well as to establish interdependencies with. Such a framework adds the ability to inject code dynamically into a JVM, without requiring a JVM restart, and thus is suited for deploying business logic that comes from varied sources, and/or changes unpredictably.

Motivating Use Cases

Nicobar evolved out of API platform work at Netflix, designed to support hundreds of endpoints deployed by diverse UI teams. Each endpoint serves custom UI responses to device specific page rendering needs. UI engineers across various teams have the ability to create, deploy and evolve these endpoints independently. The Netflix API container dynamically loads all these endpoints onto a single JVM using Nicobar module loader technology, thus enabling UI teams to innovate and deploy their endpoints at their own velocities, and decoupled from the Netflix API containers deployments. The following links provide more context around the Netflix API platform, and the benefits of using dynamic scripting technology:

The Netflix Dynamic Scripting Platform
Optimizing the Netflix API

We also found other motivating use cases within Netflix, such as:

  • routing filters in Zuul, the Netflix front door app
  • Viewing history service device blob processing
  • Customer messaging service rule processing

Pluggable modules are also useful in low impact instrumentation and tracing scenarios. Using Nicobar, one could have an instrumented and un-instrumented version of a module, and choose to use the instrumented version when sampling, or debugging, and use the un-instrumented fast version of the module in the happy path.

Goals

Nicobar was created with the following goals in mind

  • To provide a standalone, reusable scripting library that is customizable and extensible for a variety of use cases.
  • Must have the ability to sandbox scripts from one another
  • Must have the ability to express interdependencies between script modules, thus supporting shared script modules
  • Must be polyglot (support multiple JVM scripting languages)

Naming

Nicobar refers to a remote, archipelagic island chain in the Eastern Indian Ocean. It is a UNESCO World Biosphere Reserve, and like many other remote volcanic islands, it has rich biodiversity, and various endemic species are found here. Taken together with the surrounding Andaman group of islands, six different human tribes occupy these islands, each with its own spoken language. We felt that these isolated islands, evolving independently are a good metaphor for the polyglot, modular runtime framework we were setting out to build.