<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Takehirokaneko</id>
		<title>OpenStack - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Takehirokaneko"/>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/wiki/Special:Contributions/Takehirokaneko"/>
		<updated>2026-07-14T07:27:13Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82970</id>
		<title>RACK/Contributing/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82970"/>
				<updated>2015-06-09T07:33:03Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting started =&lt;br /&gt;
はじめに、[http://docs.openstack.org/infra/manual/developers.html Developer's Guide]に目を通しておいてください。&lt;br /&gt;
Developer's Guideには、コントリビューションをするため必要なアカウントのセットアップやContributor License Agreementへの署名の手順、およびコミットのプッシュやコードレビューの方法などが記載されています。&lt;br /&gt;
準備ができたら、次のセクションに進んでください。&lt;br /&gt;
&lt;br /&gt;
= Setting up your git =&lt;br /&gt;
ユーザ名とメールアドレスを設定します。&lt;br /&gt;
  git config --global user.name &amp;quot;Firstname Lastname&amp;quot;&lt;br /&gt;
  git config --global user.email &amp;quot;your_email@youremail.com&amp;quot;&lt;br /&gt;
Gerritユーザ名を設定します。&lt;br /&gt;
  git config --global gitreview.username &amp;quot;your_gerrit_username&amp;quot;&lt;br /&gt;
設定を確認して下さい。&lt;br /&gt;
  git config --list&lt;br /&gt;
&lt;br /&gt;
== Installing git-review ==&lt;br /&gt;
  pip install git-review&lt;br /&gt;
&lt;br /&gt;
= Your first commit =&lt;br /&gt;
== Setting up your local branch ==&lt;br /&gt;
  git clone https://github.com/stackforge/rack.git&lt;br /&gt;
  cd rack&lt;br /&gt;
  git checkout -b [branch name]&lt;br /&gt;
  git review -s&lt;br /&gt;
&amp;quot;git review -s&amp;quot;コマンド実行時にエラーが出力された場合、SSH鍵の登録やライセンスの署名漏れなどが原因として考えられます。&lt;br /&gt;
もう一度[http://docs.openstack.org/infra/manual/developers.html Developer's Guide]を確認して下さい。&lt;br /&gt;
&lt;br /&gt;
branch nameは命名規則があります。&lt;br /&gt;
* blueprintを開発する場合: bp/{blueprint name}&lt;br /&gt;
* bugのパッチを開発する場合: bug/{bug number}&lt;br /&gt;
&lt;br /&gt;
== Make and push your change ==&lt;br /&gt;
パッチを書いたら、Gerritにプッシュします。&lt;br /&gt;
Gitのコミットメッセージを書くときは、[http://docs.openstack.org/infra/manual/developers.html OpenStackのガイドライン]に従うようにしてください。&lt;br /&gt;
以下にいくつか列挙します。&lt;br /&gt;
* コミットメッセージの1行目は50文字以内とする&lt;br /&gt;
* 以降の各行は78文字以内とする&lt;br /&gt;
* ２行目は空白行とする&lt;br /&gt;
* 最終行はblueprintもしくはbugのリンクを記載する&lt;br /&gt;
* 各行の末尾に空白が入らないようにする&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
  Adds a new api&lt;br /&gt;
  &amp;lt;blank line&amp;gt;&lt;br /&gt;
  Long multiline description of the change&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;blank line&amp;gt;&lt;br /&gt;
  Implements: blueprint add-new-api&lt;br /&gt;
  Closes-Bug: #123456&lt;br /&gt;
  Change-Id: I4946a16d27f712ae2adf8441ce78e6c0bb0bb657&lt;br /&gt;
&lt;br /&gt;
Change-Idはgit-reviewによって自動的に付与されます。&lt;br /&gt;
最終行にはパッチの種類に応じて以下を記載します。&lt;br /&gt;
* blueprintに関するパッチの場合: Implements: blueprint [blueprint name]&lt;br /&gt;
* bugに関するパッチの場合&lt;br /&gt;
** このパッチでクローズされる場合: Closes-Bug: #{bug number}&lt;br /&gt;
** このパッチでbugの一部がFixされる場合: Partial-Bug: #{bug number}&lt;br /&gt;
** 単なる関連を示すだけの場合: Related-Bug #{bug number}&lt;br /&gt;
&lt;br /&gt;
そのあと、パッチをプッシュします。&lt;br /&gt;
  git commit -a&lt;br /&gt;
  git review -v&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
= Blueprints =&lt;br /&gt;
OpenStackのBlueprint運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBlueprint運用フローについては [https://wiki.openstack.org/wiki/Blueprints Blueprints] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Blueprints lifecycle ==&lt;br /&gt;
* [https://blueprints.launchpad.net/python-rack Launchpad]にてblueprintを起票します。&lt;br /&gt;
* [https://launchpad.net/~rack-drivers RACK Drivers]のメンバーがPriorityを指定します。&lt;br /&gt;
* 開発を開始したら、Implementationを&amp;quot;Started&amp;quot;に変更します。&lt;br /&gt;
* 開発が完了したら、&amp;quot;Implemented&amp;quot;に変更します。&lt;br /&gt;
&lt;br /&gt;
== Register blueprint ==&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
blueprintを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Name''&lt;br /&gt;
| 他のblueprintと区別できるハイフン付き文字列 (ex. api-to-create-process)&lt;br /&gt;
|-&lt;br /&gt;
| ''Title''&lt;br /&gt;
| このBlueprintで何をするのかを簡潔に説明する文字列 (ex. Create API to create processes)&lt;br /&gt;
|-&lt;br /&gt;
| ''Specification''&lt;br /&gt;
| [https://wiki.openstack.org/wiki Wiki]に[[#Specification|新規ページを作成]]し、そのURLを指定します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| 1～2行でいいので、英語で簡潔な説明を記述してください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Assignee''&lt;br /&gt;
| 空欄で構いません(担当者が決まっていれば入力)&lt;br /&gt;
|-&lt;br /&gt;
| ''Drafter''&lt;br /&gt;
| Blueprintを起票した人の名前が自動で入ります。&lt;br /&gt;
|-&lt;br /&gt;
| ''Approver''&lt;br /&gt;
| 空欄で構いません。&lt;br /&gt;
|-&lt;br /&gt;
| ''Definition Status''&lt;br /&gt;
| ''New''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Propose for sprint''&lt;br /&gt;
| (nothing selected) のままにしてください。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Specification ===&lt;br /&gt;
blueprintの詳細は新規にWikiページを作成し、そこに記述します。&lt;br /&gt;
&lt;br /&gt;
* htps://wiki.openstack.org/wiki/RACK/{機能名}/ja&lt;br /&gt;
&lt;br /&gt;
Specificationは日本語でOKとします。&lt;br /&gt;
フォーマットは自由ですが、他のOpenStackプロジェクトのWikiを参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Bugs =&lt;br /&gt;
OpenStackのBug運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBug運用フローについては [https://wiki.openstack.org/wiki/Bugs Bugs] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Bugs lifecycle ==&lt;br /&gt;
* [https://bugs.launchpad.net/python-rack Launchpad]にてbugを起票します。&lt;br /&gt;
* bugの再現性が確認されたら、[https://launchpad.net/~rack-drivers RACK Drivers]のメンバーはImportanceを決定し、Statusを''Confirmed''に変更します。&lt;br /&gt;
* パッチをGerritにプッシュすると、Statusが''In progress''となり、パッチ投稿者がAssigneeとなります。&lt;br /&gt;
* パッチがマージされると、Gerritにより自動的にStatusが''Fix Commited''に変更されます。&lt;br /&gt;
&lt;br /&gt;
== Register bug ==&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
bugを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| bugの内容を簡潔に記載します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Further information''&lt;br /&gt;
| バグの内容を詳細に記載します。説明が長くなるようであれば、[[#Specification]]と同じようにWikiを作ってリンクを貼ってもいいかもしれません。&lt;br /&gt;
|-&lt;br /&gt;
| ''This bug contains information that is''&lt;br /&gt;
| ''Public''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Extra options''&lt;br /&gt;
| 記載不要です。&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82969</id>
		<title>RACK/Contributing/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82969"/>
				<updated>2015-06-09T06:33:54Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Blueprints =&lt;br /&gt;
OpenStackのBlueprint運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBlueprint運用フローについては [https://wiki.openstack.org/wiki/Blueprints Blueprints] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Blueprints lifecycle ==&lt;br /&gt;
* [https://blueprints.launchpad.net/python-rack Launchpad]にてblueprintを起票します。&lt;br /&gt;
* [https://launchpad.net/~rack-drivers RACK Drivers]のメンバーがPriorityを指定します。&lt;br /&gt;
* 開発を開始したら、Implementationを&amp;quot;Started&amp;quot;に変更します。&lt;br /&gt;
* 開発が完了したら、&amp;quot;Implemented&amp;quot;に変更します。&lt;br /&gt;
&lt;br /&gt;
== Register blueprint ==&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
blueprintを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Name''&lt;br /&gt;
| 他のblueprintと区別できるハイフン付き文字列 (ex. api-to-create-process)&lt;br /&gt;
|-&lt;br /&gt;
| ''Title''&lt;br /&gt;
| このBlueprintで何をするのかを簡潔に説明する文字列 (ex. Create API to create processes)&lt;br /&gt;
|-&lt;br /&gt;
| ''Specification''&lt;br /&gt;
| [https://wiki.openstack.org/wiki Wiki]に[[#Specification|新規ページを作成]]し、そのURLを指定します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| 1～2行でいいので、英語で簡潔な説明を記述してください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Assignee''&lt;br /&gt;
| 空欄で構いません(担当者が決まっていれば入力)&lt;br /&gt;
|-&lt;br /&gt;
| ''Drafter''&lt;br /&gt;
| Blueprintを起票した人の名前が自動で入ります。&lt;br /&gt;
|-&lt;br /&gt;
| ''Approver''&lt;br /&gt;
| 空欄で構いません。&lt;br /&gt;
|-&lt;br /&gt;
| ''Definition Status''&lt;br /&gt;
| ''New''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Propose for sprint''&lt;br /&gt;
| (nothing selected) のままにしてください。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Specification ===&lt;br /&gt;
blueprintの詳細は新規にWikiページを作成し、そこに記述します。&lt;br /&gt;
&lt;br /&gt;
* htps://wiki.openstack.org/wiki/RACK/{機能名}/ja&lt;br /&gt;
&lt;br /&gt;
Specificationは日本語でOKとします。&lt;br /&gt;
フォーマットは自由ですが、他のOpenStackプロジェクトのWikiを参考にしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Bugs =&lt;br /&gt;
OpenStackのBug運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBug運用フローについては [https://wiki.openstack.org/wiki/Bugs Bugs] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Bugs lifecycle ==&lt;br /&gt;
* [https://bugs.launchpad.net/python-rack Launchpad]にてbugを起票します。&lt;br /&gt;
* bugの再現性が確認されたら、[https://launchpad.net/~rack-drivers RACK Drivers]のメンバーはImportanceを決定し、Statusを''Confirmed''に変更します。&lt;br /&gt;
* パッチをGerritにプッシュすると、Statusが''In progress''となり、パッチ投稿者がAssigneeとなります。&lt;br /&gt;
* パッチがマージされると、Gerritにより自動的にStatusが''Fix Commited''に変更されます。&lt;br /&gt;
&lt;br /&gt;
== Register bug ==&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
bugを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| bugの内容を簡潔に記載します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Further information''&lt;br /&gt;
| バグの内容を詳細に記載します。説明が長くなるようであれば、[[#Specification]]と同じようにWikiを作ってリンクを貼ってもいいかもしれません。&lt;br /&gt;
|-&lt;br /&gt;
| ''This bug contains information that is''&lt;br /&gt;
| ''Public''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Extra options''&lt;br /&gt;
| 記載不要です。&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82968</id>
		<title>RACK/Contributing/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82968"/>
				<updated>2015-06-09T06:16:38Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: /* Register blueprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Blueprints =&lt;br /&gt;
OpenStackのBlueprint運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBlueprint運用フローについては [https://wiki.openstack.org/wiki/Blueprints Blueprints] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Blueprints lifecycle ==&lt;br /&gt;
* [https://blueprints.launchpad.net/python-rack Launchpad]にてblueprintを起票します。&lt;br /&gt;
* [https://launchpad.net/~rack-drivers RACK Drivers]のメンバーがPriorityを指定します。&lt;br /&gt;
* 開発を開始したら、Implementationを&amp;quot;Started&amp;quot;に変更します。&lt;br /&gt;
* 開発が完了したら、&amp;quot;Implemented&amp;quot;に変更します。&lt;br /&gt;
&lt;br /&gt;
== Register blueprint ==&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
blueprintを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Name''&lt;br /&gt;
| 他のblueprintと区別できるハイフン付き文字列 (ex. api-to-create-process)&lt;br /&gt;
|-&lt;br /&gt;
| ''Title''&lt;br /&gt;
| このBlueprintで何をするのかを簡潔に説明する文字列 (ex. Create API to create processes)&lt;br /&gt;
|-&lt;br /&gt;
| ''Specification''&lt;br /&gt;
| [https://wiki.openstack.org/wiki Wiki]に[[#Specification|新規ページを作成]]し、そのURLを指定します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| 1～2行でいいので、英語で簡潔な説明を記述してください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Assignee''&lt;br /&gt;
| 空欄で構いません(担当者が決まっていれば入力)&lt;br /&gt;
|-&lt;br /&gt;
| ''Drafter''&lt;br /&gt;
| Blueprintを起票した人の名前が自動で入ります。&lt;br /&gt;
|-&lt;br /&gt;
| ''Approver''&lt;br /&gt;
| 空欄で構いません。&lt;br /&gt;
|-&lt;br /&gt;
| ''Definition Status''&lt;br /&gt;
| ''New''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Propose for sprint''&lt;br /&gt;
| (nothing selected) のままにしてください。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Specification ===&lt;br /&gt;
blueprintの詳細は新規にWikiページを作成し、そこに記述します。&lt;br /&gt;
&lt;br /&gt;
* htps://wiki.openstack.org/wiki/RACK/{機能名}/ja&lt;br /&gt;
&lt;br /&gt;
Specificationは日本語でOKとします。&lt;br /&gt;
フォーマットは自由ですが、他のOpenStackプロジェクトのWikiを参考にしてください。&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82967</id>
		<title>RACK/Contributing/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82967"/>
				<updated>2015-06-09T06:14:17Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Blueprints =&lt;br /&gt;
OpenStackのBlueprint運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBlueprint運用フローについては [https://wiki.openstack.org/wiki/Blueprints Blueprints] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Blueprints lifecycle ==&lt;br /&gt;
* [https://blueprints.launchpad.net/python-rack Launchpad]にてblueprintを起票します。&lt;br /&gt;
* [https://launchpad.net/~rack-drivers RACK Drivers]のメンバーがPriorityを指定します。&lt;br /&gt;
* 開発を開始したら、Implementationを&amp;quot;Started&amp;quot;に変更します。&lt;br /&gt;
* 開発が完了したら、&amp;quot;Implemented&amp;quot;に変更します。&lt;br /&gt;
&lt;br /&gt;
== Register blueprint ==&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
blueprintを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Name''&lt;br /&gt;
| 他のblueprintと区別できるハイフン付き文字列 (ex. api-to-create-process)&lt;br /&gt;
|-&lt;br /&gt;
| ''Title''&lt;br /&gt;
| このBlueprintで何をするのかを簡潔に説明する文字列 (ex. Create API to create processes)&lt;br /&gt;
|-&lt;br /&gt;
| ''Specification''&lt;br /&gt;
| [wiki.openstack.org Wiki]に[[#Specification|新規ページを作成]]し、そのURLを指定します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| 1～2行でいいので、英語で簡潔な説明を記述してください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Assignee''&lt;br /&gt;
| 空欄で構いません（担当者が決まっていれば入力）&lt;br /&gt;
|-&lt;br /&gt;
| ''Drafter''&lt;br /&gt;
| Blueprintを起票した人の名前が自動で入ります。&lt;br /&gt;
|-&lt;br /&gt;
| ''Approver''&lt;br /&gt;
| 空欄で構いません。&lt;br /&gt;
|-&lt;br /&gt;
| ''Definition Status''&lt;br /&gt;
| ''New''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Propose for sprint''&lt;br /&gt;
| (nothing selected) のままにしてください。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Specification ===&lt;br /&gt;
blueprintの詳細は新規にWikiページを作成し、そこに記述します。&lt;br /&gt;
&lt;br /&gt;
* htps://wiki.openstack.org/wiki/RACK/{機能名}/ja&lt;br /&gt;
&lt;br /&gt;
Specificationは日本語でOKとします。&lt;br /&gt;
フォーマットは自由ですが、他のOpenStackプロジェクトのWikiを参考にしてください。&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82966</id>
		<title>RACK/Contributing/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/Contributing/ja&amp;diff=82966"/>
				<updated>2015-06-09T06:10:19Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Created page with &amp;quot;== Blueprints == OpenStackのBlueprint運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Blueprints ==&lt;br /&gt;
OpenStackのBlueprint運用フローに従うようにしていますが、まだプロジェクトが小規模なのでいくらか簡略化しています。OpenStackにおけるBlueprint運用フローについては [https://wiki.openstack.org/wiki/Blueprints Blueprints] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Blueprints lifecycle ===&lt;br /&gt;
* [https://launchpad.net/python-rack Launchpad]にてblueprintを起票します。&lt;br /&gt;
* [https://launchpad.net/~rack-drivers RACK Drivers]のメンバーがPriorityを指定します。&lt;br /&gt;
* 開発を開始したら、Implementationを&amp;quot;Started&amp;quot;に変更します。&lt;br /&gt;
* 開発が完了したら、&amp;quot;Implemented&amp;quot;に変更します。&lt;br /&gt;
&lt;br /&gt;
=== Register blueprint ===&lt;br /&gt;
Launchpad上の記述は全て英語とします。&lt;br /&gt;
blueprintを起票するときは、以下に従ってください。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| ''Name''&lt;br /&gt;
| 他のblueprintと区別できるハイフン付き文字列 (ex. api-to-create-process)&lt;br /&gt;
|-&lt;br /&gt;
| ''Title''&lt;br /&gt;
| このBlueprintで何をするのかを簡潔に説明する文字列 (ex. Create API to create processes)&lt;br /&gt;
|-&lt;br /&gt;
| ''Specification''&lt;br /&gt;
| [wiki.openstack.org Wiki]に[[#Specification|新規ページを作成]]し、そのURLを指定します。&lt;br /&gt;
|-&lt;br /&gt;
| ''Summary''&lt;br /&gt;
| 1～2行でいいので、英語で簡潔な説明を記述してください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Assignee''&lt;br /&gt;
| 空欄で構いません（担当者が決まっていれば入力）&lt;br /&gt;
|-&lt;br /&gt;
| ''Drafter''&lt;br /&gt;
| Blueprintを起票した人の名前が自動で入ります。&lt;br /&gt;
|-&lt;br /&gt;
| ''Approver''&lt;br /&gt;
| 空欄で構いません。&lt;br /&gt;
|-&lt;br /&gt;
| ''Definition Status''&lt;br /&gt;
| ''New''にしてください。&lt;br /&gt;
|-&lt;br /&gt;
| ''Propose for sprint''&lt;br /&gt;
| (nothing selected) のままにしてください。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Specification ====&lt;br /&gt;
blueprintの詳細は新規にWikiページを作成し、そこに記述します。&lt;br /&gt;
&lt;br /&gt;
* htps://wiki.openstack.org/wiki/RACK/{機能名}/ja&lt;br /&gt;
&lt;br /&gt;
Specificationは日本語でOKとします。&lt;br /&gt;
フォーマットは自由ですが、他のOpenStackプロジェクトのWikiを参考にしてください。&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=72765</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=72765"/>
				<updated>2015-02-02T05:32:20Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DevRACK&lt;br /&gt;
| &lt;br /&gt;
| https://github.com/ctc-g/devrack/blob/master/README_ja.md&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DevRACKという簡単にサンプルアプリケーションを実行するためのツールも開発しています。&lt;br /&gt;
* https://github.com/ctc-g/devrack/blob/master/README_ja.md&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
現状、rack-apiとrack-proxyはVMとして起動しますが、将来的には以下の構成になることを目指します。&lt;br /&gt;
&lt;br /&gt;
* '''rack-apiはnova-apiなどのように、OpenStackコントローラノード内の一プロセスとして動作します。'''&lt;br /&gt;
* '''rack-proxyはneutron-ns-metadata-proxyのように、OpenStackネットワークノード内の一プロセスとして動作します。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わる範囲のため、現段階ではVMとして起動するようにしています。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリと組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=72751</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=72751"/>
				<updated>2015-02-02T02:57:06Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| DevRACK&lt;br /&gt;
| &lt;br /&gt;
| https://github.com/ctc-g/devrack/README_ja.md&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DevRACKという簡単にサンプルアプリケーションを実行するためのツールも開発しています。&lt;br /&gt;
* https://github.com/ctc-g/devrack/README_ja.md&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
現状、rack-apiとrack-proxyはVMとして起動しますが、将来的には以下の構成になることを目指します。&lt;br /&gt;
&lt;br /&gt;
* '''rack-apiはnova-apiなどのように、OpenStackコントローラノード内の一プロセスとして動作します。'''&lt;br /&gt;
* '''rack-proxyはneutron-ns-metadata-proxyのように、OpenStackネットワークノード内の一プロセスとして動作します。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わる範囲のため、現段階ではVMとして起動するようにしています。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリと組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=70716</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=70716"/>
				<updated>2014-12-18T04:01:52Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
現状、rack-apiとrack-proxyはVMとして起動しますが、将来的には以下の構成になることを目指します。&lt;br /&gt;
&lt;br /&gt;
* '''rack-apiはnova-apiなどのように、OpenStackコントローラノード内の一プロセスとして動作します。'''&lt;br /&gt;
* '''rack-proxyはneutron-ns-metadata-proxyのように、OpenStackネットワークノード内の一プロセスとして動作します。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わる範囲のため、現段階ではVMとして起動するようにしています。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリと組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=70715</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=70715"/>
				<updated>2014-12-18T03:57:14Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application is the software, which uses OpenStack resource (eg. VM or VNET) directly from application.&lt;br /&gt;
Recent popular applications are designed before the cloud computing age, so affinity with cloud is not considered.&lt;br /&gt;
In order to make those applications work on OpenStack, tools such as Chef, Puppet and other tools are required, and it makes systems very complex in design.&lt;br /&gt;
&lt;br /&gt;
RACK provides the mechanism to create “After the Cloud” applications.&lt;br /&gt;
Programmer can write codes that are scalable and migratable on OpenStack platform without cooperating with the external systems.&lt;br /&gt;
&lt;br /&gt;
Concepts of RACK are as follows:&lt;br /&gt;
# RACK handles VM with &amp;quot;functions&amp;quot; as a single execution binary file. “Functions” here means OS, middleware and programs that are necessary for application to function. The programs here are made in such a way as to call and operate RACK API.&lt;br /&gt;
# When this execution binary is deployed onto OpenStack, the VM will behave like a Linux process and then finish its own task.&lt;br /&gt;
# This process is based on the descriptions in the program. It does things such as forking and generating a child process, communicating between processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please take a look at the sample programs to experience RACK!&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK defines data structure in order for VM to behave like a &amp;quot;process&amp;quot;.&lt;br /&gt;
It wraps Nova, Neutron and other APIs.&lt;br /&gt;
Also it provides API to control data communication and sharing.&lt;br /&gt;
Applications have to be scripted by order of calling the APIs.&lt;br /&gt;
The RACK also offers libraries [https://github.com/stackforge/python-rackclient|python-rackclient] for using APIs.&lt;br /&gt;
It is very easy to write OpenStack Native Application codes by using the libraries.&lt;br /&gt;
The RACK may be recognized as framework for writing OpenStack Native Application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
When using RACK, you might often hear a word “process”.&lt;br /&gt;
This process is a virtual machine instance on Nova.&lt;br /&gt;
However, this instance is created in such a way as to perform some tasks when it is started.&lt;br /&gt;
This is similar to various execution files of Linux, which start to operate when &amp;quot;ls&amp;quot; command or &amp;quot;grep&amp;quot; command is executed.&lt;br /&gt;
In Linux, the started execution file will become a process on memory, it handles tasks, exits and disappears from memory at the end.&lt;br /&gt;
RACK reproduces this concept on OpenStack.&lt;br /&gt;
It deploys the glance image (with features) on Nova, and the deployed instance performs its task and then disappears at the end.&lt;br /&gt;
This is the reason why a virtual machine is called &amp;quot;process&amp;quot; in the RACK world.&lt;br /&gt;
&lt;br /&gt;
The VM instance that is started as a process has a PID, possible to perform &amp;quot;Fork&amp;quot; and it has a parent-child relationship.&lt;br /&gt;
Additionally, it is possible to communicate without IP address and share data among these processes (VMs) that have such relationships.&lt;br /&gt;
The file system with the same name space is also available, and the programmer who creates this execution binary can describe the OpenStack Native Application as if programming a Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACK has a database defined with the data structure to handle VM as a process.&lt;br /&gt;
RACK provides Restful API to manipulate the data structure.&lt;br /&gt;
Once it receives an order from the application, it calls OpenStack API, and then writes the attribute info of the process into its own database.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
The attribute information of the process includes the followings;&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Each process holds above IDs as attribute information.&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
Each process belongs to one group.&lt;br /&gt;
The process belongs to the same group has a benefit such as file sharing in the same name space.&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
Each process holds its own ID (PID) and the parent's IP (PPID).&lt;br /&gt;
These IDs represent the parent-child relationship between processes.&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
There is a &amp;quot;rack-proxy&amp;quot; process in each group.&lt;br /&gt;
&amp;quot;rack-api&amp;quot; prodives the public API, and the &amp;quot;rack-proxy&amp;quot; on the other hand provides an accessible API only to the particular group.&lt;br /&gt;
File system and interprocess communication would be handled by &amp;quot;rack-proxy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
&amp;quot;rack-api&amp;quot; is deployed in an independent network and it is accessible from public.&lt;br /&gt;
&amp;quot;rack-proxy&amp;quot;, which exists in every group, is booted by calling the &amp;quot;rack-api&amp;quot; API.&lt;br /&gt;
&amp;quot;rack-api&amp;quot; and all &amp;quot;rack-proxy&amp;quot; share the same database.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
Curretnly, &amp;quot;rack-api&amp;quot; and &amp;quot;rack-proxy&amp;quot; are booted as VM.&lt;br /&gt;
Our future plan includes followings:&lt;br /&gt;
&lt;br /&gt;
* '''rack-api runs as Linux process in OpenStack controller node like nova-api.'''&lt;br /&gt;
* '''rack-proxy runs as Linux process in OpenStack network node like nutron-ns-metadata-proxy.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Since this area is closely related to the OpenStack core project, they are deployed as VM at the moment.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACK has the ability to support interprocess communication and data sharing as well as data structure manipulation, booting process and shutting down as described above.&lt;br /&gt;
They are realized by combining libraries.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* File system&lt;br /&gt;
It provides a file system that is shared within the group.&lt;br /&gt;
Process can access to files with the same name space just like accessing to local file system. &lt;br /&gt;
&lt;br /&gt;
* Shared memory&lt;br /&gt;
This is a function for sharing simple data between processes.&lt;br /&gt;
It is usable when accessing the same data by multiple processes.&lt;br /&gt;
&lt;br /&gt;
* Pipe&lt;br /&gt;
It provides Unix-pipe like functionality.&lt;br /&gt;
The result of process can be piped to the other process very easily.&lt;br /&gt;
No need to know the peer IP address or wait until the peer boots.&lt;br /&gt;
&lt;br /&gt;
* Signal&lt;br /&gt;
It is a function that can send strings to any process only by specifying a PID.&lt;br /&gt;
It may send the strings to multiple processes by multicast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in any ways.&lt;br /&gt;
Anything from adding/deleting process, data sharing and data notification among processes are describable by program.&lt;br /&gt;
Using RACK enables you to develop applications such as OpenStack Native and others easily.&lt;br /&gt;
&lt;br /&gt;
As tips on how to use RACK, some sample applications are available.&lt;br /&gt;
We advise you to try these sample applications first and experience the OpenStack Native Application.&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/montecarlo&lt;br /&gt;
* https://github.com/ctc-g/rack-sample-apps/tree/master/shell-like&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64312</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64312"/>
				<updated>2014-10-06T06:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application is the software, which uses OpenStack resource (eg. VM or VNET) directly from application.&lt;br /&gt;
Recent popular applications are designed before the cloud computing age, so affinity with cloud is not considered.&lt;br /&gt;
In order to make those applications work on OpenStack, tools such as Chef, Puppet and other tools are required, and it makes systems very complex in design.&lt;br /&gt;
&lt;br /&gt;
RACK provides the mechanism to create “After the Cloud” applications.&lt;br /&gt;
Programmer can write codes that are scalable and migratable on OpenStack platform without cooperating with the external systems.&lt;br /&gt;
&lt;br /&gt;
Concepts of RACK are as follows:&lt;br /&gt;
# RACK handles VM with &amp;quot;functions&amp;quot; as a single execution binary file. “Functions” here means OS, middleware and programs that are necessary for application to function. The programs here are made in such a way as to call and operate RACK API.&lt;br /&gt;
# When this execution binary is deployed onto OpenStack, the VM will behave like a Linux process and then finish its own task.&lt;br /&gt;
# This process is based on the descriptions in the program. It does things such as forking and generating a child process, communicating between processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please take a look at the sample programs to experience RACK!&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK defines data structure in order for VM to behave like a &amp;quot;process&amp;quot;.&lt;br /&gt;
It wraps Nova, Neutron and other APIs.&lt;br /&gt;
Also it provides API to control data communication and sharing.&lt;br /&gt;
Applications have to be scripted by order of calling the APIs.&lt;br /&gt;
The RACK also offers libraries [https://github.com/stackforge/python-rackclient|python-rackclient] for using APIs.&lt;br /&gt;
It is very easy to write OpenStack Native Application codes by using the libraries.&lt;br /&gt;
The RACK may be recognized as framework for writing OpenStack Native Application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
When using RACK, you might often hear a word “process”.&lt;br /&gt;
This process is a virtual machine instance on Nova.&lt;br /&gt;
However, this instance is created in such a way as to perform some tasks when it is started.&lt;br /&gt;
This is similar to various execution files of Linux, which start to operate when &amp;quot;ls&amp;quot; command or &amp;quot;grep&amp;quot; command is executed.&lt;br /&gt;
In Linux, the started execution file will become a process on memory, it handles tasks, exits and disappears from memory at the end.&lt;br /&gt;
RACK reproduces this concept on OpenStack.&lt;br /&gt;
It deploys the glance image (with features) on Nova, and the deployed instance performs its task and then disappears at the end.&lt;br /&gt;
This is the reason why a virtual machine is called &amp;quot;process&amp;quot; in the RACK world.&lt;br /&gt;
&lt;br /&gt;
The VM instance that is started as a process has a PID, possible to perform &amp;quot;Fork&amp;quot; and it has a parent-child relationship.&lt;br /&gt;
Additionally, it is possible to communicate without IP address and share data among these processes (VMs) that have such relationships.&lt;br /&gt;
The file system with the same name space is also available, and the programmer who creates this execution binary can describe the OpenStack Native Application as if programming a Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACK has a database defined with the data structure to handle VM as a process.&lt;br /&gt;
RACK provides Restful API to manipulate the data structure.&lt;br /&gt;
Once it receives an order from the application, it calls OpenStack API, and then writes the attribute info of the process into its own database.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
The attribute information of the process includes the followings;&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Each process holds above IDs as attribute information.&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
Each process belongs to one group.&lt;br /&gt;
The process belongs to the same group has a benefit such as file sharing in the same name space.&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
Each process holds its own ID (PID) and the parent's IP (PPID).&lt;br /&gt;
These IDs represent the parent-child relationship between processes.&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
There is a &amp;quot;rack-proxy&amp;quot; process in each group.&lt;br /&gt;
&amp;quot;rack-api&amp;quot; prodives the public API, and the &amp;quot;rack-proxy&amp;quot; on the other hand provides an accessible API only to the particular group.&lt;br /&gt;
File system and interprocess communication would be handled by &amp;quot;rack-proxy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
&amp;quot;rack-api&amp;quot; is deployed in an independent network and it is accessible from public.&lt;br /&gt;
&amp;quot;rack-proxy&amp;quot;, which exists in every group, is booted by calling the &amp;quot;rack-api&amp;quot; API.&lt;br /&gt;
&amp;quot;rack-api&amp;quot; and all &amp;quot;rack-proxy&amp;quot; share the same database.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
Curretnly, &amp;quot;rack-api&amp;quot; and &amp;quot;rack-proxy&amp;quot; are booted as VM.&lt;br /&gt;
Our future plan includes followings:&lt;br /&gt;
&lt;br /&gt;
* '''rack-api runs as Linux process in OpenStack controller node like nova-api.'''&lt;br /&gt;
* '''rack-proxy runs as Linux process in OpenStack network node like nutron-ns-metadata-proxy.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Since this area is closely related to the OpenStack core project, they are deployed as VM at the moment.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACK has the ability to support interprocess communication and data sharing as well as data structure manipulation, booting process and shutting down as described above.&lt;br /&gt;
They are realized by combining libraries.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* File system&lt;br /&gt;
It provides a file system that is shared within the group.&lt;br /&gt;
Process can access to files with the same name space just like accessing to local file system. &lt;br /&gt;
&lt;br /&gt;
* Shared memory&lt;br /&gt;
This is a function for sharing simple data between processes.&lt;br /&gt;
It is usable when accessing the same data by multiple processes.&lt;br /&gt;
&lt;br /&gt;
* Pipe&lt;br /&gt;
It provides Unix-pipe like functionality.&lt;br /&gt;
The result of process can be piped to the other process very easily.&lt;br /&gt;
No need to know the peer IP address or wait until the peer boots.&lt;br /&gt;
&lt;br /&gt;
* Signal&lt;br /&gt;
It is a function that can send strings to any process only by specifying a PID.&lt;br /&gt;
It may send the strings to multiple processes by multicast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in any ways.&lt;br /&gt;
Anything from adding/deleting process, data sharing and data notification among processes are describable by program.&lt;br /&gt;
Using RACK enables you to develop applications such as OpenStack Native and others easily.&lt;br /&gt;
&lt;br /&gt;
As tips on how to use RACK, some sample applications are available.&lt;br /&gt;
We advise you to try these sample applications first and experience the OpenStack Native Application.&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64311</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64311"/>
				<updated>2014-10-06T06:41:44Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
現状、rack-apiとrack-proxyはVMとして起動しますが、将来的には以下の構成になることを目指します。&lt;br /&gt;
&lt;br /&gt;
* '''rack-apiはnova-apiなどのように、OpenStackコントローラノード内の一プロセスとして動作します。'''&lt;br /&gt;
* '''rack-proxyはneutron-ns-metadata-proxyのように、OpenStackネットワークノード内の一プロセスとして動作します。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わる範囲のため、現段階ではVMとして起動するようにしています。'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリと組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like/README_ja.md&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64310</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64310"/>
				<updated>2014-10-06T06:31:52Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application is the software, which uses OpenStack resource (eg. VM or VNET) directly from application.&lt;br /&gt;
Recent popular applications are designed before the cloud computing age, so affinity with cloud is not considered.&lt;br /&gt;
In order to make those applications work on OpenStack, tools such as Chef, Puppet and other tools are required, and it makes systems very complex in design.&lt;br /&gt;
&lt;br /&gt;
RACK provides the mechanism to create “After the Cloud” applications.&lt;br /&gt;
Programmer can write codes that are scalable and migratable on OpenStack platform without cooperating with the external systems.&lt;br /&gt;
&lt;br /&gt;
Concepts of RACK are as follows:&lt;br /&gt;
# RACK handles VM with &amp;quot;functions&amp;quot; as a single execution binary file. “Functions” here means OS, middleware and programs that are necessary for application to function. The programs here are made in such a way as to call and operate RACK API.&lt;br /&gt;
# When this execution binary is deployed onto OpenStack, the VM will behave like a Linux process and then finish its own task.&lt;br /&gt;
# This process is based on the descriptions in the program. It does things such as forking and generating a child process, communicating between processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please take a look at the sample programs to experience RACK!&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK defines data structure in order for VM to behave like a &amp;quot;process&amp;quot;.&lt;br /&gt;
It wraps Nova, Neutron and other APIs.&lt;br /&gt;
Also it provides API to control data communication and sharing.&lt;br /&gt;
Applications have to be scripted by order of calling the APIs.&lt;br /&gt;
The RACK also offers libraries [https://github.com/stackforge/python-rackclient|python-rackclient] for using APIs.&lt;br /&gt;
It is very easy to write OpenStack Native Application codes by using the libraries.&lt;br /&gt;
The RACK may be recognized as framework for writing OpenStack Native Application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
When using RACK, you might often hear a word “process”.&lt;br /&gt;
This process is a virtual machine instance on Nova.&lt;br /&gt;
However, this instance is created in such a way as to perform some tasks when it is started.&lt;br /&gt;
This is similar to various execution files of Linux, which start to operate when &amp;quot;ls&amp;quot; command or &amp;quot;grep&amp;quot; command is executed.&lt;br /&gt;
In Linux, the started execution file will become a process on memory, it handles tasks, exits and disappears from memory at the end.&lt;br /&gt;
RACK reproduces this concept on OpenStack.&lt;br /&gt;
It deploys the glance image (with features) on Nova, and the deployed instance performs its task and then disappears at the end.&lt;br /&gt;
This is the reason why a virtual machine is called &amp;quot;process&amp;quot; in the RACK world.&lt;br /&gt;
&lt;br /&gt;
The VM instance that is started as a process has a PID, possible to perform &amp;quot;Fork&amp;quot; and it has a parent-child relationship.&lt;br /&gt;
Additionally, it is possible to communicate without IP address and share data among these processes (VMs) that have such relationships.&lt;br /&gt;
The file system with the same name space is also available, and the programmer who creates this execution binary can describe the OpenStack Native Application as if programming a Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACK has a database defined with the data structure to handle VM as a process.&lt;br /&gt;
RACK provides Restful API to manipulate the data structure.&lt;br /&gt;
Once it receives an order from the application, it calls OpenStack API, and then writes the attribute info of the process into its own database.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
The attribute information of the process includes the followings;&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Each process holds above IDs as attribute information.&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
Each process belongs to one group.&lt;br /&gt;
The process belongs to the same group has a benefit such as file sharing in the same name space.&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
The ID of the parent ID and is assigned to each process.&lt;br /&gt;
These IDs represent the parent-child relationship between processes.&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
There is a &amp;quot;rack-proxy&amp;quot; process in each group.&lt;br /&gt;
&amp;quot;rack-api&amp;quot; prodives the public API, and the &amp;quot;rack-proxy&amp;quot; on the other hand provides an accessible API only to the particular group.&lt;br /&gt;
File system and interprocess communication would be handled by &amp;quot;rack-proxy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
&amp;quot;rack-api&amp;quot; is deployed in an independent network and it is accessible from public.&lt;br /&gt;
&amp;quot;rack-proxy&amp;quot;, which exists in every group, is booted by calling the &amp;quot;rack-api&amp;quot; API.&lt;br /&gt;
&amp;quot;rack-api&amp;quot; and all &amp;quot;rack-proxy&amp;quot; share the same database.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
Curretnly, &amp;quot;rack-api&amp;quot; and &amp;quot;rack-proxy&amp;quot; are booted as VM.&lt;br /&gt;
Our future plan includes followings:&lt;br /&gt;
&lt;br /&gt;
* rack-api runs as Linux process in OpenStack controller node like nova-api.&lt;br /&gt;
* rack-proxy runs as Linux process in OpenStack network node like nutron-ns-metadata-proxy.&lt;br /&gt;
&lt;br /&gt;
Since this area is closely related to the OpenStack core project, they are deployed as VM at the moment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACK has the ability to support interprocess communication and data sharing as well as data structure manipulation, booting process and shutting down as described above.&lt;br /&gt;
They are realized by combining libraries.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* File system&lt;br /&gt;
It provides a file system that is shared within the group.&lt;br /&gt;
Process can access to files with the same name space just like accessing to local file system. &lt;br /&gt;
&lt;br /&gt;
* Shared memory&lt;br /&gt;
This is a function for sharing simple data between processes.&lt;br /&gt;
It is usable when accessing the same data by multiple processes.&lt;br /&gt;
&lt;br /&gt;
* Pipe&lt;br /&gt;
It provides Unix-pipe like functionality.&lt;br /&gt;
The result of process can be piped to the other process very easily.&lt;br /&gt;
No need to know the peer IP address or wait until the peer boots.&lt;br /&gt;
&lt;br /&gt;
* Signal&lt;br /&gt;
It is a function that can send strings to any process only by specifying a PID.&lt;br /&gt;
It may send the strings to multiple processes by multicast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in any ways.&lt;br /&gt;
Anything from adding/deleting process, data sharing and data notification among processes are describable by program.&lt;br /&gt;
Using RACK enables you to develop applications such as OpenStack Native and others easily.&lt;br /&gt;
&lt;br /&gt;
As tips on how to use RACK, some sample applications are available.&lt;br /&gt;
We advise you to try these sample applications first and experience the OpenStack Native Application.&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64309</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64309"/>
				<updated>2014-10-06T06:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
現状、rack-apiとrack-proxyはそれぞれVMとして起動されます。&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
'''将来的には、rack-apiはOpenStackのコントローラノードに、rack-proxyはneutron-ns-metadata-proxyのようにネットワークノード内に起動するような構成を想定しています。'''&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わってくる範囲なので、現状はVMとして配置させています。'''&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリと組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like/README_ja.md&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64308</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64308"/>
				<updated>2014-10-06T06:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
実体はOpenStack上にありますが、プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
現状、rack-apiとrack-proxyはそれぞれVMとして起動されます。&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
'''将来的には、rack-apiはOpenStackのコントローラノードに、rack-proxyはneutron-ns-metadata-proxyのようにネットワークノード内に起動するような構成を想定しています。'''&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わってくる範囲なので、現状はVMとして配置させています。'''&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]と組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''ソースコード''': https://github.com/stackforge/rack&lt;br /&gt;
&lt;br /&gt;
'''ライブラリ''': https://github.com/stackforge/python-rackclient&lt;br /&gt;
&lt;br /&gt;
'''デプロイメントガイド''':  https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
&lt;br /&gt;
'''サンプルプリケーション''':&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64306</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64306"/>
				<updated>2014-10-06T03:02:47Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a Linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
Look at the picture below.&lt;br /&gt;
It indicates the image of Linux process inside RACK.&lt;br /&gt;
Generally, an executable is made through the process of compile and link, and operating system manages it as process when it is loaded into memory.&lt;br /&gt;
Inside RACK, VM image represents executable and it includes OS and middleware as well as an application.&lt;br /&gt;
When the executable (actually VM image) is launched on OpenStack, RACK gives it a process ID (PID).&lt;br /&gt;
Additionally, when the process executes &amp;quot;Fork&amp;quot;, a child process is launched, and given PID and a parent PID (PPID).&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Data Structure'''&amp;lt;br /&amp;gt;In order to manage a VM like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GID(process group ID) to it.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;Processes can share the data such as the data to process and their outputs.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;There are multiple ways to use this, storing the data file to process and the output file, and sharing the data file between some processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In near future we plan to provide following features.&lt;br /&gt;
&lt;br /&gt;
* '''Pipeline'''&amp;lt;br /&amp;gt;The feature that chains a process to other by their standard streams just like Unix pipeline.&lt;br /&gt;
&lt;br /&gt;
* '''Zombie process Collector'''&amp;lt;br /&amp;gt;When a process failed to be killed, it executes an endless loop processing, or its parent process is killed, it becomes a zombie process. Zombie process collector detects these processes and clean up.&lt;br /&gt;
&lt;br /&gt;
* '''Compiler'''&amp;lt;br /&amp;gt;VM image creation automation tool. Compiler assists you to create VM image adapted RACK.&lt;br /&gt;
&lt;br /&gt;
* '''Debugger'''&amp;lt;br /&amp;gt;This is useful for developing an application. Process is typically killed soon when it finishes job, so you can't examine program state and track down the origin of the problem. Debugger supports these tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
RACK provides above features as restful service.&lt;br /&gt;
Application only communicates with RACK via useful library we provide.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
This is the image of program adapted RACK.&lt;br /&gt;
You can simply develop a distributed application as below.&lt;br /&gt;
You don't need to write complex and unique code.&lt;br /&gt;
Especially, you don't need to write cloud-aware code, that is you don't need to know IP address.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Pseudo-Code.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Use-Cases.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benchmark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
We conducted a benchmark test of OpenStack Native Application that behaves like the first example of above usecases.&lt;br /&gt;
The following graph shows the result.&lt;br /&gt;
We can see one of the characteristics of OpenStack Native Application from this graph.&lt;br /&gt;
This application scales worker processes out depending on the number of dataset, and these processes work in parallel, so the total execution time is held constant.&lt;br /&gt;
Theoretically, the more it scales out, the shorter the execution time is.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Benchmark.png]]&lt;br /&gt;
&lt;br /&gt;
It's good for both customers and cloud providers.&lt;br /&gt;
For customers, it's less expensive to use a lot of low-spec instances to process data fast than a high spec instance.&lt;br /&gt;
For cloud providers, a large amount of resources will come to be consumed.&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64305</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=64305"/>
				<updated>2014-10-06T02:56:40Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
== Project Resources ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| '''Resource'''&lt;br /&gt;
| '''English '''&lt;br /&gt;
| '''Japanese'''&lt;br /&gt;
|-&lt;br /&gt;
| Wiki&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK&lt;br /&gt;
| https://wiki.openstack.org/wiki/RACK/ja&lt;br /&gt;
|-&lt;br /&gt;
| Source code&lt;br /&gt;
| https://github.com/stackforge/rack&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Deployment guide&lt;br /&gt;
| https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
| https://github.com/stackforge/rack/blob/master/tools/setup/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Sample applications&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like&lt;br /&gt;
|&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/montecarlo/README_ja.md&lt;br /&gt;
* https://github.com/stackforge/rack/blob/master/tools/sample-apps/shell-like/README_ja.md&lt;br /&gt;
|-&lt;br /&gt;
| Python RACK client&lt;br /&gt;
| https://github.com/stackforge/python-rackclient&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a Linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
Look at the picture below.&lt;br /&gt;
It indicates the image of Linux process inside RACK.&lt;br /&gt;
Generally, an executable is made through the process of compile and link, and operating system manages it as process when it is loaded into memory.&lt;br /&gt;
Inside RACK, VM image represents executable and it includes OS and middleware as well as an application.&lt;br /&gt;
When the executable (actually VM image) is launched on OpenStack, RACK gives it a process ID (PID).&lt;br /&gt;
Additionally, when the process executes &amp;quot;Fork&amp;quot;, a child process is launched, and given PID and a parent PID (PPID).&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Data Structure'''&amp;lt;br /&amp;gt;In order to manage a VM like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GID(process group ID) to it.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;Processes can share the data such as the data to process and their outputs.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;There are multiple ways to use this, storing the data file to process and the output file, and sharing the data file between some processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In near future we plan to provide following features.&lt;br /&gt;
&lt;br /&gt;
* '''Pipeline'''&amp;lt;br /&amp;gt;The feature that chains a process to other by their standard streams just like Unix pipeline.&lt;br /&gt;
&lt;br /&gt;
* '''Zombie process Collector'''&amp;lt;br /&amp;gt;When a process failed to be killed, it executes an endless loop processing, or its parent process is killed, it becomes a zombie process. Zombie process collector detects these processes and clean up.&lt;br /&gt;
&lt;br /&gt;
* '''Compiler'''&amp;lt;br /&amp;gt;VM image creation automation tool. Compiler assists you to create VM image adapted RACK.&lt;br /&gt;
&lt;br /&gt;
* '''Debugger'''&amp;lt;br /&amp;gt;This is useful for developing an application. Process is typically killed soon when it finishes job, so you can't examine program state and track down the origin of the problem. Debugger supports these tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
RACK provides above features as restful service.&lt;br /&gt;
Application only communicates with RACK via useful library we provide.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
This is the image of program adapted RACK.&lt;br /&gt;
You can simply develop a distributed application as below.&lt;br /&gt;
You don't need to write complex and unique code.&lt;br /&gt;
Especially, you don't need to write cloud-aware code, that is you don't need to know IP address.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Pseudo-Code.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Use-Cases.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benchmark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
We conducted a benchmark test of OpenStack Native Application that behaves like the first example of above usecases.&lt;br /&gt;
The following graph shows the result.&lt;br /&gt;
We can see one of the characteristics of OpenStack Native Application from this graph.&lt;br /&gt;
This application scales worker processes out depending on the number of dataset, and these processes work in parallel, so the total execution time is held constant.&lt;br /&gt;
Theoretically, the more it scales out, the shorter the execution time is.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Benchmark.png]]&lt;br /&gt;
&lt;br /&gt;
It's good for both customers and cloud providers.&lt;br /&gt;
For customers, it's less expensive to use a lot of low-spec instances to process data fast than a high spec instance.&lt;br /&gt;
For cloud providers, a large amount of resources will come to be consumed.&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Process-Image.png&amp;diff=64249</id>
		<title>File:RACK-Process-Image.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Process-Image.png&amp;diff=64249"/>
				<updated>2014-10-03T04:14:32Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Takehirokaneko uploaded a new version of File:RACK-Process-Image.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64244</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64244"/>
				<updated>2014-10-03T01:09:42Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
実体はOpenStack上にありますが、プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
現状、rack-apiとrack-proxyはそれぞれVMとして起動されます。&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
'''将来的には、rack-apiはOpenStackのコントローラノードに、rack-proxyはneutron-ns-metadata-proxyのようにネットワークノード内に起動するような構成を想定しています。'''&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わってくる範囲なので、現状はVMとして配置させています。'''&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Topology.png]]&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]と組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''ソースコード''': https://github.com/stackforge/rack&lt;br /&gt;
&lt;br /&gt;
'''ライブラリ''': https://github.com/stackforge/python-rackclient&lt;br /&gt;
&lt;br /&gt;
'''デプロイメントガイド''':  https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
&lt;br /&gt;
'''サンプルプリケーション''':&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Topology.png&amp;diff=64243</id>
		<title>File:RACK-Topology.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Topology.png&amp;diff=64243"/>
				<updated>2014-10-03T01:09:08Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Features.png&amp;diff=64242</id>
		<title>File:RACK-Features.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Features.png&amp;diff=64242"/>
				<updated>2014-10-03T01:07:42Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Takehirokaneko uploaded a new version of File:RACK-Features.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Architecutre-Overview.png&amp;diff=64241</id>
		<title>File:RACK-Architecutre-Overview.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Architecutre-Overview.png&amp;diff=64241"/>
				<updated>2014-10-03T01:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Takehirokaneko uploaded a new version of File:RACK-Architecutre-Overview.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Architecutre-Overview.png&amp;diff=64240</id>
		<title>File:RACK-Architecutre-Overview.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Architecutre-Overview.png&amp;diff=64240"/>
				<updated>2014-10-03T01:01:17Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Takehirokaneko uploaded a new version of File:RACK-Architecutre-Overview.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64168</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=64168"/>
				<updated>2014-10-02T10:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of RACK: &amp;quot;OpenStack Native Application&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
OpenStack Native Application とは、OpenStackのリソース（たとえば、VMやVNET）を、アプリケーションの中から直接利用して動作するソフトウェアの事です。&lt;br /&gt;
現在主流のアプリケーションは、&amp;quot;クラウド以前&amp;quot;にデザインされており、クラウドとの親和性が考慮されていません。&lt;br /&gt;
そのため、これらのアプリケーションがOpenStack上で動作するには、ChefやPuppetといったツールと連携する必要があり、システムが複雑化しています。&lt;br /&gt;
&lt;br /&gt;
RACKはOpenStack上で直接動作するソフトウェア、&amp;quot;After the Cloud&amp;quot; アプリケーションを簡単に作成するための仕組みです。&lt;br /&gt;
プログラマはRACKを使うことで、外部との連携を必要とせずに、OpenStack上でスケールし、移植可能なアプリケーションを記述し動作させることができます。&lt;br /&gt;
&lt;br /&gt;
RACKの概念は以下になります。&lt;br /&gt;
&lt;br /&gt;
# 機能を持たせたVMを1つの実行バイナリファイルとして扱う。&amp;quot;機能&amp;quot;とは、アプリが動作するために必要なOS、ミドル、プログラムの事を指します。ここでのプログラムはRACKのAPIを呼び出して動作するように作ります。&lt;br /&gt;
# この実行バイナリを、OpenStack上に展開することで、このVMはLinuxプロセスのように振る舞い、何らかの仕事をします。&lt;br /&gt;
# このプロセスは、プログラムの中で記述に基づき、Forkして子プロセスを生成したり、プロセス間で通信を行います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手っ取り早くRACKを体験するには、サンプルプログラムを見てください&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACKは、NovaやNeutron等のAPIをラッピングし、VMがプロセスのように振る舞うためのデータ構造を定義します。&lt;br /&gt;
そして、このプロセスとして扱われるVM間で、通信やデータ共有を行うためのAPIを提供します。&lt;br /&gt;
アプリケーションはこのAPIをコールすることで動作するように記述していきます。&lt;br /&gt;
更にRACKはこのAPIを利用するためのライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]も提供しています。&lt;br /&gt;
このライブラリを使うことで、簡単にOpenStack Native Applicationが記述できます。&lt;br /&gt;
RACKは、OpenStack Native Applicationを記述するためのフレームワークとも言えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What we call &amp;quot;process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
RACKではプロセスという単語がよく出てきます。&lt;br /&gt;
このプロセスの実態はNova上の仮想マシンインスタンスです。&lt;br /&gt;
しかしこのインスタンスは、起動すると何かの仕事をするように作られています。&lt;br /&gt;
これは、Linuxの各種実行ファイル、たとえば lsコマンドやgrepコマンドが起動されると仕事をするのと似ています。&lt;br /&gt;
Linuxでは起動した実行ファイルはメモリ上のプロセスとなり、仕事を行い、最後には終了してメモリ上から消えます。&lt;br /&gt;
RACKはこの考え方をOpenStack上で再現します。&lt;br /&gt;
機能を持たせたglanceイメージをNova上で展開し、展開されたインスタンスが何か仕事を行い、最後に消えます。&lt;br /&gt;
そのため、RACKでは仮想マシンインスタンス＝プロセスと呼んでいます。&lt;br /&gt;
&lt;br /&gt;
プロセスとして起動されるVMインスタンスは、PIDを持ち、Fork可能で親子関係を持ちます。&lt;br /&gt;
また関係性を持ったプロセス間（VM間）では、IPアドレスを意識しないプロセス間通信やデータ共有、同一名前空間を持ったファイルシステムが利用可能で、この実行バイナリを作成するプログラマは、Linuxのプログラムを作る感覚で、OpenStack Native Applicationを記述できます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
RACKはVMをプロセスとして扱うためのデータ構造を定義したデータベースを持ち、このデータ構造を操作するためのRestfulなAPIを提供します。&lt;br /&gt;
アプリケーションから命令を受けると、OpenStackのAPIをコールし、プロセスの属性情報を自身のデータベースに書き込みます。&lt;br /&gt;
&lt;br /&gt;
=== Attibutes of a process ===&lt;br /&gt;
プロセスの属性情報には下記のようなものがあります。&lt;br /&gt;
&lt;br /&gt;
* keypair, security-group, network&lt;br /&gt;
Nova、Neutronによって提供されるリソースです。&lt;br /&gt;
実体はOpenStack上にありますが、プロセスの属性情報としてそれぞれのリソースIDを保持しています。&lt;br /&gt;
&lt;br /&gt;
* GID (group ID)&lt;br /&gt;
各プロセスは一つのグループに所属します。&lt;br /&gt;
同じグループに所属するプロセスは、同一名前空間でファイル共有できるなどのメリットがあります。&lt;br /&gt;
&lt;br /&gt;
* PID, PPID&lt;br /&gt;
各プロセスに付与されるIDおよびその親のIDです。&lt;br /&gt;
これによりプロセス間の親子関係が表現されています。&lt;br /&gt;
&lt;br /&gt;
=== rack-proxy ===&lt;br /&gt;
各グループにはそれぞれrack-proxyというプロセスが存在します。&lt;br /&gt;
rack-apiがパブリックなAPIなのに対し、rack-proxyはそのグループだけがアクセス可能なAPIを提供します。&lt;br /&gt;
プロセス間通信やファイルシステムといった機能は、rack-proxyが提供します。&lt;br /&gt;
&lt;br /&gt;
=== Deployment of rack-api and rack-proxy ===&lt;br /&gt;
現状、rack-apiとrack-proxyはそれぞれVMとして起動されます。&lt;br /&gt;
rack-apiは単独のネットワークに配置され、パブリックにアクセス可能とします。&lt;br /&gt;
グループごとに存在するrack-proxyは、rack-apiのAPIをコールすることで起動します。&lt;br /&gt;
rack-apiおよびすべてのrack-proxyは、同じデータベースを共有します。&lt;br /&gt;
&lt;br /&gt;
'''将来的には、rack-apiはOpenStackのコントローラノードに、rack-proxyはneutron-ns-metadata-proxyのようにネットワークノード内に起動するような構成を想定しています。'''&lt;br /&gt;
'''これらはOpenStackのコアプロジェクトと密接に関わってくる範囲なので、現状はVMとして配置させています。'''&lt;br /&gt;
&lt;br /&gt;
=== Interprocess communication support ===&lt;br /&gt;
RACKはプロセスのデータ構造操作、起動停止に加え、プロセス間での通信、データ共有を支援する機能を持っています。&lt;br /&gt;
これらはライブラリ[https://github.com/stackforge/python-rackclient|python-rackclient]と組み合わせて実現されています。&lt;br /&gt;
&lt;br /&gt;
* ファイルシステム&lt;br /&gt;
グループ内で共有されるファイルシステムを提供します。&lt;br /&gt;
プロセスは同じ名前空間でファイルにアクセスすることができ、あたかもローカルのファイルシステムにアクセスしているかのごとく利用できます。&lt;br /&gt;
&lt;br /&gt;
* 共有メモリ&lt;br /&gt;
簡単なデータをプロセス間で共有するための機能です。&lt;br /&gt;
複数のプロセスで同時に同じデータを参照したい場合などに利用できます。&lt;br /&gt;
&lt;br /&gt;
* パイプ&lt;br /&gt;
Unix-pipeライクな機能を提供します。&lt;br /&gt;
あるプロセスで処理した結果を別のプロセスに渡すということが簡単にできます。&lt;br /&gt;
相手のIPアドレスを知る必要はなく、相手が起動するまで待つ必要もありません。&lt;br /&gt;
&lt;br /&gt;
* シグナル&lt;br /&gt;
PIDの指定だけで任意のプロセスに文字列送信ができる機能です。&lt;br /&gt;
使い方によって複数のプロセスにマルチキャスト送信することも可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
RACKの使い方に制限はありません。&lt;br /&gt;
プロセスの追加・削除、プロセス間のデータ共有、データ通知などはすべて、プログラムによって記述可能です。&lt;br /&gt;
RACKを使えば、OpenStack Nativeなアプリケーションを簡単に開発することができます。&lt;br /&gt;
&lt;br /&gt;
RACKの使い方のヒントとして、いくつかのサンプルアプリケーションを用意しています。&lt;br /&gt;
まずはサンプルアプリケーションを動かしてみて、OpenStack Native Applicationとはどのようなものか体験してください。&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''ソースコード''': https://github.com/stackforge/rack&lt;br /&gt;
&lt;br /&gt;
'''ライブラリ''': https://github.com/stackforge/python-rackclient&lt;br /&gt;
&lt;br /&gt;
'''デプロイメントガイド''':  https://github.com/stackforge/rack/tree/master/tools/setup&lt;br /&gt;
&lt;br /&gt;
'''サンプルプリケーション''':&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/montecarlo&lt;br /&gt;
* https://github.com/stackforge/rack/tree/master/tools/sample-apps/shell-like&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=63891</id>
		<title>RACK/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK/ja&amp;diff=63891"/>
				<updated>2014-09-29T00:10:18Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Created page with &amp;quot;= RACK (Real Application Centric Kernel) =   == OpenStack Native Application ==   == What is RACK? ==   == VM like a Linux process? ==   == Features ==   == Architecture ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benchmark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/stackforge/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58597</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58597"/>
				<updated>2014-07-22T06:01:13Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a Linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
Look at the picture below.&lt;br /&gt;
It indicates the image of Linux process inside RACK.&lt;br /&gt;
Generally, an executable is made through the process of compile and link, and operating system manages it as process when it is loaded into memory.&lt;br /&gt;
Inside RACK, VM image represents executable and it includes OS and middleware as well as an application.&lt;br /&gt;
When the executable (actually VM image) is launched on OpenStack, RACK gives it a process ID (PID).&lt;br /&gt;
Additionally, when the process executes &amp;quot;Fork&amp;quot;, a child process is launched, and given PID and a parent PID (PPID).&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Data Structure'''&amp;lt;br /&amp;gt;In order to manage a VM like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GID(process group ID) to it.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;Processes can share the data such as the data to process and their outputs.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;There are multiple ways to use this, storing the data file to process and the output file, and sharing the data file between some processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In near future we plan to provide following features.&lt;br /&gt;
&lt;br /&gt;
* '''Pipeline'''&amp;lt;br /&amp;gt;The feature that chains a process to other by their standard streams just like Unix pipeline.&lt;br /&gt;
&lt;br /&gt;
* '''Zombie process Collector'''&amp;lt;br /&amp;gt;When a process failed to be killed, it executes an endless loop processing, or its parent process is killed, it becomes a zombie process. Zombie process collector detects these processes and clean up.&lt;br /&gt;
&lt;br /&gt;
* '''Compiler'''&amp;lt;br /&amp;gt;VM image creation automation tool. Compiler assists you to create VM image adapted RACK.&lt;br /&gt;
&lt;br /&gt;
* '''Debugger'''&amp;lt;br /&amp;gt;This is useful for developing an application. Process is typically killed soon when it finishes job, so you can't examine program state and track down the origin of the problem. Debugger supports these tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
RACK provides above features as restful service.&lt;br /&gt;
Application only communicates with RACK via useful library we provide.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
This is the image of program adapted RACK.&lt;br /&gt;
You can simply develop a distributed application as below.&lt;br /&gt;
You don't need to write complex and unique code.&lt;br /&gt;
Especially, you don't need to write cloud-aware code, that is you don't need to know IP address.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Pseudo-Code.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Use-Cases.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benchmark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
We conducted a benchmark test of OpenStack Native Application that behaves like the first example of above usecases.&lt;br /&gt;
The following graph shows the result.&lt;br /&gt;
We can see one of the characteristics of OpenStack Native Application from this graph.&lt;br /&gt;
This application scales worker processes out depending on the number of dataset, and these processes work in parallel, so the total execution time is held constant.&lt;br /&gt;
Theoretically, the more it scales out, the shorter the execution time is.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Benchmark.png]]&lt;br /&gt;
&lt;br /&gt;
It's good for both customers and cloud providers.&lt;br /&gt;
For customers, it's less expensive to use a lot of low-spec instances to process data fast than a high spec instance.&lt;br /&gt;
For cloud providers, a large amount of resources will come to be consumed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/stackforge/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Benchmark.png&amp;diff=58596</id>
		<title>File:RACK-Benchmark.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Benchmark.png&amp;diff=58596"/>
				<updated>2014-07-22T03:12:06Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: Takehirokaneko uploaded a new version of &amp;amp;quot;File:RACK-Benchmark.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Benchmark.png&amp;diff=58595</id>
		<title>File:RACK-Benchmark.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Benchmark.png&amp;diff=58595"/>
				<updated>2014-07-22T02:53:15Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Use-Cases.png&amp;diff=58417</id>
		<title>File:RACK-Use-Cases.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Use-Cases.png&amp;diff=58417"/>
				<updated>2014-07-18T10:49:37Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Pseudo-Code.png&amp;diff=58416</id>
		<title>File:RACK-Pseudo-Code.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Pseudo-Code.png&amp;diff=58416"/>
				<updated>2014-07-18T10:49:24Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Features.png&amp;diff=58415</id>
		<title>File:RACK-Features.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Features.png&amp;diff=58415"/>
				<updated>2014-07-18T10:48:54Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Process-Image.png&amp;diff=58414</id>
		<title>File:RACK-Process-Image.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Process-Image.png&amp;diff=58414"/>
				<updated>2014-07-18T10:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58413</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58413"/>
				<updated>2014-07-18T10:44:29Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a Linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
Look at the picture below.&lt;br /&gt;
It indicates the image of Linux process inside RACK.&lt;br /&gt;
Generally, an executable is made through the process of compile and link, and operating system manages it as process when it is loaded into memory.&lt;br /&gt;
Inside RACK, VM image represents executable and it includes OS and middleware as well as an application.&lt;br /&gt;
When the executable (actually VM image) is launched on OpenStack, RACK gives it a process ID (PID).&lt;br /&gt;
Additionally, when the process executes &amp;quot;Fork&amp;quot;, a child process is launched, and given PID and a parent PID (PPID).&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Data Structure'''&amp;lt;br /&amp;gt;In order to manage a VM like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GID(process group ID) to it.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;Processes can share the data such as the data to process and their outputs.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;There are multiple ways to use this, storing the data file to process and the output file, and sharing the data file between some processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In near future we plan to provide following features.&lt;br /&gt;
&lt;br /&gt;
* '''Pipeline'''&amp;lt;br /&amp;gt;The feature that chains a process to other by their standard streams just like Unix pipeline.&lt;br /&gt;
&lt;br /&gt;
* '''Zombie process Collector'''&amp;lt;br /&amp;gt;When a process failed to be killed, it executes an endless loop processing, or its parent process is killed, it becomes a zombie process. Zombie process collector detects these processes and clean up.&lt;br /&gt;
&lt;br /&gt;
* '''Compiler'''&amp;lt;br /&amp;gt;VM image creation automation tool. Compiler assists you to create VM image adapted RACK.&lt;br /&gt;
&lt;br /&gt;
* '''Debugger'''&amp;lt;br /&amp;gt;This is useful for developing an application. Process is typically killed soon when it finishes job, so you can't examine program state and track down the origin of the problem. Debugger supports these tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
RACK provides above features as restful service.&lt;br /&gt;
Application only communicates with RACK via useful library we provide.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
This is the image of program adapted RACK.&lt;br /&gt;
You can simply develop a distributed application as below.&lt;br /&gt;
You don't need to write complex and unique code.&lt;br /&gt;
Especially, you don't need to write cloud-aware code, that is you don't need to know IP address.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Pseudo-Code.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Use-Cases.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bench Mark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/stackforge/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58412</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58412"/>
				<updated>2014-07-18T10:44:10Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: /* VM like a Linux process? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a Linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
Look at the picture below.&lt;br /&gt;
It indicates the image of Linux process inside RACK.&lt;br /&gt;
Generally, an executable is made through the process of compile and link, and operating system manages it as process when it is loaded into memory.&lt;br /&gt;
Inside RACK, VM image represents executable and it includes OS and middleware as well as an application.&lt;br /&gt;
When the executable (actually VM image) is launched on OpenStack, RACK gives it a process ID (PID).&lt;br /&gt;
Additionally, when the process executes &amp;quot;Fork&amp;quot;, a child process is launched, and given PID and a parent PID (PPID).&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Process-Image.png]]&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Data Structure'''&amp;lt;br /&amp;gt;In order to manage a VM like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GID(process group ID) to it.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;Processes can share the data such as the data to process and their outputs.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;There are multiple ways to use this, storing the data file to process and the output file, and sharing the data file between some processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In near future we plan to provide following features.&lt;br /&gt;
&lt;br /&gt;
* '''Pipeline'''&amp;lt;br /&amp;gt;The feature that chains a process to other by their standard streams just like Unix pipeline.&lt;br /&gt;
&lt;br /&gt;
* '''Zombie process Collector'''&amp;lt;br /&amp;gt;When a process failed to be killed, it executes an endless loop processing, or its parent process is killed, it becomes a zombie process. Zombie process collector detects these processes and clean up.&lt;br /&gt;
&lt;br /&gt;
* '''Compiler'''&amp;lt;br /&amp;gt;VM image creation automation tool. Compiler assists you to create VM image adapted RACK.&lt;br /&gt;
&lt;br /&gt;
* '''Debugger'''&amp;lt;br /&amp;gt;This is useful for developing an application. Process is typically killed soon when it finishes job, so you can't examine program state and track down the origin of the problem. Debugger supports these tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
RACK provides above features as restful service.&lt;br /&gt;
Application only communicates with RACK via useful library we provide.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
This is the image of program adapted RACK.&lt;br /&gt;
You can simply develop a distributed application as below.&lt;br /&gt;
You don't need to write complex and unique code.&lt;br /&gt;
Especially, you don't need to write cloud-aware code, that is you don't need to know IP address.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Pseudo-Code.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Use-Cases.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bench Mark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/stackforge/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58411</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58411"/>
				<updated>2014-07-18T10:42:52Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a Linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VM like a Linux process? ==&lt;br /&gt;
&lt;br /&gt;
Look at the picture below.&lt;br /&gt;
It indicates the image of Linux process inside RACK.&lt;br /&gt;
Generally, an executable is made through the process of compile and link, and operating system manages it as process when it is loaded into memory.&lt;br /&gt;
Inside RACK, VM image represents executable and it includes OS and middleware as well as an application.&lt;br /&gt;
When the executable (actually VM image) is launched on OpenStack, RACK gives it a process ID (PID).&lt;br /&gt;
Additionally, when the process executes &amp;quot;Fork&amp;quot;, a child process is launched, and given PID and a parent PID (PPID).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Features.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Data Structure'''&amp;lt;br /&amp;gt;In order to manage a VM like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GID(process group ID) to it.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;Processes can share the data such as the data to process and their outputs.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;There are multiple ways to use this, storing the data file to process and the output file, and sharing the data file between some processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In near future we plan to provide following features.&lt;br /&gt;
&lt;br /&gt;
* '''Pipeline'''&amp;lt;br /&amp;gt;The feature that chains a process to other by their standard streams just like Unix pipeline.&lt;br /&gt;
&lt;br /&gt;
* '''Zombie process Collector'''&amp;lt;br /&amp;gt;When a process failed to be killed, it executes an endless loop processing, or its parent process is killed, it becomes a zombie process. Zombie process collector detects these processes and clean up.&lt;br /&gt;
&lt;br /&gt;
* '''Compiler'''&amp;lt;br /&amp;gt;VM image creation automation tool. Compiler assists you to create VM image adapted RACK.&lt;br /&gt;
&lt;br /&gt;
* '''Debugger'''&amp;lt;br /&amp;gt;This is useful for developing an application. Process is typically killed soon when it finishes job, so you can't examine program state and track down the origin of the problem. Debugger supports these tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
RACK provides above features as restful service.&lt;br /&gt;
Application only communicates with RACK via useful library we provide.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pseudo Code ==&lt;br /&gt;
&lt;br /&gt;
This is the image of program adapted RACK.&lt;br /&gt;
You can simply develop a distributed application as below.&lt;br /&gt;
You don't need to write complex and unique code.&lt;br /&gt;
Especially, you don't need to write cloud-aware code, that is you don't need to know IP address.&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Pseudo-Code.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Use-Cases.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bench Mark of OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/stackforge/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58342</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=58342"/>
				<updated>2014-07-17T07:15:00Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenStack Native Application ==&lt;br /&gt;
&lt;br /&gt;
The present applications were designed at &amp;quot;before the cloud&amp;quot;.&lt;br /&gt;
As those applications are not intended for cloud, they need other tools such as Chef, Puppet, Ansible, Serf, etc to utilize the cloud power.&lt;br /&gt;
Thus the systems tend to become more complex on the cloud. We must think the &amp;quot;after the cloud&amp;quot; application now.&lt;br /&gt;
&lt;br /&gt;
The “after the cloud” application we think satisfies below.&lt;br /&gt;
&lt;br /&gt;
# The application logic determines amount of required resources by itself.&lt;br /&gt;
# The application logic iterates allocations/releases of resources from cloud.&lt;br /&gt;
# Those allocations/releases behave like creation/deletion of process.&lt;br /&gt;
&lt;br /&gt;
We named the application with such behavior “OpenStack Native Application”.&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK enables an application to control VMs like a linux process.&lt;br /&gt;
It provides an application with PID, parent-child relationship, “Fork” / “Kill” VMs capabilities, interVM communication and message exchange without VM’s IP address.&lt;br /&gt;
Ultimately, RACK enables you to implement a large scale distributed system in a variety of programming languages on OpenStack. &lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
* '''Additional attributes to an instance'''&amp;lt;br /&amp;gt;In order to treat an instance like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GroupID(process group ID) to it. In the rest of the document, instance is called &amp;quot;process&amp;quot;. This enables to control OpenStack as program resource easily. For example, when a process wants to create an additional process, the process executes fork method in the program. Then, a new process(i.e. child process) is created with the same image as well as connected to the same network with its parent process's. These processes are associated with a GroupID.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;This enables to store data in key-value pairs. The shared memory space is allocated per a GroupID and each space is isolated. Process can add, get, edit and delete a key-value data.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;This enables to store files. The file system is allocated per a GroupID and each one is isolated. Process can add, get and delete files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/ctc-g/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=57714</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=57714"/>
				<updated>2014-07-09T01:07:11Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: /* Architecture Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK provides the ability that can control OpenStack as program resource with an application.&lt;br /&gt;
From an application, the VM instance looks like the Linux process through the RACK, so you can use &amp;quot;Exec&amp;quot;, &amp;quot;Fork&amp;quot;, &amp;quot;Kill&amp;quot; commands against the processes(actually VMs).&lt;br /&gt;
It enables you to implement a large scale distributed system in a variety of programming languages on OpenStack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
* '''Additional attributes to an instance'''&amp;lt;br /&amp;gt;In order to treat an instance like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GroupID(process group ID) to it. In the rest of the document, instance is called &amp;quot;process&amp;quot;. This enables to control OpenStack as program resource easily. For example, when a process wants to create an additional process, the process executes fork method in the program. Then, a new process(i.e. child process) is created with the same image as well as connected to the same network with its parent process's. These processes are associated with a GroupID.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;This enables to store data in key-value pairs. The shared memory space is allocated per a GroupID and each space is isolated. Process can add, get, edit and delete a key-value data.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;This enables to store files. The file system is allocated per a GroupID and each one is isolated. Process can add, get and delete files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecutre-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/ctc-g/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=57713</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=57713"/>
				<updated>2014-07-09T01:04:25Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: /* Architecture Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK provides the ability that can control OpenStack as program resource with an application.&lt;br /&gt;
From an application, the VM instance looks like the Linux process through the RACK, so you can use &amp;quot;Exec&amp;quot;, &amp;quot;Fork&amp;quot;, &amp;quot;Kill&amp;quot; commands against the processes(actually VMs).&lt;br /&gt;
It enables you to implement a large scale distributed system in a variety of programming languages on OpenStack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
* '''Additional attributes to an instance'''&amp;lt;br /&amp;gt;In order to treat an instance like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GroupID(process group ID) to it. In the rest of the document, instance is called &amp;quot;process&amp;quot;. This enables to control OpenStack as program resource easily. For example, when a process wants to create an additional process, the process executes fork method in the program. Then, a new process(i.e. child process) is created with the same image as well as connected to the same network with its parent process's. These processes are associated with a GroupID.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;This enables to store data in key-value pairs. The shared memory space is allocated per a GroupID and each space is isolated. Process can add, get, edit and delete a key-value data.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;This enables to store files. The file system is allocated per a GroupID and each one is isolated. Process can add, get and delete files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File:RACK-Architecture-Overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/ctc-g/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=File:RACK-Architecutre-Overview.png&amp;diff=57712</id>
		<title>File:RACK-Architecutre-Overview.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=File:RACK-Architecutre-Overview.png&amp;diff=57712"/>
				<updated>2014-07-09T01:02:18Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=57709</id>
		<title>RACK</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=RACK&amp;diff=57709"/>
				<updated>2014-07-09T00:48:25Z</updated>
		
		<summary type="html">&lt;p&gt;Takehirokaneko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RACK (Real Application Centric Kernel) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is RACK? ==&lt;br /&gt;
&lt;br /&gt;
RACK provides the ability that can control OpenStack as program resource with an application.&lt;br /&gt;
From an application, the VM instance looks like the Linux process through the RACK, so you can use &amp;quot;Exec&amp;quot;, &amp;quot;Fork&amp;quot;, &amp;quot;Kill&amp;quot; commands against the processes(actually VMs).&lt;br /&gt;
It enables you to implement a large scale distributed system in a variety of programming languages on OpenStack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use RACK in many cases. Followings are some examples.&lt;br /&gt;
&lt;br /&gt;
* You can implement a new architecture application. For example, you can build an application that calculates the necessary amount of computing resource(i.e. instance) depending on the data to process and launches additional instances dynamically. Then, the data will be processed very quickly since these instances work in parallel. This new architecture application is suitable for processing a large amount of data.&lt;br /&gt;
&lt;br /&gt;
* You can integrate existing system such as batch system with Hadoop and Web application using RACK. For example, RACK enables you to deploy Hadoop cluster easily and add autoscale function to your Web applications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
RACK provides some features as follows.&lt;br /&gt;
&lt;br /&gt;
* '''Additional attributes to an instance'''&amp;lt;br /&amp;gt;In order to treat an instance like a Linux process, RACK adds some additional attributes such as PID(process ID), PPID(parent's process ID) and GroupID(process group ID) to it. In the rest of the document, instance is called &amp;quot;process&amp;quot;. This enables to control OpenStack as program resource easily. For example, when a process wants to create an additional process, the process executes fork method in the program. Then, a new process(i.e. child process) is created with the same image as well as connected to the same network with its parent process's. These processes are associated with a GroupID.&lt;br /&gt;
&lt;br /&gt;
* '''Interprocess Communication'''&amp;lt;br /&amp;gt;Processes can send a message with each other without knowing each other's IP address.&lt;br /&gt;
&lt;br /&gt;
* '''Shared Memory'''&amp;lt;br /&amp;gt;This enables to store data in key-value pairs. The shared memory space is allocated per a GroupID and each space is isolated. Process can add, get, edit and delete a key-value data.&lt;br /&gt;
&lt;br /&gt;
* '''File System'''&amp;lt;br /&amp;gt;This enables to store files. The file system is allocated per a GroupID and each one is isolated. Process can add, get and delete files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
'''SourceCode'''&lt;br /&gt;
* https://github.com/ctc-g/rack&lt;/div&gt;</summary>
		<author><name>Takehirokaneko</name></author>	</entry>

	</feed>