Cocaine (PaaS)

Cocaine (Configurable Omnipotent Custom Applications Integrated Network Engine) is an open source PaaS system for creating custom cloud hosting apps that are similar to Google App Engine or Heroku.

Any library or service can be implemented as a service in Cocaine using a special API. Several indispensable services have already been implemented this way, including a service for detecting a user's region or language, a service for accessing MongoDB storage, and a URL fetcher.[1]

Cocaine
Developer(s) Andrey Sibiryov and Yandex team
Initial release March 20, 2011
Development status Released
Written in C++
Type Web development
Website github.com/cocaine

History

In times when cloud technologies were not yet popular, Andrey Sibiryov, the project founder, discovered Heroku. At that time Heroku was an app engine supporting only Ruby but the idea was somewhat revolutionary.[2] It was possible to create a Ruby app, push it to the cloud and not have to pay attention to any infrastructure problems. Load balancing issues were handled by the platform as well.

The idea was great but it was hard to find any description of how it worked, which became a reason to start yet another open source cloud app engine project. The same logic was followed by many developers, which led to many cloud project start ups.

Initially Cocaine was a developer's pet project. However, everything changed when Yandex discovered an internal need of a scalable platform which could cope with millions of RPS. Cocaine served best for these purposes. Now, Cocaine is used in the Yandex infrastructure.[3]

Architecture

The cloud is made up of one or more independent machines that have the Cocaine server (Cocained) installed. Users know nothing about the location of the services they are accessing—only the address of the load balancer and the app name are available to them. User requests are sent to the load balancer, which passes them to the cloud. In the cloud, the optimal machine is selected for each request, and then the request is executed. The infrastructure details and the app's environment settings are hidden from the developer, as well. The developer only needs to send the code to the cloud and write a special manifest for executing the code. It is not necessary to set up anything else, such as databases, key-value stores, or HTTP clients. There are services that do this, which from the programmer's point of view are native modules for the programming language the code is written in. For example, the Storage service lets users access Elliptics storage, and the Uatraits service uses data about a client's user agent and its HTTP headers to determine the characteristics of the device that sent the request.

App isolation

Docker project was chosen as a technology for infrastructure virtualization and app isolation. Docker is an open source technology that provides an easy and effective way to create lightweight, portable and self-sufficient containers from any app.[4] Once created, such containers can run in virtually any environment, from the developer's and tester's laptops to production clusters with thousands of nodes. The Docker technology is based on the well-known Linux Containers (LXC),[5] which, by themselves, only provide the ability to start apps in an isolated environment, due to the use of namespaces and cgroups. In contrast to full virtualization environments such as Xen and Kernel-based Virtual Machine (KVM), containers share a common kernel and cannot provide device emulation, but their use doesn't incur additional overhead and they start almost instantly. In addition to containerization, Docker provides tools for configuring networks and creating images of apps using a layered filesystem designed to minimize overhead on deployment and distribution of apps.

In Cocaine, Docker support is implemented as a plugin, which connects to the dockerd daemon and controls it using a rich representational state transfer (REST) API.[6]

Applying the technology

In the cloud, apps can be written in various programming languages (C, C++, Go, JavaScript, Python, Ruby, and others) and frameworks (Node.js). Cocaine bound to a web server provides an automatically scalable deployment environment for web apps. The cloud processes large quantities of information, thanks to the streamed data exchange interface. Cocaine implements fault-tolerant and high-performance bus transmission of messages and events. Using the load balancer, user can create systems that are responsive to user actions. Apps in the cloud are run independently of each other. This allows multiple versions support of the same app and "soft migration" set up for moving users to updated versions of products. Apps can be tested in the cloud by in an isolated environment run. This way, program errors will not affect the physical system or other apps.

Documentation

The project description can be found in Cocaine wiki and docs.

See also

References

This article is issued from Wikipedia - version of the 7/5/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.