Cocaine (Configurable Omnipotent Custom Applications Integrated Network Engine) は、Bluemix、Google App Engine、Herokuに似たカスタムクラウドホスティングアプリを作成するためのオープンソースのPaaSシステムでした。ユーザーの地域や言語を検出するサービス、 MongoDBストレージにアクセスするサービス、URLフェッチャーなど、いくつかのサービスが既にこの方法で実装されています。[ 1 ]
Cocaine のオリジナル開発者である Andrey Sibiryov は、別のクラウド PaaS であるHerokuからアイデアを得ました。当時、Heroku はRubyで開発されたアプリケーションのみをサポートしていました。[ 2 ] [ 3 ] Heroku を使用すると、開発者は Ruby アプリケーションを作成してクラウドにプッシュすることができ、インフラストラクチャと負荷分散の問題は Heroku が処理します。Sibiryov は Heroku のドキュメントに満足せず、独自の PaaS システムを作成することにしました。
当初、CocaineはSibiryovの個人的なプロジェクトでした。しかし、Yandexが毎秒数百万件のリクエスト(RPS)に対応できるスケーラブルなプラットフォームを社内で必要としていることに気づいたことで状況は変わりました。Cocaineは一定期間、Yandexのインフラストラクチャで使用されました。[ 4 ]
クラウドは、Cocaineサーバー(Cocained)がインストールされた1台以上の独立したマシンで構成されています。ユーザーはアクセスしているサービスの場所を知る必要はありません。ロードバランサーのアドレスとアプリ名のみがユーザーに提供されます。ユーザーからのリクエストはロードバランサーに送信され、ロードバランサーはそれをクラウドに転送します。クラウドでは、各リクエストに対して最適なマシンが選択され、リクエストが実行されます。インフラストラクチャの詳細やアプリの環境設定も開発者には隠されています。開発者はコードをクラウドに送信し、コードを実行するための特別なマニフェストを作成するだけで済みます。データベース、キーバリューストア、HTTPクライアントなど、その他の設定は不要です。これらの設定は、プログラマーの視点から見ると、コードが記述されているプログラミング言語のネイティブモジュールであるサービスによって行われます。たとえば、StorageサービスではユーザーがEllipticsストレージにアクセスでき、UatraitsサービスはクライアントのユーザーエージェントとHTTPヘッダーに関するデータを使用して、リクエストを送信したデバイスの特性を判断します。
クラウドでは、アプリケーションはさまざまなプログラミング言語(C、C++、Go、JavaScript、Python、Rubyなど)やフレームワーク(Node.jsなど)で記述できます。Webサーバーに接続されたCocaineは、Webアプリケーション向けに自動的にスケーラブルなデプロイ環境を提供します。クラウドは、合理化されたインターフェースを通じて大量のデータを管理します。Cocaineは、耐障害性を備えた信頼性の高い高性能メッセージ送信を保証します。そのロードバランサーは、応答性の高いユーザー中心のシステムを実現します。クラウドアプリケーションは独立して実行され、複数のバージョンをサポートし、ユーザーは更新されたバージョンにスムーズに移行できます。さらに、アプリケーションは隔離されたクラウド環境でテストされるため、エラーが物理システムや他のアプリケーションに影響を与えることを防ぎます。