<commit_before># 1.0 Brief Introduction to Xenon

## 1.1 Xenon Highlights
Xenon is a framework for writing small REST-based services. (Some people call them microservices.)
The runtime is implemented in Java and acts as the host for the lightweight, asynchronous
services. The programming model is language agnostic (does not rely on Java specific constructs)
so implementations in other languages are encouraged. The services can run on a set of
distributed nodes. Xenon provides replication, synchronization, ordering, and consistency for the state
of the services. Because of the distributed nature of Xenon, the services scale
well and are highly available.

Xenon is a "batteries included" framework. Unlike some frameworks that provide
just consistent data replication or just a microservice framework, Xenon provides
both. Xenon services have REST-based APIs and are backed by a consistent, replicated
document store.

Each service has less than 500 bytes
of overhead and can be paused/resumed, making Xenon able to host millions of
service instances even on a memory constrained environment.

Service authors annotate their services with various service options, acting
as requirements on the runtime, and the framework implements the appropriate
algorithms to enforce them. The runtime exposes each service with a URI
and provides utility services per instance, for stats, reflection, subscriptions and configuration.
A built-in load balancer routes client requests between nodes, according to service options and
plug-able node selection algorithms. Xenon supports multiple, independent node groups, maintaining
node group state using a scalable gossip scheme.

A powerful index service, invoked as part of the I/O pipeline for persisted services, provides a
multi version document store with a rich query language.

High availability and scale-out is enabled through the use of a consensus and replication
algorithm and is also integrated in the I/O processing.

## 1.2 What can Xenon be used for?

The lightweight runtime enables the creation of highly available and scalable applications in the
form of cooperating light weight services. The operation model for a cluster of Xenon nodes is the
same for both on premise, and service deployments.

The [photon controller](https://vmware.github.io/photon-controller) project makes heavy use of Xenon
to build a scalable and highly available Infrastructure-as-a-Service fabric, composed of stateful
services, responsible for configuration (desired state), work flows (finite state machine tasks),
grooming and scheduling logic. Xenon is also used by several teams building new products, services
and features, within VMware.

## 1.3 Learning More
For a more detailed description of Xenon, keep reading this document.

For more technical details including tutorials, please refer to the
[wiki](https://github.com/vmware/xenon/wiki).

Various code samples are in the xenon-samples directory.

# 2.0 Detailed Introduction to Xenon

Xenon is a framework for writing small REST-based services. (Some people call them microservices.)
It supports a long list of features, but let’s step back a moment and take it a step at a time.

## 2.1 What is a Xenon service?
There are multiple definitions of "services", so let's define what we mean by a Xenon service.
(For now, we’ll assume we’re talking about Xenon running on a single host--we'll get to
using multiple hosts in a moment.)

A single Xenon service implements a REST-based API for a single URI endpoint.
For example, you might have a service running on:

```
https://myhost.example.com/example/service
```

You have a lot of choices in how you implement the service, but a few things are true:

1. The service can support any of the standard REST operations: GET, POST, PUT,
PATCH, DELETE<commit_msg>added pivotal tracker link to readme.md<commit_after># 1.0 Brief Introduction to Xenon

## 1.1 Xenon Highlights
Xenon is a framework for writing small REST-based services. (Some people call them microservices.)
The runtime is implemented in Java and acts as the host for the lightweight, asynchronous
services. The programming model is language agnostic (does not rely on Java specific constructs)
so implementations in other languages are encouraged. The services can run on a set of
distributed nodes. Xenon provides replication, synchronization, ordering, and consistency for the state
of the services. Because of the distributed nature of Xenon, the services scale
well and are highly available.

Xenon is a "batteries included" framework. Unlike some frameworks that provide
just consistent data replication or just a microservice framework, Xenon provides
both. Xenon services have REST-based APIs and are backed by a consistent, replicated
document store.

Each service has less than 500 bytes
of overhead and can be paused/resumed, making Xenon able to host millions of
service instances even on a memory constrained environment.

Service authors annotate their services with various service options, acting
as requirements on the runtime, and the framework implements the appropriate
algorithms to enforce them. The runtime exposes each service with a URI
and provides utility services per instance, for stats, reflection, subscriptions and configuration.
A built-in load balancer routes client requests between nodes, according to service options and
plug-able node selection algorithms. Xenon supports multiple, independent node groups, maintaining
node group state using a scalable gossip scheme.

A powerful index service, invoked as part of the I/O pipeline for persisted services, provides a
multi version document store with a rich query language.

High availability and scale-out is enabled through the use of a consensus and replication
algorithm and is also integrated in the I/O processing.

## 1.2 What can Xenon be used for?

The lightweight runtime enables the creation of highly available and scalable applications in the
form of cooperating light weight services. The operation model for a cluster of Xenon nodes is the
same for both on premise, and service deployments.

The [photon controller](https://vmware.github.io/photon-controller) project makes heavy use of Xenon
to build a scalable and highly available Infrastructure-as-a-Service fabric, composed of stateful
services, responsible for configuration (desired state), work flows (finite state machine tasks),
grooming and scheduling logic. Xenon is also used by several teams building new products, services
and features, within VMware.

## 1.3 Learning More
For a more detailed description of Xenon, keep reading this document.

For more technical details including tutorials, please refer to the
[wiki](https://github.com/vmware/xenon/wiki).

Various code samples are in the xenon-samples directory.

## 1.4 Reporting Issues
Xenon uses a public pivotal tracker project for tracking and reporting issues: https://www.pivotaltracker.com/n/projects/1471320

# 2.0 Detailed Introduction to Xenon

Xenon is a framework for writing small REST-based services. (Some people call them microservices.)
It supports a long list of features, but let’s step back a moment and take it a step at a time.

## 2.1 What is a Xenon service?
There are multiple definitions of "services", so let's define what we mean by a Xenon service.
(For now, we’ll assume we’re talking about Xenon running on a single host--we'll get to
using multiple hosts in a moment.)

A single Xenon service implements a REST-based API for a single URI endpoint.
For example, you might have a service running on:

```
https://myhost.example.com/example/service
```

You have a lot of choices in how you implement the service, but a few things are true:

1. The service can support any of the standard REST operations: GET, POST, PUT,
PATCH, DELETE
{'fraction_non_alphanumeric': 0.043472685303924084, 'fraction_numerical': 0.005257758399589639, 'mean_word_length': 4.807148175725986, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 7, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '847259', 'n_tokens_mistral': 1943, 'n_tokens_neox': 1791, 'n_words': 1138}