Endo kitura on_bluemix

78
KITURA を BLUEMIX で実⾏してみる

Transcript of Endo kitura on_bluemix

Page 1: Endo kitura on_bluemix

KITURA を BLUEMIX で実⾏してみる

Page 2: Endo kitura on_bluemix

⾃⼰紹介

• 会社:株式会社ジェーエムエーシステムズ(5年⽬)

• 所属:モバイルソリューション事業部

• 好きな⾔語:Objective-C, Javascript

• 仕事:iOSアプリの開発がメイン

Page 3: Endo kitura on_bluemix

最近の活動

Page 4: Endo kitura on_bluemix

アジェンダ

1. Kituraってどんなもの?

2. Kituraを使って、Webサーバを構築してみる!(←重点的に)

3. 他のWebフレームワークと⽐べてみる!

4. 今後のKituraに期待すること!

Page 5: Endo kitura on_bluemix

Kituraって?

⼀⾔で⾔うと、

Swiftで開発できるWebアプリケーション⽤の

フレームワーク

Page 6: Endo kitura on_bluemix

1.Kituraって?

サーバで実⾏できるSwiftといえば「Perfect」

Page 7: Endo kitura on_bluemix

1.Kituraって?

BluemixのSwift対応を発表!!

※私が現地で撮影しました

Page 8: Endo kitura on_bluemix

1.Kituraって?

Webフレームワーク「Kitura」の発表

Page 9: Endo kitura on_bluemix

Kituraって?

で、 何ができるの?

Page 10: Endo kitura on_bluemix

Kituraって?

• テンプレートエンジンの利⽤ - Mustache形式を採⽤(デザイナと作業分担しやすい)

• ルーティング - router.get(){} - router.post(){}

• URLからの値を取得 • リクエストパラメータの取得 • デバッグログの出⼒

Page 11: Endo kitura on_bluemix

まぁ普通です。

Page 12: Endo kitura on_bluemix

⾔い換えれば、違和感なく使い始めることができます。

Page 13: Endo kitura on_bluemix

Kituraを使ったWebサーバを構築!

Kituraの始め⽅ (失敗編)

Page 14: Endo kitura on_bluemix

• Bluemixランライム上で構築します

Kituraサーバ構築(失敗編)

Page 15: Endo kitura on_bluemix

• 「計算」カテゴリー内の「CFアプリケーション」を選択

Kituraサーバ構築(失敗編)

Page 16: Endo kitura on_bluemix

• 「ランタイム」を選択

Kituraサーバ構築(失敗編)

Page 17: Endo kitura on_bluemix

• 必要な情報を⼊⼒すると、環境が作成されます

Kituraサーバ構築(失敗編)

Page 18: Endo kitura on_bluemix

• 同じページに記載されている⼿順通りに実⾏すると、アプリが起動します。

1. 最初にCFコマンド・ライン・インターフェースをインストールします。

2. スターター・コードをダウンロードします。

3. ダウンロードしたコードを解凍します。 4. 以下のコマンドを実⾏します。

$ cd your_new_directory

$ cf api https://api.ng.bluemix.net

$ cf login -u user_id -o user_id -s space_name

$ cf push jmas-swift

Kituraサーバ構築(失敗編)

Page 19: Endo kitura on_bluemix

• ブラウザでアクセスしてみると…

Kituraサーバ構築(失敗編)

Page 20: Endo kitura on_bluemix

えっ。 超簡単〜。

Page 21: Endo kitura on_bluemix

• ということで、最初の⼿順でダウンロードしたスターターコードを、Kituraに置き換えてみます。

• 使うソースコードはこちら

(https://github.com/IBM-Swift/Kitura-Sample)

Kituraサーバ構築(失敗編)

Page 22: Endo kitura on_bluemix

• サンプルをダウンロードして、あとは同じ⼿順で実⾏してみると…

Kituraサーバ構築(失敗編)

Page 23: Endo kitura on_bluemix

!!!!!!!

Page 24: Endo kitura on_bluemix

あれ?

Page 25: Endo kitura on_bluemix

• ビルドエラーになりました。 • ここから⻑い戦いが始まります。

Kituraサーバ構築(失敗編)

Page 26: Endo kitura on_bluemix

• BuildPackの差し替え • BuildPackは、Cloud Foundry 上で、任意のアプリケーションを

実⾏できるようにするための仕組みのこと。 • これをカスタムのBuildPackにして、その中で、必要なライブラリ

をインストールしてみると…

Kituraサーバ構築(失敗編)

権限エラー!!

Page 27: Endo kitura on_bluemix

• VirtualBoxでUbuntuを構築! • それならば、ランタイムと同じ環境をローカルに構築 • 必要なライブラリをビルドして、出来上がったライブラリを使えば

いいのでは? • ということで…

1. VirtualBoxのインストール

2. Ubuntu14.04の構築 3. Ubuntu上にSwiftのコンパイラをインストール

4. Kituraを実⾏するために必要なライブラリをインストール 5. 完成した.soファイルや.hファイルをgithubに

6. BuildPackの中で、必要なライブラリをランタイム環境に展開

Kituraサーバ構築(失敗編)

Page 28: Endo kitura on_bluemix

その結果…

やっぱり失敗!!なんでだー!?

Page 29: Endo kitura on_bluemix

ってね。

Page 30: Endo kitura on_bluemix

まぁ。

そんな気がしていました。

おとなしく推奨されているDockerで構築します。

Page 31: Endo kitura on_bluemix

ようやく本題

Page 32: Endo kitura on_bluemix

Kituraを使ったWebサーバを構築!

正しい(?) Kituraの始め⽅ (for Mac)

Page 33: Endo kitura on_bluemix

正しいKituraの始め⽅

ざっくり説明すると… 1. Docker のインストール 2. CF Cli Toolのインストール 3. DockerFileを作成する 4. imageをビルドしてプッシュ 5. Bluemix上でコンテナを作成

Page 34: Endo kitura on_bluemix

正しいKituraの始め⽅

• Dockerのダウンロードとインストール https://www.docker.com/products/docker-toolbox ※Docker ToolBoxでググると出てきます。

Page 35: Endo kitura on_bluemix

正しいKituraの始め⽅

• Cloud Foundry CLI をダウンロードして、インストールします

https://github.com/cloudfoundry/cli/releases ※(参考サイト) https://console.ng.bluemix.net/docs/containers/container_cli_cfic.html

Page 36: Endo kitura on_bluemix

正しいKituraの始め⽅

• IBM Containers Cloud Foundry プラグインをダウンロード、インストールします。

$ cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-mac

※(参考サイト) https://console.ng.bluemix.net/docs/containers/container_cli_cfic.html

Page 37: Endo kitura on_bluemix

正しいKituraの始め⽅

• Bluemix上で、独⾃コンテナの追加を⾏います。

Page 38: Endo kitura on_bluemix

※注意※

Page 39: Endo kitura on_bluemix

初めての⽅は、 最初にレジストリ名称

を設定できます。

Page 40: Endo kitura on_bluemix

が、後で 変更できません。

Page 41: Endo kitura on_bluemix

企業アカウントなどの場合はご注意くださ

い。

Page 42: Endo kitura on_bluemix

私は jmas_kitura_test にしちゃいました。

Page 43: Endo kitura on_bluemix

これからDockerを使うときは、常にKituraを意識することになりました。

Page 44: Endo kitura on_bluemix

まだ、会社には バレていません。

Page 45: Endo kitura on_bluemix

しばらく黙ってます。。。

Page 46: Endo kitura on_bluemix

正しいKituraの始め⽅

• またローカルでの作業に戻ります • Bluemixにログインします $ cf login

• IBM Containers CF CLI プラグインを実⾏します

$ cf ic namespace set jmas_kitura_test $ cf ic login

Page 47: Endo kitura on_bluemix

正しいKituraの始め⽅

• 環境変数を設定します • 前⾴のログインコマンドを実⾏すると、

以下のログが出⼒されますので、合わせて実⾏します

$ export DOCKER_HOST=tcp://containers-api.ng.bluemix.net:8443

$ export DOCKER_CERT_PATH=/Users/endo/.ice/certs/containers-api.ng.bluemix.net/

$ export DOCKER_TLS_VERIFY=1

Page 48: Endo kitura on_bluemix

正しいKituraの始め⽅

• DockerFileを⽤意します githubにサンプルがありますので、それをダウンロードするのが良いと思います。 https://github.com/IBM-Swift/kitura-ubuntu-docker ※[kitura ubuntu docker]で検索すればヒットします。

※⾃分で記述してもOK

Page 49: Endo kitura on_bluemix

正しいKituraの始め⽅

• DockerをBuildします • ⽤意したDockerFileのあるディレクト

リまで移動して以下のコマンドを実⾏します

$ docker build -t=“image_name" .

Page 50: Endo kitura on_bluemix

正しいKituraの始め⽅

• Dockerのイメージをタグ付けします $ docker tag jmas_kitura registry.ng.bluemix.net/

jmas_kitura_test/jmas_kitura

• イメージをプッシュします $ docker push registry.ng.bluemix.net/jmas_kitura_test/

jmas_kitura

Page 51: Endo kitura on_bluemix

正しいKituraの始め⽅

• ブラウザでBluemixにログインしてみます

Page 52: Endo kitura on_bluemix

正しいKituraの始め⽅

• コンテナを選択すると……

キターーーーーー!!!!!

Page 53: Endo kitura on_bluemix

まだ終わりじゃありません!

Page 54: Endo kitura on_bluemix

正しいKituraの始め⽅

• ここからコンテナを作成します。

Page 55: Endo kitura on_bluemix

正しいKituraの始め⽅

• 起動したコンテナに接続します # CONTAINER IDを確認します

$ docker ps

# コンテナにattachします

$ docker attach CONTAINER ID

Page 56: Endo kitura on_bluemix

正しいKituraの始め⽅

• github などからソースコードをダウンロードします。

• Kitura-Sampleが雰囲気を掴むには、いい感じです

https://github.com/IBM-Swift/Kitura-Sample

Page 57: Endo kitura on_bluemix

正しいKituraの始め⽅

$ git clone https://github.com/IBM-Swift/Kitura-Sample.git

$ cd ./Kitura-Sample

$ make

# または

$ swift build -Xcc -fblocks

# これでビルドが完了です

# 最後に以下のコマンドで実⾏します

$ ./.build/debug/Kitura-Sample

Page 58: Endo kitura on_bluemix

正しいKituraの始め⽅

• これで、ブラウザからアクセスしてみると…

Page 59: Endo kitura on_bluemix

お疲れ様でした。

サーバ構築の完了です。

Page 60: Endo kitura on_bluemix

では簡単に、ソースと結果の画⾯を⾒てみます

Page 61: Endo kitura on_bluemix

どんな動きをしているのか?

• どんな動きをしているのか?

router.get("/hello") { _, response, next in response.setHeader("Content-Type", value: "text/plain; charset=utf-8") do { try response.status(HttpStatusCode.OK).send("Hello World, from Kitura!").end() } catch {} next() }

- ソース

- URL 「http://xxx.xxx.xxx.xxx:8090/hello」

- 結果

Page 62: Endo kitura on_bluemix

どんな動きをしているのか?

• どんな動きをしているのか?

router.get("/error") { _, response, next in Log.error("Example of error being set") response.status(HttpStatusCode.INTERNAL_SERVER_ERROR) response.error = NSError(domain: "RouterTestDomain", code: 1, userInfo: [:]) next() }

- ソース

- URL 「http://xxx.xxx.xxx.xxx:8090/error」

- 結果

Page 63: Endo kitura on_bluemix

どんな動きをしているのか?

• どんな動きをしているのか?

router.get("/users/:user") { request, response, next in response.setHeader("Content-Type", value: "text/html; charset=utf-8") let p1 = request.params["user"] ?? "(nil)" do { try response.status(HttpStatusCode.OK).send( "<!DOCTYPE html><html><body>" + "<b>User:</b> \(p1)" + "</body></html>\n\n").end() } catch {} next() }

- ソース

- URL 「http://xxx.xxx.xxx.xxx:8090/users/endo」- 結果

Page 64: Endo kitura on_bluemix

こんな感じ。

あとは皆さんも⾃分で体験してみてください。

Page 65: Endo kitura on_bluemix

他の⾔語との⽐較

• 今回は、処理性能を「Go」と⽐較してみたいと思います。

Page 66: Endo kitura on_bluemix

他の⾔語との⽐較

• ⽐較はApache Bench を使った負荷テストで、性能を⽐較してみます。

Page 67: Endo kitura on_bluemix

他の⾔語との⽐較

• 公平を期すために、どちらも同じBluemix Docker上でソースコードをコンパイルして実⾏してみました。

Page 68: Endo kitura on_bluemix

他の⾔語との⽐較

• Kituraのソースコードimport KituraRouter import KituraNet import KituraSys let router = Router() router.get("/") { request, response, next in response.status(HttpStatusCode.OK).send("Hello, World!") next() } let server = HttpServer.listen(8090, delegate: router) Server.run()

Page 69: Endo kitura on_bluemix

他の⾔語との⽐較

• Goのソースコードpackage main import ( "fmt" "net/http" "log" ) func HelloServer(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World\n") } func TestServer(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "TEST\n") } func main() { http.HandleFunc("/", HelloServer) http.HandleFunc("/test", TestServer) log.Printf("Start Go HTTP Server") err := http.ListenAndServe(":8090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }

Page 70: Endo kitura on_bluemix

他の⾔語との⽐較

テストケース1 • リクエスト数:100 • 同時リクエスト数:100 ab -n 100 -c 100 http://x.x.x.x:8090/

Page 71: Endo kitura on_bluemix

他の⾔語との⽐較

テストケース1 • 結果

1秒間に処理したリクエスト 平均応答時間

Kitura 18.77 53.269 ms

Go(net/http) 65.22 15.333 ms

Page 72: Endo kitura on_bluemix

Go の圧勝…

Page 73: Endo kitura on_bluemix

他の⾔語との⽐較

テストケース2 • リクエスト数:500 • 同時リクエスト数:200 ab -n 500 -c 200 http://x.x.x.x:8090/

Page 74: Endo kitura on_bluemix

他の⾔語との⽐較

テストケース2 • 結果

1秒間に処理したリクエスト 平均応答時間

Kitura 59.01 16.269 ms

Go(net/http) 70.74 14.137 ms

Page 75: Endo kitura on_bluemix

意外にも僅差に…

Page 76: Endo kitura on_bluemix

まだまだこれから改良されていくことを考えると、なかな

かの結果なのでは?

Page 77: Endo kitura on_bluemix

今後のKituraに期待すること(IBM様へのお願い)

• RDB関連の処理がまだまだ弱いと思います

• Bluemixランタイムで、Kituraを動かせるようにしてください

• KituraのWebSocket対応してください!

• SSLへの対応をお願いします!!

Page 78: Endo kitura on_bluemix

遠藤 武宣 ([email protected])

ご清聴ありがとうございました